飞机大战Python代码
时间: 2023-11-05 11:54:51 浏览: 32
下面是一个简单的飞机大战Python代码示例,使用Pygame库实现:
```python
import pygame
import random
# 初始化 Pygame 库
pygame.init()
# 设置游戏窗口尺寸
WINDOW_WIDTH = 480
WINDOW_HEIGHT = 800
WINDOW_SIZE = (WINDOW_WIDTH, WINDOW_HEIGHT)
# 设置游戏窗口标题
pygame.display.set_caption('飞机大战')
# 加载背景图片
bg_image = pygame.image.load('images/bg.jpg')
# 加载玩家飞机图片
player_image = pygame.image.load('images/player.png')
# 加载敌机图片
enemy_image = pygame.image.load('images/enemy.png')
# 设置玩家飞机的尺寸和位置
player_rect = player_image.get_rect()
player_rect.centerx = WINDOW_WIDTH // 2
player_rect.bottom = WINDOW_HEIGHT - 10
# 初始化游戏时钟
clock = pygame.time.Clock()
# 设置敌机列表
enemies = []
ENEMY_SPEED = 5
# 设置玩家飞机速度
PLAYER_SPEED = 10
# 设置玩家飞机子弹列表
player_bullets = []
PLAYER_BULLET_SPEED = 20
# 设置敌机子弹列表
enemy_bullets = []
ENEMY_BULLET_SPEED = 10
# 设置玩家飞机生命值
player_health = 3
# 设置敌机被击中后的分数
SCORE_PER_ENEMY = 10
score = 0
# 创建游戏窗口
window = pygame.display.set_mode(WINDOW_SIZE)
# 游戏主循环
while True:
# 处理游戏事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
# 处理玩家移动事件
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and player_rect.left > 0:
player_rect.move_ip(-PLAYER_SPEED, 0)
if keys[pygame.K_RIGHT] and player_rect.right < WINDOW_WIDTH:
player_rect.move_ip(PLAYER_SPEED, 0)
if keys[pygame.K_UP] and player_rect.top > 0:
player_rect.move_ip(0, -PLAYER_SPEED)
if keys[pygame.K_DOWN] and player_rect.bottom < WINDOW_HEIGHT:
player_rect.move_ip(0, PLAYER_SPEED)
# 处理玩家发射子弹事件
if keys[pygame.K_SPACE]:
player_bullet_rect = pygame.Rect(
player_rect.centerx, player_rect.top, 5, 10)
player_bullets.append(player_bullet_rect)
# 处理敌机移动事件
for enemy_rect in enemies:
enemy_rect.move_ip(0, ENEMY_SPEED)
# 处理敌机发射子弹事件
for enemy_rect in enemies:
if random.randint(1, 60) == 1:
enemy_bullet_rect = pygame.Rect(
enemy_rect.centerx, enemy_rect.bottom, 5, 10)
enemy_bullets.append(enemy_bullet_rect)
# 处理子弹移动事件
for bullet_rect in player_bullets:
bullet_rect.move_ip(0, -PLAYER_BULLET_SPEED)
for bullet_rect in enemy_bullets:
bullet_rect.move_ip(0, ENEMY_BULLET_SPEED)
# 处理子弹和敌机的碰撞事件
for bullet_rect in player_bullets:
for enemy_rect in enemies:
if bullet_rect.colliderect(enemy_rect):
enemies.remove(enemy_rect)
player_bullets.remove(bullet_rect)
score += SCORE_PER_ENEMY
for bullet_rect in enemy_bullets:
if bullet_rect.colliderect(player_rect):
player_health -= 1
enemy_bullets.remove(bullet_rect)
# 处理敌机和玩家飞机的碰撞事件
for enemy_rect in enemies:
if enemy_rect.colliderect(player_rect):
enemies.remove(enemy_rect)
player_health -= 1
# 处理游戏结束事件
if player_health <= 0:
pygame.quit()
exit()
# 生成新的敌机
if random.randint(1, 60) == 1:
enemy_rect = enemy_image.get_rect()
enemy_rect.left = random.randint(0, WINDOW_WIDTH - enemy_rect.width)
enemy_rect.top = -enemy_rect.height
enemies.append(enemy_rect)
# 绘制游戏界面
window.blit(bg_image, (0, 0))
window.blit(player_image, player_rect)
for enemy_rect in enemies:
window.blit(enemy_image, enemy_rect)
for bullet_rect in player_bullets:
pygame.draw.rect(window, (255, 0, 0), bullet_rect)
for bullet_rect in enemy_bullets:
pygame.draw.rect(window, (0, 0, 255), bullet_rect)
pygame.display.update()
# 控制游戏帧率
clock.tick(60)
```
上述代码仅作为示例,可以根据实际需求进行修改和优化。