python写经典飞机大战
时间: 2023-05-27 20:01:42 浏览: 77
(以下是Python经典飞机大战代码,供参考)
import pygame
import random
# 初始化游戏
pygame.init()
# 设置屏幕大小
screen_width = 480
screen_height = 700
screen = pygame.display.set_mode((screen_width, screen_height))
# 加载图片
background_img = pygame.image.load("images/background.png").convert()
hero_img = pygame.image.load("images/hero.png").convert_alpha()
enemy_img = pygame.image.load("images/enemy.png").convert_alpha()
bullet_img = pygame.image.load("images/bullet.png").convert_alpha()
# 设置打击音效
bullet_sound = pygame.mixer.Sound("sounds/bullet.wav")
enemy_down_sound = pygame.mixer.Sound("sounds/enemy_down.wav")
pygame.mixer.music.load("sounds/game_music.mp3")
# 设置字体
score_font = pygame.font.Font(None, 36)
# 设置游戏参数
hero_position = [200, 500]
hero_speed = 5
bullet_speed = 10
enemy_speed = 5
enemy_frequency = 50
score = 0
# 生成敌机函数
def create_enemy(enemies):
enemy_position = [random.randint(0, screen_width - enemy_img.get_width()), 0]
enemy_rect = pygame.Rect(enemy_position[0], enemy_position[1], enemy_img.get_width(), enemy_img.get_height())
enemies.append({"rect": enemy_rect, "image": enemy_img})
# 移动敌机函数
def move_enemy(enemies):
for enemy in enemies:
enemy["rect"].move_ip(0, enemy_speed)
for enemy in enemies:
if enemy["rect"].top > screen_height:
enemies.remove(enemy)
# 生成子弹函数
def create_bullet(bullets):
bullet_position = [hero_position[0] + hero_img.get_width() / 2 - bullet_img.get_width() / 2, hero_position[1] - bullet_img.get_height()]
bullet_rect = pygame.Rect(bullet_position[0], bullet_position[1], bullet_img.get_width(), bullet_img.get_height())
bullets.append({"rect": bullet_rect, "image": bullet_img})
# 移动子弹函数
def move_bullet(bullets):
for bullet in bullets:
bullet["rect"].move_ip(0, -bullet_speed)
for bullet in bullets:
if bullet["rect"].bottom < 0:
bullets.remove(bullet)
# 判断子弹与敌机碰撞函数
def collision(bullets, enemies):
global score
for bullet in bullets:
for enemy in enemies:
if bullet["rect"].colliderect(enemy["rect"]):
bullet_sound.play()
bullets.remove(bullet)
enemies.remove(enemy)
score += 10
enemy_down_sound.play()
# 显示得分函数
def show_score(score):
score_text = score_font.render("Score: " + str(score), True, (255, 255, 255))
screen.blit(score_text, (10, 10))
# 初始化游戏
pygame.mixer.music.play(-1)
enemies = []
bullets = []
clock = pygame.time.Clock()
# 游戏循环
while True:
clock.tick(60)
# 生成敌机
if random.randint(0, enemy_frequency) == 0:
create_enemy(enemies)
# 处理事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
hero_position[0] -= hero_speed
elif event.key == pygame.K_RIGHT:
hero_position[0] += hero_speed
elif event.key == pygame.K_SPACE:
create_bullet(bullets)
# 移动敌机及子弹
move_enemy(enemies)
move_bullet(bullets)
# 判断碰撞
collision(bullets, enemies)
# 绘制画面
screen.blit(background_img, (0, 0))
screen.blit(hero_img, hero_position)
for enemy in enemies:
screen.blit(enemy["image"], enemy["rect"])
for bullet in bullets:
screen.blit(bullet["image"], bullet["rect"])
# 显示得分
show_score(score)
# 更新屏幕
pygame.display.update()