Pygame游戏实战六:飞机大战

介绍模块

本游戏使用的是由Pycharm中的pygame模块来实现的,也可以在python中运行。通过Pygame制作一个飞机大战,通过控制自己的飞机来攻击敌机,敌机的速度也忽快忽慢,看看这个是你小时候玩的游戏吗?

最小开发框架

详情请看此文章:
Pygame游戏模块介绍二:最小开发框架代码_pygame最小开发框架_牧子川的博客-CSDN博客

Pygame和sys模块

import pygame # 制作游戏时要使用的模块
import sys # python的标准库,对内部各功能模块进行初始化创建,系统模块

random模块

需要在屏幕上随机生成食物的位置,通过随机一个位置来表示食物的位置

from random import randint

详情请看此文章:Pygame游戏模块介绍一:random模块简介_random 范围_牧子川的博客-CSDN博客

相关功能 

【童年游戏】飞机大战

飞机类

初始化飞机图片,以及定义子弹射出函数和位置更新函数

class Plane(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = pygame.image.load('player.png')
        self.image = pygame.transform.scale(self.image, (50, 50))  # 调整尺寸为50x50
        self.rect = self.image.get_rect()
        self.rect.x = width // 2
        self.rect.y = height - 100
        self.speed = 5

    def update(self):
        # 获取键盘按键状态
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT]:
            self.rect.x -= self.speed
        if keys[pygame.K_RIGHT]:
            self.rect.x += self.speed

        # 限制飞机在窗口范围内移动
        if self.rect.x < 0:
            self.rect.x = 0
        if self.rect.x > width - 50:
            self.rect.x = width - 50

    def shoot(self):
        bullet = Bullet(self.rect.x + 23, self.rect.y)
        all_sprites.add(bullet)
        bullets.add(bullet)

子弹类

初始化子弹图片,并定义子弹射出的速度函数

class Bullet(pygame.sprite.Sprite):
    def __init__(self, x, y):
        super().__init__()
        # 子弹的形状
        self.image = pygame.image.load('bullet.png')
        self.image = pygame.transform.scale(self.image, (10, 20))  # 调整尺寸为10x20
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y
        self.speed = 10

    def update(self):
        self.rect.y -= self.speed
        if self.rect.y < -10:
            self.kill()

敌机类

初始化敌机图片,并定义敌机运动速度函数

class Enemy(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        # 加载敌机的图片
        self.image = pygame.image.load('enemy.png')
        self.image = pygame.transform.scale(self.image, (30, 30))  # 调整尺寸为30x30
        self.rect = self.image.get_rect()
        self.rect.x = random.randint(0, width - 30)
        self.rect.y = 0
        self.speed = random.randint(1, 5)

    def update(self):
        self.rect.y += self.speed
        if self.rect.y > height:
            self.rect.x = random.randint(0, width - 30)
            self.rect.y = 0
            self.speed = random.randint(1, 5)

射中敌机检测

    # 检测碰撞
    if pygame.sprite.spritecollide(player, enemies, True):
        running = False
    for bullet in bullets:
        pygame.sprite.spritecollide(bullet, enemies, True)

图片界面

扩展可添加功能

1.让图片与界面更加融合

2.增加敌机攻击子弹事件

3.增加关卡

4.增加音效

5.增加背景

源码获取

PyGame/飞机大战 at main · mzc421/PyGame (github.com)

 欢迎关注我的公众号:@AI算法与电子竞赛    

​​

硬性的标准其实限制不了无限可能的我们,所以啊!少年们加油吧!

猜你喜欢

转载自blog.csdn.net/qq_48764574/article/details/134617780