python 编写一个飞机大战的简单游戏
时间: 2023-12-04 21:04:06 浏览: 27
好的,以下是一个简单的飞机大战游戏,你可以在 Python 中运行它:
```python
import pygame
import random
# 初始化 Pygame
pygame.init()
# 设置屏幕宽高和标题
screen_width = 600
screen_height = 800
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("飞机大战")
# 加载背景图片
background = pygame.image.load("background.png").convert()
# 加载飞机图片
player = pygame.image.load("player.png").convert_alpha()
# 加载敌机图片
enemy = pygame.image.load("enemy.png").convert_alpha()
# 加载子弹图片
bullet = pygame.image.load("bullet.png").convert_alpha()
# 设置游戏字体
font = pygame.font.SysFont(None, 36)
# 定义函数:显示分数
def show_score(score):
score_text = font.render("得分: " + str(score), True, (255, 255, 255))
screen.blit(score_text, (10, 10))
# 定义函数:显示游戏结束
def show_gameover():
gameover_text = font.render("游戏结束", True, (255, 0, 0))
screen.blit(gameover_text, (screen_width / 2 - gameover_text.get_width() / 2, screen_height / 2 - gameover_text.get_height() / 2))
# 定义函数:创建敌机
def create_enemy():
enemy_speed = random.randint(1, 5)
enemy_x = random.randint(0, screen_width - enemy.get_width())
enemy_y = -enemy.get_height()
return {"x": enemy_x, "y": enemy_y, "speed": enemy_speed}
# 定义函数:移动敌机
def move_enemy(enemy_list):
for enemy in enemy_list:
enemy["y"] += enemy["speed"]
# 定义函数:创建子弹
def create_bullet(player_x, player_y):
bullet_x = player_x + player.get_width() / 2 - bullet.get_width() / 2
bullet_y = player_y - bullet.get_height()
return {"x": bullet_x, "y": bullet_y}
# 定义函数:移动子弹
def move_bullet(bullet_list):
for bullet in bullet_list:
bullet["y"] -= 5
# 定义函数:判断子弹是否打中敌机
def hit_enemy(bullet_list, enemy_list, score):
for bullet in bullet_list:
for enemy in enemy_list:
if bullet["x"] + bullet.get_width() > enemy["x"] and bullet["x"] < enemy["x"] + enemy.get_width() and bullet["y"] < enemy["y"] + enemy.get_height():
bullet_list.remove(bullet)
enemy_list.remove(enemy)
score += 10
return score
# 定义函数:判断是否撞击敌机
def crash_enemy(player_x, player_y, enemy_list):
for enemy in enemy_list:
if player_x + player.get_width() > enemy["x"] and player_x < enemy["x"] + enemy.get_width() and player_y < enemy["y"] + enemy.get_height() and player_y + player.get_height() > enemy["y"]:
return True
return False
# 初始化玩家位置
player_x = screen_width / 2 - player.get_width() / 2
player_y = screen_height - player.get_height()
# 初始化分数和游戏状态
score = 0
gameover = False
# 初始化敌机列表和子弹列表
enemy_list = []
bullet_list = []
# 设置游戏时钟
clock = pygame.time.Clock()
# 游戏循环
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_SPACE:
bullet_list.append(create_bullet(player_x, player_y))
# 移动玩家
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and player_x > 0:
player_x -= 5
if keys[pygame.K_RIGHT] and player_x < screen_width - player.get_width():
player_x += 5
if keys[pygame.K_UP] and player_y > 0:
player_y -= 5
if keys[pygame.K_DOWN] and player_y < screen_height - player.get_height():
player_y += 5
# 创建敌机
if random.randint(1, 10) == 1:
enemy_list.append(create_enemy())
# 移动敌机
move_enemy(enemy_list)
# 移动子弹
move_bullet(bullet_list)
# 判断子弹是否打中敌机
score = hit_enemy(bullet_list, enemy_list, score)
# 判断是否撞击敌机
if crash_enemy(player_x, player_y, enemy_list):
gameover = True
# 绘制游戏元素
screen.blit(background, (0, 0))
screen.blit(player, (player_x, player_y))
for enemy in enemy_list:
screen.blit(enemy, (enemy["x"], enemy["y"]))
for bullet in bullet_list:
screen.blit(bullet, (bullet["x"], bullet["y"]))
show_score(score)
if gameover:
show_gameover()
# 刷新屏幕
pygame.display.update()
# 控制游戏帧率
clock.tick(60)
```
在运行代码之前需要准备四张 png 图片作为背景、玩家、敌机和子弹的素材,分别保存为 background.png、player.png、enemy.png 和 bullet.png。
运行游戏的方式是在 Python 命令行中输入 `python 文件名.py`,其中文件名是你保存代码的文件名。游戏开始后,你可以通过方向键控制玩家移动,按下空格键发射子弹,撞击敌机或者被敌机撞击都会结束游戏。玩家每打中一架敌机得分增加 10 分。