Python 60行代码实现飞机大战简化版,复制就能玩!

今天给大家安排一个超解压的Python小游戏,不用复杂操作,不用安装多余工具,60行代码就能实现飞机大战简化版,复制粘贴直接运行,新手也能轻松上手!

比起枯燥的语法知识点,这种能直接玩起来的小项目,既能练手Python,又能收获满满的成就感,闲下来玩几分钟,解压又有趣。

一、游戏效果展示

简化版飞机大战,玩法超简单:

  • 方向键 ↑↓←→ 控制飞机移动
  • 空格键发射子弹,击中敌机即可得分
  • 敌机随机出现,碰到敌机游戏结束

游戏运行界面如下图所示

运行得分显示界面

二、准备工作(1分钟搞定)

我们还是先双击运行PyCharm 2025.3.4软件

点击PyCharm界面中左侧侧边栏的终端按钮,显示出如下界面。

这个小游戏用 Python + pygame 实现,pygame 是Python专门用来做小游戏的库,安装超简单,打开终端,输入一行命令即可:

pip install pygame

如果安装失败,试试换国内源(新手也能搞定):

python
pip install pygame -i https://pypi.tuna.tsinghua.edu.cn/simple

终端输入pip install pygame命令之后按下回车(enter)按钮之后,会下载该库文件,界面如下图所示。

三、完整代码(复制就能跑)

直接复制下面的代码,粘贴到Python编辑器(PyCharm、VS Code都可以),点击运行就能玩,无需修改任何内容!

在PyCharm中新建一个项目工程和之前写的创建项目步骤一样。界面如下图所示

将下面代码复制粘贴到文件中。

import pygame
import random

# 初始化pygame
pygame.init()

# 游戏窗口设置
WIDTH, HEIGHT = 400, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Python飞机大战简化版")

# 颜色定义(简化版,不用记复杂色值)
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
BLUE = (0, 0, 255)

# 飞机类(玩家控制)
class Player(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        # 简化飞机为蓝色矩形(无需加载图片,新手友好)
        self.image = pygame.Surface((50, 40))
        self.image.fill(BLUE)
        self.rect = self.image.get_rect()
        self.rect.centerx = WIDTH // 2  # 飞机初始位置(水平居中)
        self.rect.bottom = HEIGHT - 10  # 飞机初始位置(底部)
        self.speed_x = 5  # 水平移动速度
        self.speed_y = 5  # 垂直移动速度

    # 移动控制
    def update(self):
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT] and self.rect.left > 0:
            self.rect.x -= self.speed_x
        if keys[pygame.K_RIGHT] and self.rect.right < WIDTH:
            self.rect.x += self.speed_x
        if keys[pygame.K_UP] and self.rect.top > 0:
            self.rect.y -= self.speed_y
        if keys[pygame.K_DOWN] and self.rect.bottom < HEIGHT:
            self.rect.y += self.speed_y

# 子弹类
class Bullet(pygame.sprite.Sprite):
    def __init__(self, x, y):
        super().__init__()
        self.image = pygame.Surface((5, 15))
        self.image.fill(WHITE)
        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((40, 30))
        self.image.fill(RED)
        self.rect = self.image.get_rect()
        # 敌机随机出现位置(水平方向)
        self.rect.x = random.randint(0, WIDTH - self.rect.width)
        self.rect.y = random.randint(-100, -40)  # 从屏幕上方飞出
        self.speed_y = random.randint(3, 6)  # 敌机速度随机

    def update(self):
        self.rect.y += self.speed_y
        # 敌机飞出屏幕后删除
        if self.rect.top > HEIGHT:
            self.kill()

# 分数和时钟设置
score = 0
font = pygame.font.SysFont(None, 40)
clock = pygame.time.Clock()

# 创建精灵组(简化管理飞机、子弹、敌机)
all_sprites = pygame.sprite.Group()
enemies = pygame.sprite.Group()
bullets = pygame.sprite.Group()

# 创建玩家飞机
player = Player()
all_sprites.add(player)

# 生成敌机(每隔1秒生成1个)
def spawn_enemy():
    enemy = Enemy()
    all_sprites.add(enemy)
    enemies.add(enemy)

pygame.time.set_timer(pygame.USEREVENT, 1000)

# 游戏主循环
running = True
while running:
    # 控制游戏帧率(每秒60帧,流畅不卡顿)
    clock.tick(60)

    # 事件处理(关闭窗口、发射子弹、生成敌机)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        # 空格键发射子弹
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                bullet = Bullet(player.rect.centerx, player.rect.top)
                all_sprites.add(bullet)
                bullets.add(bullet)
        # 每隔1秒生成敌机
        if event.type == pygame.USEREVENT:
            spawn_enemy()

    # 更新所有精灵(飞机、子弹、敌机移动)
    all_sprites.update()

    # 碰撞检测(子弹击中敌机)
    hits = pygame.sprite.groupcollide(enemies, bullets, True, True)
    for hit in hits:
        score += 10  # 每击中1个敌机得10分
        spawn_enemy()  # 击中后再生成1个敌机

    # 碰撞检测(飞机碰到敌机,游戏结束)
    if pygame.sprite.spritecollideany(player, enemies):
        running = False

    # 绘制游戏界面
    screen.fill(BLACK)  # 背景色(黑色,模拟太空)
    all_sprites.draw(screen)  # 绘制所有精灵
    # 绘制分数
    score_text = font.render(f"Score: {score}", True, WHITE)
    screen.blit(score_text, (10, 10))

    # 更新屏幕显示
    pygame.display.flip()

# 游戏结束,退出pygame
pygame.quit()
print(f"游戏结束!你的得分:{score}")

点击运行按钮,界面如下图所示。

游戏运行界面如下图所示,按上下左右移动,空格按钮进行射击。

四、代码简单解析

不用死记代码,简单了解核心逻辑,后续可以自己修改玩法:

  1. 初始化设置:定义游戏窗口大小、颜色、帧率,搭建游戏基础框架;
  1. 精灵类:分别定义玩家飞机、子弹、敌机,包含它们的外观(简化为矩形,无需找图片)和移动逻辑;
  1. 事件处理:监听方向键、空格键、窗口关闭事件,实现飞机移动、子弹发射、敌机生成;
  1. 碰撞检测:判断子弹是否击中敌机、飞机是否碰到敌机,触发得分和游戏结束逻辑;
  1. 界面绘制:绘制背景、所有角色和分数,保证游戏画面正常显示。

五、扩展玩法

学会基础版本后,新手可以试试这些小修改,练手Python更有成就感:

  • 修改颜色:把飞机改成自己喜欢的颜色(比如绿色、黄色),敌机改成橙色;
  • 调整速度:修改飞机、子弹、敌机的速度,增加游戏难度;
  • 添加图片:找飞机、敌机、子弹的图片,替换掉代码中的矩形(注释里有提示);
  • 增加音效:添加发射子弹、击中敌机、游戏结束的音效(网上可找免费音效素材)。

六、小结

这个简化版飞机大战,代码不长、逻辑简单,既适合Python新手练手,又能直接玩起来解压。

大家可以先复制代码运行,感受一下效果,再试着修改扩展,慢慢掌握pygame的基础用法。后续我还会分享更多Python小游戏,难度由浅入深,新手也能轻松跟上~

如果运行过程中遇到问题,评论区留言,我会一一回复解答!

收藏起来,闲下来练手、解压都合适,也别忘了转发给身边喜欢Python的朋友呀

评论区可以发一下自己的得分截图,看看谁的比较高。

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐