Python小游戏17——飞机大战

  • 运行结果

d8b57dd7ac5249a4ab245c6201c78af7.png

bf0a4a6a3756412aab4317f282fd38bc.png

首先,你需要安装Pygame库。如果你还没有安装它,可以使用以下命令来安装:

bash

pip install pygame

  • 代码:

python

import pygame

import random

# 初始化Pygame

pygame.init()

# 屏幕大小

SCREEN_WIDTH = 800

SCREEN_HEIGHT = 600

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

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

# 颜色定义

WHITE = (255, 255, 255)

BLACK = (0, 0, 0)

RED = (255, 0, 0)

# 飞机类

class Player(pygame.sprite.Sprite):

    def __init__(self):

        super().__init__()

        self.image = pygame.Surface((50, 40))

        self.image.fill(WHITE)

        self.rect = self.image.get_rect()

        self.rect.centerx = SCREEN_WIDTH // 2

        self.rect.bottom = SCREEN_HEIGHT - 10

        self.speed_x = 0

    def update(self):

        self.speed_x = 0

        keystate = pygame.key.get_pressed()

        if keystate[pygame.K_LEFT]:

            self.speed_x = -5

        if keystate[pygame.K_RIGHT]:

            self.speed_x = 5

        self.rect.x += self.speed_x

        if self.rect.right > SCREEN_WIDTH:

            self.rect.right = SCREEN_WIDTH

        if self.rect.left < 0:

            self.rect.left = 0

    def shoot(self):

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

        all_sprites.add(bullet)

        bullets.add(bullet)

# 子弹类

class Bullet(pygame.sprite.Sprite):

    def __init__(self, x, y):

        super().__init__()

        self.image = pygame.Surface((10, 20))

        self.image.fill(RED)

        self.rect = self.image.get_rect()

        self.rect.centerx = x

        self.rect.bottom = y

        self.speed_y = -10

    def update(self):

        self.rect.y += self.speed_y

        if self.rect.bottom < 0:

            self.kill()

# 敌人类

class Enemy(pygame.sprite.Sprite):

    def __init__(self):

        super().__init__()

        self.image = pygame.Surface((50, 40))

        self.image.fill(RED)

        self.rect = self.image.get_rect()

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

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

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

    def update(self):

        self.rect.y += self.speed_y

        if self.rect.top > SCREEN_HEIGHT + 10:

            self.kill()

# 创建精灵组

all_sprites = pygame.sprite.Group()

enemies = pygame.sprite.Group()

bullets = pygame.sprite.Group()

# 创建玩家实例并添加到精灵组

player = Player()

all_sprites.add(player)

# 创建敌人实例并添加到精灵组

for _ in range(8):

    enemy = Enemy()

    all_sprites.add(enemy)

    enemies.add(enemy)

# 游戏主循环

running = True

clock = pygame.time.Clock()

while running:

    # 事件处理

    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()

    # 更新游戏

    all_sprites.update()

    # 检查子弹是否击中敌人

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

    for hit in hits:

        enemy = Enemy()

        all_sprites.add(enemy)

        enemies.add(enemy)

    # 绘制游戏

    screen.fill(BLACK)

    all_sprites.draw(screen)

    # 刷新屏幕

    pygame.display.flip()

    # 控制帧率

    clock.tick(60)

pygame.quit()

  • 知识点总结——游戏实现的关键技术

Pygame模块的使用:Pygame是一个用于创建视频游戏的Python库,它提供了图像、声音、事件处理等功能。通过使用Pygame模块,可以很方便地实现《飞机大战》小游戏的图像显示、声音播放、事件监听等功能。

面向对象编程:在《飞机大战》小游戏的实现中,采用了面向对象编程的思想。通过将游戏元素(如英雄飞机、敌机、子弹等)封装成类,可以更方便地管理它们的状态和行为,并实现代码的复用和扩展。

碰撞检测:碰撞检测是游戏实现中的一个重要环节。在《飞机大战》小游戏中,需要检测英雄飞机与敌机、子弹与敌机之间的碰撞情况,并根据碰撞结果进行相应的处理(如扣除生命值、播放动画和音效等)。

事件监听与处理:游戏需要监听玩家的操作(如键盘按键)和系统的事件(如窗口关闭),并根据事件进行相应的处理。例如,当玩家按下方向键时,需要改变英雄飞机的位置;当窗口关闭时,需要退出游戏等。

猜你喜欢

转载自blog.csdn.net/cxh666888_/article/details/143356258