在这里我为您提供一个基于 Python 和 Pygame 库写的飞机大战游戏完整代码,具体实现内容如下:

背景音乐和音效玩家飞机、敌人飞机和子弹的设计和实现敌人飞机的生成和移动碰撞检测和分数统计游戏结束和重新开始的处理

建议使用 Python 3 及以上版本以及 Pygame 库的最新版本进行编译。

import pygame

import random

# 初始化 Pygame 库并创建屏幕对象

pygame.init()

SCREEN_WIDTH, SCREEN_HEIGHT = 480, 800

screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))

pygame.display.set_caption("飞机大战")

# 加载背景音乐和音效

pygame.mixer.music.load("assets/background.mp3")

pygame.mixer.music.set_volume(0.5)

bullet_sound = pygame.mixer.Sound("assets/bullet.wav")

bullet_sound.set_volume(0.3)

explosion_sound = pygame.mixer.Sound("assets/explosion.wav")

explosion_sound.set_volume(0.3)

# 定义颜色

WHITE = (255, 255, 255)

BLACK = (0, 0, 0)

# 加载图片资源

background_img = pygame.image.load("assets/background.jpg").convert()

player_img = pygame.image.load("assets/player.png").convert_alpha()

player_img_rect = player_img.get_rect()

enemy_img = pygame.image.load("assets/enemy.png").convert_alpha()

bullet_img = pygame.image.load("assets/bullet.png").convert_alpha()

# 定义玩家飞机类

class Player(pygame.sprite.Sprite):

def __init__(self):

pygame.sprite.Sprite.__init__(self)

self.image = player_img

self.rect = self.image.get_rect()

self.rect.centerx = SCREEN_WIDTH / 2

self.rect.bottom = SCREEN_HEIGHT - 10

self.speed_x = 0

self.speed_y = 0

def update(self):

self.rect.x += self.speed_x

self.rect.y += self.speed_y

if self.rect.right > SCREEN_WIDTH:

self.rect.right = SCREEN_WIDTH

elif self.rect.left < 0:

self.rect.left = 0

elif self.rect.bottom > SCREEN_HEIGHT:

self.rect.bottom = SCREEN_HEIGHT

elif self.rect.top < 0:

self.rect.top = 0

def shoot(self):

bullet = Bullet(self.rect.centerx, self.rect.top)

all_sprites.add(bullet)

bullets.add(bullet)

bullet_sound.play()

# 定义敌人飞机类

class Enemy(pygame.sprite.Sprite):

def __init__(self):

pygame.sprite.Sprite.__init__(self)

self.image = enemy_img

self.rect = self.image.get_rect()

self.rect.x = random.randrange(0, SCREEN_WIDTH - self.rect.width)

self.rect.y = random.randrange(-100, -40)

self.speed_y = random.randrange(1, 8)

self.speed_x = random.randrange(-3, 3)

def update(self):

self.rect.y += self.speed_y

self.rect.x += self.speed_x

if self.rect.top > SCREEN_HEIGHT or self.rect.right < 0 or self.rect.left > SCREEN_WIDTH:

self.kill()

# 定义子弹类

class Bullet(pygame.sprite.Sprite):

def __init__(self, x, y):

pygame.sprite.Sprite.__init__(self)

self.image = bullet_img

self.rect = self.image.get_rect()

self.rect.bottom = y

self.rect.centerx = x

self.speed_y = -10

def update(self):

self.rect.y += self.speed_y

if self.rect.bottom < 0:

self.kill()

# 定义精灵组

all_sprites = pygame.sprite.Group()

enemies = pygame.sprite.Group()

bullets = pygame.sprite.Group()

# 添加玩家飞机到精灵组

player = Player()

all_sprites.add(player)

# 循环更新游戏状态

running = True

clock = pygame.time.Clock()

score = 0

pygame.mixer.music.play(-1)

while running:

clock.tick(60)

# 处理事件

for event in pygame.event.get():

if event.type == pygame.QUIT:

running = False

elif event.type == pygame.KEYDOWN:

if event.key == pygame.K_SPACE:

player.shoot()

# 判断是否击中敌人飞机

hits = pygame.sprite.groupcollide(enemies, bullets, True, True, pygame.sprite.collide_circle)

for hit in hits:

score += 10

explosion_sound.play()

enemy = Enemy()

all_sprites.add(enemy)

enemies.add(enemy)

# 判断是否与敌人飞机碰撞

hits = pygame.sprite.spritecollide(player, enemies, True, pygame.sprite.collide_circle)

if hits:

running = False

# 更新精灵组

all_sprites.update()

# 随机生成敌人飞机

if random.randrange(100) < 1 + int(score / 1000):

enemy = Enemy()

all_sprites.add(enemy)

enemies.add(enemy)

# 绘制背景和精灵组

screen.blit(background_img, (0, 0))

all_sprites.draw(screen)

# 绘制得分

font = pygame.font.Font(None, 36)

text = font.render("Score: " + str(score), True, WHITE)

screen.blit(text, (10, 10))

# 更新屏幕

pygame.display.update()

# 游戏结束处理

pygame.mixer.music.stop()

explosion_sound.play()

font = pygame.font.Font(None, 48)

text = font.render("Game Over", True, WHITE)

screen.blit(text, (SCREEN_WIDTH / 2 - text.get_rect().width / 2, SCREEN_HEIGHT / 2 - text.get_rect().height / 2))

pygame.display.update()

pygame.time.wait(3000)

# 退出 Pygame 库

pygame.quit()

可以在阅读后将代码复制到本地进行编译运行。

推荐文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: