首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >如何开发一个打飞机游戏

如何开发一个打飞机游戏

作者头像
Crossin先生
发布2026-03-11 18:05:19
发布2026-03-11 18:05:19
400
举报

1. 从官网 python.org 下载 Python 并安装。

如果安装遇到问题,可来交流群讨论。

2. 用 pip 安装 pygame 模块

代码语言:javascript
复制
pip install pygame

3. 编写代码,在窗口里显示一张飞机图片

代码语言:javascript
复制
import pygame

pygame.init()
screen = pygame.display.set_mode((450,800), 0, 32)
plane = pygame.image.load('plane.png')
screen.blit(plane, (200, 400))

while True:
foreventin pygame.event.get():
ifevent.type == pygame.QUIT:
            pygame.quit()
            exit()
    pygame.display.update()

4. 让飞机随着鼠标位置进行移动

代码语言:javascript
复制
import pygame

pygame.init()
WHITE = (255, 255, 255)
screen = pygame.display.set_mode((450,800), 0, 32)
plane = pygame.image.load('plane.png')


while True:
foreventin pygame.event.get():
ifevent.type == pygame.QUIT:
            pygame.quit()
            exit()

    x, y = pygame.mouse.get_pos()
    x -= plane.get_width()/2
    y -= plane.get_height()/2
    screen.fill(WHITE)
    screen.blit(plane, (x, y))

    pygame.display.update()

5. 创建更多的敌机,从屏幕顶部向下移动

代码语言:javascript
复制
import pygame
import random

pygame.init()
WHITE = (255, 255, 255)
screen = pygame.display.set_mode((450,800), 0, 32)
plane = pygame.image.load('plane.png')

classEnemy:
defrestart(self):
self.x = random.randint(50, 400)
self.y = random.randint(-200, -50)
self.speed = random.random() * 2 + 0.5

def__init__(self):
self.restart()
self.image = pygame.image.load('enemy.png').convert_alpha()

defmove(self):
ifself.y < 800:
self.y += self.speed
else:
self.restart()

classPlane:
defrestart(self):
self.x = 200
self.y = 600

def__init__(self):
self.restart()
self.image = pygame.image.load('plane.png').convert_alpha()

defmove(self):
        x, y = pygame.mouse.get_pos()
        x-= self.image.get_width() / 2
        y-= self.image.get_height() / 2
self.x = x
self.y = y

plane = Plane()
enemies = []
for i in range(5):
    enemies.append(Enemy())

whileTrue:
for event in pygame.event.get():
if event.type == pygame.QUIT:
            pygame.quit()
            exit()

# 绘制背景
    screen.fill(WHITE)
# 绘制敌机
for e inenemies:
        e.move()
        screen.blit(e.image, (e.x,e.y))
# 绘制玩家
        plane.move()
        screen.blit(plane.image, (plane.x, plane.y))

    pygame.display.update()

6. 增加碰撞检测。如果撞上敌机,则游戏结束

代码语言:javascript
复制
# ……
# 前略

gameover = False
font = pygame.font.Font(None, 32)

while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()

# 绘制背景
screen.fill(WHITE)

if not gameover:
# 绘制敌机
for e in enemies:
if checkCrash(e, plane):
gameover = True
e.move()
screen.blit(e.image, (e.x,e.y))
# 绘制玩家
plane.move()
screen.blit(plane.image, (plane.x, plane.y))
else:
text = font.render("Game Over!", 1, (0, 0, 0))
screen.blit(text, (165, 400))

pygame.display.update()

7. 发射子弹,消灭敌机

代码语言:javascript
复制
# ……

class Bullet:
def __init__(self):
self.x = 0
self.y = -1
self.image = pygame.image.load('bullet.png').convert_alpha()
self.active = False

def move(self):
if self.active:
self.y -= 5
if self.y < 0:
self.active = False

def restart(self):
mouseX, mouseY = pygame.mouse.get_pos()
self.x = mouseX - self.image.get_width() / 2
self.y = mouseY - self.image.get_height() / 2
self.active = True

# ……

def checkHit(enemy, bullet):
if (bullet.x > enemy.x and bullet.x < enemy.x + enemy.image.get_width()) and (
bullet.y > enemy.y and bullet.y < enemy.y + enemy.image.get_height()
    ):
enemy.restart()
bullet.active = False
#增加返回值
return True
return False

# ……

bullets = []
for i in range(10):
bullets.append(Bullet())
count_b = len(bullets)
index_b = 0
interval_b = 0

# ……

while True:
    # ……
if not gameover:
# 发射子弹
interval_b -= 1
if interval_b < 0:
bullets[index_b].restart()
interval_b = 30
index_b = (index_b + 1) % count_b
for b in bullets:
if b.active:
for e in enemies:
checkHit(e, b)
b.move()
screen.blit(b.image, (b.x, b.y))  
    # ……  

8. 记录游戏分数

代码语言:javascript
复制
# ……
#分数
score = 0

while True:
    # ……
if not gameover:
# ……
# 绘制敌机
for e in enemies:
if checkCrash(e, plane):
gameover = True
e.move()
screen.blit(e.image, (e.x,e.y))
# 绘制玩家
plane.move()
screen.blit(plane.image, (plane.x, plane.y))
#在屏幕左上角显示分数
text = font.render("Socre: %d" % score, 1, (0, 0, 0))
screen.blit(text, (0, 0))
else:
text = font.render("Game Over!", 1, (0, 0, 0))
screen.blit(text, (165, 380))
#在屏幕中央显示分数
text = font.render("Socre: %d" % score, 1, (0, 0, 0))
screen.blit(text, (165, 420))

pygame.display.update()

9. 再增加一点点细节,美化贴图、添加音效等

这样就开发出了一个打飞机游戏,你学会了吗?


近期文章

如何跟着AI学Python编程

Python字符串易踩的10个“坑”

AI 时代,我还需要学编程吗?

Python打包+加速神器:nuitka

这款Github“官方”字体,好看又懂程序员


感谢转发点赞的各位~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-01-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Crossin的编程教室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档