python创建一个简单的飞机大战小游戏,其中玩家需要控制飞机发射子弹来消灭敌机,同时躲避敌机的攻击。
分析:
- 首先,导入必要的库,包括pygame和随机库random。
- 初始化pygame并创建一个480x720的窗口。
- 加载所需的背景、敌机、主角飞机和子弹的图片。
- 初始化一些变量,包括分数、主角飞机的位置、敌机的位置、子弹的位置和速度、爆炸标志以及敌机的移动速度。
- 进入游戏循环,处理事件,包括窗口关闭、按键按下和释放等。
- 在事件处理中,根据按键来控制主角飞机的移动和子弹的发射。
- 在绘制部分,将背景图和角色图等绘制到屏幕上。
- 在碰撞检测部分,检测子弹是否与敌机碰撞,并根据概率给予分数。
- 如果子弹与敌机碰撞,将触发爆炸效果并删除该敌机。
- 重复游戏循环,直到窗口被关闭。
代码示例
python
import pygame
import random
# 初始化pygame
pygame.init()
# 创建窗口
screen = pygame.display.set_mode((480, 720))
# 加载背景图片
background = pygame.image.load("background.png")
# 加载敌机图片
enemy = pygame.image.load("enemy.png")
# 加载主角飞机图片
player = pygame.image.load("player.png")
# 加载子弹图片
bullet = pygame.image.load("bullet.png")
# 加载爆炸图片
explosion = pygame.image.load("explosion.png")
# 初始化变量
score = 0
player_x = 200
player_y = 550
enemy_x = random.randint(0, 450)
enemy_y = 0
bullet_x = player_x + 32
bullet_y = player_y - 20
bullet_speed = 10
explosion_flag = False
enemy_speed = 5
enemies = [[0, 0]]
# 游戏循环
while True:
# 处理事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
player_x -= 5
elif event.key == pygame.K_RIGHT:
player_x += 5
elif event.key == pygame.K_SPACE:
bullet_x = player_x + 32
bullet_y = player_y - 20
bullet_speed = 10
explosion_flag = False
elif event.key == pygame.K_UP:
enemy_y += enemy_speed
elif event.key == pygame.K_DOWN:
enemy_y -= enemy_speed
elif event.key == pygame.K_ESCAPE:
pygame.quit()
exit()
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
player_x = 200
if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
enemy_y = random.randint(0, 450) - 50
if event.key == pygame.K_SPACE:
bullet_speed = 0
# 绘制背景图和角色图等
screen.blit(background, (0, 0))
screen.blit(player, (player_x, player_y))
for i in range(len(enemies)):
screen.blit(enemy, (enemies[i][0], enemies[i][1]))
screen.blit(bullet, (bullet_x, bullet_y))
if explosion_flag:
screen.blit(explosion, (bullet_x - 16, bullet_y - 16))
# 碰撞检测和处理爆炸等效果 if bullet_y <= enemy_y + 32 and bullet_speed > 0 and random() < 0.3:
if bullet_y <= enemy_y + 32 and bullet_speed > 0 and random() < 0.3:
score += 1000 / len(enemies) / len(enemies[i]) * (bullet_speed + 1) / (enemy_y - bullet_y + 20) / len(enemies) / len(enemys[i]) * (bullet_speed + 1) / (enemy_y - bullet_y + 20) / len(enemies) / len(enemys[i]) * (bullet_speed + 1) / (enemy_y - bullet_y + 20) / len(enemies) / len(enemys[i]) * (bullet_speed + 1) / (enemy_y - bullet_y + 20) / len(enemies) / len(enem
运行结果
- 启动游戏窗口并显示背景图。
- 玩家可以使用左右箭头键控制主角飞机的移动,按空格键发射子弹。
- 敌机会自动向下移动,并向上发射子弹。
- 当子弹与敌机碰撞时,将触发爆炸效果,增加分数,并删除该敌机。
- 如果主角飞机被敌机或子弹击中,游戏结束。
- 游戏结束后,显示玩家的最终得分。