如何开发一个打飞机游戏
1. 从官网 python.org 下载 Python 并安装。
如果安装遇到问题,可来交流群讨论。
2. 用 pip 安装 pygame 模块
pip install pygame3. 编写代码,在窗口里显示一张飞机图片
import pygamepygame.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()
4. 让飞机随着鼠标位置进行移动
import pygamepygame.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()/2y -= plane.get_height()/2screen.fill(WHITE)screen.blit(plane, (x, y))pygame.display.update()
5. 创建更多的敌机,从屏幕顶部向下移动
import pygameimport randompygame.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.5def __init__(self):self.restart()self.image = pygame.image.load('enemy.png').convert_alpha()def move(self):if self.y < 800:self.y += self.speedelse:self.restart()class Plane:def restart(self):self.x = 200self.y = 600def __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() / 2y-= self.image.get_height() / 2self.x = xself.y = yplane = 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()
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 = Truee.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. 发射子弹,消灭敌机
# ……class Bullet:def __init__(self):self.x = 0self.y = -1self.image = pygame.image.load('bullet.png').convert_alpha()self.active = Falsedef move(self):if self.active:self.y -= 5if self.y < 0:self.active = Falsedef restart(self):mouseX, mouseY = pygame.mouse.get_pos()self.x = mouseX - self.image.get_width() / 2self.y = mouseY - self.image.get_height() / 2self.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 Truereturn 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 -= 1if interval_b < 0:bullets[index_b].restart()interval_b = 30index_b = (index_b + 1) % count_bfor b in bullets:if b.active:for e in enemies:checkHit(e, b)b.move()screen.blit(b.image, (b.x, b.y))# ……
8. 记录游戏分数
# ……#分数score = 0while True:# ……if not gameover:# ……# 绘制敌机for e in enemies:if checkCrash(e, plane):gameover = Truee.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. 再增加一点点细节,美化贴图、添加音效等
这样就开发出了一个打飞机游戏,你学会了吗?