Crossin的编程教室

如何开发一个打飞机游戏

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

Image

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

2. 用 pip 安装 pygame 模块

pip install pygame

Image

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

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: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit() pygame.display.update()

Image

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

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: for event in pygame.event.get(): if event.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. 创建更多的敌机,从屏幕顶部向下移动

import pygameimport random
pygame.init()WHITE = (255, 255, 255)screen = pygame.display.set_mode((450,800), 0, 32)plane = pygame.image.load('plane.png')
class Enemy: def restart(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()
def move(self): if self.y < 800: self.y += self.speed else: self.restart()
class Plane: def restart(self): self.x = 200 self.y = 600 def __init__(self): self.restart() self.image = pygame.image.load('plane.png').convert_alpha()
def move(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())
while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit() # 绘制背景 screen.fill(WHITE) # 绘制敌机 for e in enemies:        e.move() screen.blit(e.image, (e.x,e.y)) # 绘制玩家 plane.move() screen.blit(plane.image, (plane.x, plane.y))
pygame.display.update()

Image

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

# ……# 前略
gameover = Falsefont = 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()

Image

7. 发射子弹,消灭敌机

# ……
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 = 0interval_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))      # ……  

Image

8. 记录游戏分数

# ……#分数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()

Image

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

Image

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


Crossin的新书《码上行动:用ChatGPT学会Python编程》已经上市了。本书以ChatGPT为辅助,系统全面地讲解了如何掌握Python编程,适合Python零基础入门的读者学习。【点此查看详细介绍】
购买后可加入读者交流群,Crossin为你开启陪读模式,解答你在阅读本书时的一切疑问。
Crossin的其他书籍:


添加微信 crossin123 ,加入编程教室共同学习~

Image

感谢转发和点赞的各位~