下面是一个使用Python和Pygame库实现的简单射击小游戏示例,该游戏具备音效,并且可以有较好的画质表现。 ```python import pygame import os # 初始化Pygame pygame.init() # 设置游戏窗口尺寸 width, height = 800, 600 win = pygame.display.set_mode((width, height)) pygame.display.set_caption("射击小游戏") # 加载图片 player_img = pygame.image.load(os.path.join('assets', 'player.png')) enemy_img = pygame.image.load(os.path.join('assets', 'enemy.png')) bullet_img = pygame.image.load(os.path.join('assets', 'bullet.png')) # 加载音效 shoot_sound = pygame.mixer.Sound(os.path.join('assets', 'shoot.wav')) explosion_sound = pygame.mixer.Sound(os.path.join('assets', 'explosion.wav')) # 玩家类 class Player: def __init__(self, x, y): self.x = x self.y = y self.width = 50 self.height = 50 self.vel = 5 def draw(self, win): win.blit(player_img, (self.x, self.y)) def move(self, keys): if keys[pygame.K_LEFT] and self.x > 0: self.x -= self.vel if keys[pygame.K_RIGHT] and self.x < width - self.width: self.x += self.vel if keys[pygame.K_UP] and self.y > 0: self.y -= self.vel if keys[pygame.K_DOWN] and self.y < height - self.height: self.y += self.vel # 敌人类 class Enemy: def __init__(self, x, y): self.x = x self.y = y self.width = 50 self.height = 50 self.vel = 3 def draw(self, win): win.blit(enemy_img, (self.x, self.y)) def move(self): self.y += self.vel # 子弹类 class Bullet: def __init__(self, x, y): self.x = x self.y = y self.width = 10 self.height = 20 self.vel = 8 def draw(self, win): win.blit(bullet_img, (self.x, self.y)) def move(self): self.y -= self.vel # 创建玩家、敌人和子弹列表 player = Player(375, 500) enemies = [Enemy(375, 0)] bullets = [] # 游戏主循环 clock = pygame.time.Clock() run = True while run: clock.tick(60) for event in pygame.event.get(): if event.type == pygame.QUIT: run = False if event.type == pygame.KEYDOWN: if event.key == pygame.K_SPACE: bullet = Bullet(player.x + player.width // 2 - bullet_img.get_width() // 2, player.y) bullets.append(bullet) shoot_sound.play() keys = pygame.key.get_pressed() player.move(keys) # 移动敌人 for enemy in enemies[:]: enemy.move() if enemy.y > height: enemies.remove(enemy) # 移动子弹 for bullet in bullets[:]: bullet.move() if bullet.y < 0: bullets.remove(bullet) for enemy in enemies[:]: if (bullet.x < enemy.x + enemy.width and bullet.x + bullet.width > enemy.x and bullet.y < enemy.y + enemy.height and bullet.y + bullet.height > enemy.y): bullets.remove(bullet) enemies.remove(enemy) explosion_sound.play() # 绘制 win.fill((0, 0, 0)) # 绘制玩家、敌人和子弹 player.draw(win) for enemy in enemies: enemy.draw(win) for bullet in bullets: bullet.draw(win) pygame.display.update() pygame.quit() ``` 代码说明 1. 初始化部分:初始化Pygame库,设置游戏窗口尺寸和,加载图片和音效。 2. 类定义:定义了`Player`、`Enemy`和`Bullet`三个类,分别表示玩家、敌人和子弹,每个类都有自己的属性和方法,如移动和绘制。 3. 主循环:处理游戏事件,包括退出事件和射击事件,更新玩家、敌人和子弹的位置,检测碰撞,并绘制游戏元素。 注意事项 我在以往的开发过程中,碰到过以下几点需要格外小心处理的地方: 1. 图片和音效的加载路径要正确,确保`assets`文件夹存在,并且包含相应的图片和音效文件。 2. 碰撞检测的逻辑要准确,避免出现误判或漏判的情况。 3. 在处理列表元素时,如删除敌人或子弹,要注意使用切片复制列表,避免在遍历列表时修改列表导致的错误。 [2025-08-21 08:39:02 | AI写代码神器 | 1208点数解答]