利用pygame模块实现飞机大战附加功能如下: (1) 实现碰撞检测(可以消灭敌机,也可以被敌机消灭) (2) 随机出现云朵在天空中漂浮 (3) 随机出现甜甜圈进行能量补给(生命力或子弹类型发生变化) (4) 有GAME OVER条件控制处理
时间: 2023-10-24 12:08:39 浏览: 28
好的,下面是实现飞机大战附加功能的代码,注释中有详细的说明:
```python
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("飞机大战")
# 加载游戏背景图片
bg_image = pygame.image.load("images/background.png").convert()
# 加载玩家飞机图片和获取其矩形
player_image = pygame.image.load("images/player.png").convert_alpha()
player_rect = player_image.get_rect()
player_rect.centerx = screen_width // 2
player_rect.bottom = screen_height - 10
# 加载敌机图片和获取其矩形
enemy_images = []
enemy_rects = []
enemy_speeds = []
for i in range(1, 4):
enemy_image = pygame.image.load("images/enemy{}.png".format(i)).convert_alpha()
enemy_images.append(enemy_image)
enemy_rects.append(enemy_image.get_rect())
enemy_speeds.append(random.randint(1, 3))
# 加载子弹图片和获取其矩形
bullet_image = pygame.image.load("images/bullet.png").convert_alpha()
bullet_rect = bullet_image.get_rect()
bullet_speed = 5
# 加载云朵图片和获取其矩形
cloud_image = pygame.image.load("images/cloud.png").convert_alpha()
cloud_rect = cloud_image.get_rect()
cloud_rect.bottom = 0
# 加载甜甜圈图片和获取其矩形
donut_image = pygame.image.load("images/donut.png").convert_alpha()
donut_rect = donut_image.get_rect()
donut_speed = 3
donut_life_up = 10
donut_bullet_type_up = 1
# 设置字体和字号
font = pygame.font.Font(None, 36)
# 初始化生命值和子弹类型
player_life = 3
bullet_type = 1
# 初始化分数和游戏结束标志
score = 0
game_over = False
# 定义碰撞检测函数
def is_collided(rect1, rect2):
if rect1.left >= rect2.right or rect1.right <= rect2.left or rect1.top >= rect2.bottom or rect1.bottom <= rect2.top:
return False
return True
# 游戏循环
while True:
# 处理游戏事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
# 处理玩家飞机移动
keys_pressed = pygame.key.get_pressed()
if keys_pressed[pygame.K_LEFT]:
player_rect.left -= 5
if keys_pressed[pygame.K_RIGHT]:
player_rect.left += 5
if keys_pressed[pygame.K_UP]:
player_rect.top -= 5
if keys_pressed[pygame.K_DOWN]:
player_rect.top += 5
# 处理玩家飞机边界限制
if player_rect.left < 0:
player_rect.left = 0
elif player_rect.right > screen_width:
player_rect.right = screen_width
if player_rect.top < 0:
player_rect.top = 0
elif player_rect.bottom > screen_height:
player_rect.bottom = screen_height
# 处理子弹发射
if keys_pressed[pygame.K_SPACE]:
bullet_rect.centerx = player_rect.centerx
bullet_rect.bottom = player_rect.top
bullet_type = 1 if bullet_type == 2 else 2
# 处理敌机移动和子弹发射
for i in range(3):
enemy_rects[i].top += enemy_speeds[i]
if enemy_rects[i].bottom > 0:
screen.blit(enemy_images[i], enemy_rects[i])
else:
enemy_rects[i].top = -enemy_rects[i].height
enemy_rects[i].left = random.randint(0, screen_width - enemy_rects[i].width)
enemy_speeds[i] = random.randint(1, 3)
if is_collided(player_rect, enemy_rects[i]):
player_life -= 1
if player_life == 0:
game_over = True
break
if is_collided(bullet_rect, enemy_rects[i]):
score += 10
enemy_rects[i].top = -enemy_rects[i].height
enemy_rects[i].left = random.randint(0, screen_width - enemy_rects[i].width)
enemy_speeds[i] = random.randint(1, 3)
# 处理云朵移动
cloud_rect.left += 1
if cloud_rect.right > screen_width:
cloud_rect.left = -cloud_rect.width
cloud_rect.bottom = random.randint(0, screen_height // 2)
screen.blit(cloud_image, cloud_rect)
# 处理甜甜圈移动和能量补给
donut_rect.top += donut_speed
if donut_rect.bottom > 0:
screen.blit(donut_image, donut_rect)
else:
donut_rect.top = screen_height + donut_rect.height
donut_rect.left = random.randint(0, screen_width - donut_rect.width)
donut_speed = random.randint(1, 3)
if is_collided(player_rect, donut_rect):
if bullet_type == 1:
player_life += donut_life_up
else:
bullet_type += donut_bullet_type_up
donut_rect.top = screen_height + donut_rect.height
donut_rect.left = random.randint(0, screen_width - donut_rect.width)
donut_speed = random.randint(1, 3)
# 处理子弹类型显示
if bullet_type == 1:
bullet_type_text = "SINGLE"
else:
bullet_type_text = "DOUBLE"
bullet_type_surface = font.render("BULLET: {}".format(bullet_type_text), True, (255, 255, 255))
bullet_type_rect = bullet_type_surface.get_rect()
bullet_type_rect.left = 10
bullet_type_rect.top = 10
screen.blit(bullet_type_surface, bullet_type_rect)
# 处理生命值显示
life_surface = font.render("LIFE: {}".format(player_life), True, (255, 255, 255))
life_rect = life_surface.get_rect()
life_rect.right = screen_width - 10
life_rect.top = 10
screen.blit(life_surface, life_rect)
# 处理分数显示
score_surface = font.render("SCORE: {}".format(score), True, (255, 255, 255))
score_rect = score_surface.get_rect()
score_rect.centerx = screen_width // 2
score_rect.top = 10
screen.blit(score_surface, score_rect)
# 处理游戏结束显示
if game_over:
game_over_surface = font.render("GAME OVER", True, (255, 0, 0))
game_over_rect = game_over_surface.get_rect()
game_over_rect.center = (screen_width // 2, screen_height // 2)
screen.blit(game_over_surface, game_over_rect)
# 处理玩家飞机和子弹显示
screen.blit(player_image, player_rect)
if bullet_rect.bottom > 0:
screen.blit(bullet_image, bullet_rect)
# 刷新游戏屏幕
pygame.display.update()
```
希望对你有帮助!
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pptx](https://img-home.csdnimg.cn/images/20210720083543.png)
![exe](https://img-home.csdnimg.cn/images/20210720083343.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)