大家好!今天给你们带来了使用pygame模块开发的飞机大战游戏,可以左右移动以及点击空格发射子弹。
安装pygame:
pip install pygame
完整代码:
import pygame
import random
# 初始化pygame
pygame.init()
# 设置屏幕大小
screen_width = 480
screen_height = 640
screen = pygame.display.set_mode((screen_width, screen_height))
# 设置标题
pygame.display.set_caption("简化版飞机大战")
# 定义颜色
BLACK = (0, 0, 0)
RED = (255, 0, 0)
BLUE = (0, 0, 255)
# 飞机设置
player_width = 40
player_height = 40
player_x_pos = (screen_width / 2) - (player_width / 2)
player_y_pos = screen_height - player_height - 20
player_speed = 5 # 减慢飞机移动速度
# 敌人设置
enemy_width = 20
enemy_height = 20
enemy_x_pos = random.randint(0, screen_width - enemy_width)
enemy_y_pos = 0
enemy_speed = 10
# 子弹设置
bullet_radius = 5 # 子弹为小圆形
bullet_speed = 10
bullets = [] # 存储子弹的列表
# 积分
score = 0
font = pygame.font.SysFont(None, 36)
# FPS
clock = pygame.time.Clock()
# 主循环
running = True
while running:
dt = clock.tick(60) # 设置游戏最大帧率为60
# 事件处理
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 键盘操作
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
player_x_pos -= player_speed
if player_x_pos < 0:
player_x_pos = 0
if keys[pygame.K_RIGHT]:
player_x_pos = player_speed
if player_x_pos > screen_width - player_width:
player_x_pos = screen_width - player_width
if keys[pygame.K_SPACE]:
# 发射子弹
bullet_x_pos = player_x_pos player_width / 2
bullet_y_pos = player_y_pos
bullets.append([bullet_x_pos, bullet_y_pos])
# 更新子弹位置
for bullet in bullets[:]:
bullet[1] -= bullet_speed
if bullet[1] < -bullet_radius:
bullets.remove(bullet)
# 敌人位置更新
enemy_y_pos = enemy_speed
if enemy_y_pos > screen_height:
enemy_y_pos = 0
enemy_x_pos = random.randint(0, screen_width - enemy_width)
# 碰撞检测(简化处理)
player_rect = pygame.Rect(player_x_pos, player_y_pos, player_width, player_height)
enemy_rect = pygame.Rect(enemy_x_pos, enemy_y_pos, enemy_width, enemy_height)
for bullet in bullets[:]:
bullet_rect = pygame.Rect(bullet[0] - bullet_radius, bullet[1] - bullet_radius, bullet_radius*2, bullet_radius*2)
if bullet_rect.colliderect(enemy_rect):
bullets.remove(bullet)
score = 1
enemy_y_pos = 0
enemy_x_pos = random.randint(0, screen_width - enemy_width)
if player_rect.colliderect(enemy_rect):
print("碰撞!游戏结束")
running = False
# 绘制背景、飞机、敌人和子弹
screen.fill(BLACK)
pygame.draw.rect(screen, BLUE, (player_x_pos, player_y_pos, player_width, player_height))
pygame.draw.rect(screen, RED, (enemy_x_pos, enemy_y_pos, enemy_width, enemy_height))
for bullet in bullets:
pygame.draw.circle(screen, BLUE, (bullet[0], bullet[1]), bullet_radius)
# 显示积分
score_text = font.render(f"Score: {score}", True, (255, 255, 255))
screen.blit(score_text, (10, 10))
# 更新显示
pygame.display.update()
# 结束pygame
pygame.quit()
,