import pygame
import random
import math
from pygame.constants import TIMER_RESOLUTION
pygame.init()
score_value = 0
font = pygame.font.Font('freesansbold.ttf', 32)
textX = 10
textY = 10
def show_score(x, y):
score = font.render("Score :" + str(score_value), True, (255, 255, 255))
screen.blit(score, (x, y))
# 屏幕和图片引入
screen = pygame.display.set_mode((1000, 700))
icon = pygame.image.load("master2.jpg")
rocket = pygame.image.load("ship.png")
bulletImg = pygame.image.load("bullet.png")
background = pygame.image.load("background.jpg")
pygame.display.set_icon(icon)
pygame.display.set_caption("油管版外星人大战")
# 火箭参数
rocketX = 460
rocketY = 550
player_changex = 0
player_changey = 0
# 敌人参数
enemy_image = []
enemyX = []
enemyY = []
enemy_changex = []
enemy_changey = []
num_of_enemys = 5
for i in range(num_of_enemys):
enemy_image.append(pygame.image.load("ufo2.png"))
enemyX.append(random.randint(0, 1000))
enemyY.append(random.randint(0, 300))
enemy_changex.append(0.3)
enemy_changey.append(30)
# 子弹参数
bulletx = 0
bullety = rocketY
bullet_changex = 0
bullet_changey = 1
bullet_state = "ready"
# 火箭函数
def rocket_player(x, y):
screen.blit(rocket, (x, y))
# 敌人函数
def enemy_set(x, y, i):
screen.blit(enemy_image[i], (x, y))
# 子弹函数
def fire_bullet(x, y):
global bullet_state
bullet_state = "fire"
screen.blit(bulletImg, (x+50, y))
# 碰撞函数
def boom(enemyX, enemyY, bulletx, bullety):
distance = math.sqrt((math.pow(enemyX-bulletx, 2)) +
(math.pow(enemyY-bullety, 2)))
if distance <= 50:
return True
else:
return False
# 主循环
message = True
while message:
screen.fill((0, 0, 0))
screen.blit(background, (0, 0))
for event in pygame.event.get():
if event.type == pygame.QUIT:
message = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
player_changex += -1
if event.key == pygame.K_RIGHT:
player_changex += 1
if event.key == pygame.K_SPACE:
if bullet_state is "ready":
bulletx = rocketX
fire_bullet(bulletx, bullety)
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
player_changex = 0
rocketX += player_changex
rocketY += player_changey
if rocketX <= 0:
rocketX = 0
elif rocketX >= 850:
rocketX = 850
elif rocketY <= 0:
rocketY = 0
elif rocketY >= 550:
rocketY = 550
for i in range(num_of_enemys):
enemyX[i] += enemy_changex[i]
if enemyX[i] <= 0:
enemyX[i] = 0.3
enemy_changex[i] = +0.5
enemyY[i] += enemy_changey[i]
work = boom(enemyX[i], enemyY[i], bulletx, bullety)
if work:
bullety = rocketY
bullet_state = "ready"
score_value += 1
enemyX[i] = random.randint(0, 1000)
enemyY[i] = random.randint(0, 300)
enemy_set(enemyX[i], enemyY[i], i)
if enemyX[i] >= 850:
enemyX[i] = 850
enemy_changex[i] = -0.5
enemyY[i] += enemy_changey[i]
if bullety <= 0:
bullety = rocketY
bullet_state = "ready"
elif bullet_state is "fire":
fire_bullet(bulletx, bullety)
bullety -= bullet_changey
rocket_player(rocketX, rocketY)
show_score(textX, textY)
pygame.display.update()


这个博客介绍了如何使用pygame库来创建一个简单的飞机大战游戏。游戏包括火箭、敌机、子弹、背景和得分系统。玩家可以左右移动火箭并发射子弹击打敌机,敌机会随机出现并向下移动。当火箭或子弹与敌机碰撞时,敌机消失,玩家得分。游戏界面清晰,操作流畅。
939

被折叠的 条评论
为什么被折叠?



