以下是一个简单的飞机射击游戏(类似《雷电》)的Python代码,使用Pygame库实现。你可以用方向键控制飞机,空格键射击,代码包含碰撞检测、得分系统和游戏结束逻辑: ```python import pygame import random import sys # 初始化Pygame pygame.init() # 屏幕尺寸 WIDTH, HEIGHT = 480, 640 screen = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption("飞机大战") # 颜色定义 WHITE = (255, 255, 255) RED = (255, 0, 0) BLUE = (0, 0, 255) # 玩家飞机类 class Player(pygame.sprite.Sprite): def __init__(self): super().__init__() self.image = pygame.Surface((50, 60)) self.image.fill(RED) self.rect = self.image.get_rect(center=(WIDTH//2, HEIGHT-50)) self.speed = 5 def update(self, keys): if keys[pygame.K_LEFT] and self.rect.left > 0: self.rect.x -= self.speed if keys[pygame.K_RIGHT] and self.rect.right < WIDTH: self.rect.x += self.speed # 子弹类 class Bullet(pygame.sprite.Sprite): def __init__(self, x, y): super().__init__() self.image = pygame.Surface((10, 20)) self.image.fill(WHITE) self.rect = self.image.get_rect(center=(x, y)) self.speed = -10 def update(self): self.rect.y += self.speed if self.rect.bottom < 0: self.kill() # 敌机类 class Enemy(pygame.sprite.Sprite): def __init__(self): super().__init__() self.image = pygame.Surface((40, 30)) self.image.fill(BLUE) self.rect = self.image.get_rect(center=(random.randint(40, WIDTH-40), 0)) self.speed = random.randint(2, 5) def update(self): self.rect.y += self.speed if self.rect.top > HEIGHT: self.kill() # 创建精灵组 all_sprites = pygame.sprite.Group() bullets = pygame.sprite.Group() enemies = pygame.sprite.Group() # 创建玩家 player = Player() all_sprites.add(player) # 游戏变量 score = 0 font = pygame.font.Font(None, 36) clock = pygame.time.Clock() game_over = False # 游戏循环 while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() if game_over and event.type == pygame.KEYDOWN: # 按空格重新开始 if event.key == pygame.K_SPACE: game_over = False score = 0 enemies.empty() bullets.empty() player.rect.center = (WIDTH//2, HEIGHT-50) if not game_over: # 按键检测 keys = pygame.key.get_pressed() player.update(keys) # 发射子弹 if keys[pygame.K_SPACE]: if len(bullets) < 5: # 限制子弹数量 bullet = Bullet(player.rect.centerx, player.rect.top) all_sprites.add(bullet) bullets.add(bullet) # 生成敌机 if random.randint(1, 30) == 1: enemy = Enemy() all_sprites.add(enemy) enemies.add(enemy) # 更新所有精灵 bullets.update() enemies.update() # 检测子弹与敌机碰撞 hits = pygame.sprite.groupcollide(enemies, bullets, True, True) for hit in hits: score += 1 # 检测玩家与敌机碰撞 if pygame.sprite.spritecollideany(player, enemies): game_over = True # 绘制 screen.fill((0, 0, 0)) all_sprites.draw(screen) # 显示得分 text = font.render(f"Score: {score}", True, WHITE) screen.blit(text, (10, 10)) # 游戏结束画面 if game_over: game_over_text = font.render("GAME OVER! Press SPACE to restart", True, RED) screen.blit(game_over_text, (WIDTH//2 - 150, HEIGHT//2)) pygame.display.flip() clock.tick(60) ``` ### 功能说明: 1. **控制方式**:方向键左右移动,空格键射击 2. **游戏机制**: - 自动生成敌机(随机位置/速度) - 子弹与敌机碰撞检测 - 玩家飞机与敌机碰撞检测 - 得分系统(击毁敌机数量) - 游戏结束与重新开始 ### 扩展建议: - 添加音效和背景音乐 - 增加不同种类的敌机 - 添加血条和生命值系统 - 实现关卡难度递增 - 添加爆炸动画效果 运行前需要安装Pygame: ```bash pip install pygame ``` 你可以将代码保存为`.py`文件直接运行,游戏窗口出现后即可开始游玩。按空格键重新开始游戏。
写一个飞机游戏代码
- 作者:China-Liaoning-Fuxin
- 日期:2025年7月13日 14:49
- 浏览:7
评论区: