简单的游戏实现流程应该是:
1. 计算游戏中元素的坐标。也就是游戏每刷新一次,游戏中的元素,例如子弹坐标就会+1, 比如飞机的坐标计算等等;
2. 计算出了游戏中的元素,飞机或者子弹的坐标,那么就需要将飞机和子弹的图片绘制到这个坐标的位置;
3. 处理事件,游戏进行过程中,玩家会通过键盘或者鼠标点击、拖动、甚至关闭窗口等都属于事件,当玩家有这些操作的时候,我们要对玩家的操作做出响应。比如,如果玩家点击了窗口右上角的X按钮,我们就要停止游戏并且关闭窗口结束程序,如果玩家按下w键,我们就让飞机向上移动等等。
4. 碰撞检测。这个游戏核心逻辑,我们发出子弹,就要判断子弹是否和敌人飞机碰到一起,如果碰到一起我们就要消失子弹,并且消失飞机,在碰撞坐标处播放动画。如果敌人子弹击中我们,也是类似思路。碰撞检测我们主要通过判断两张图片的矩形是否相交。
5. 刷新窗口。这个最为简单,直接调用pygame.display.update()即可。
下面我们搭建流程代码如下,这里我们创建GameScene类,用于显示窗口,并负责游戏的核心逻辑及场景中各个游戏元素的管理:
import pygame
# 主场景
class MainScene(object):
# 初始化主场景
def __init__(self):
# 场景尺寸
self.mSize = (512, 768)
# 场景对象
self.mScene = pygame.display.set_mode([self.mSize[0], self.mSize[1]])
# 设置标题
pygame.display.set_caption("飞机大战-v1.0")
# 绘制
def draw_elements(self):
pass
# 动作
def action_elements(self):
pass
# 处理事件
def handle_event(self):
pass
# 碰撞检测
def detect_conlision(self):
pass
# 主循环,主要处理各种事件
def run_scene(self):
while True:
# 计算元素坐标
self.action_elements()
# 绘制元素图片
self.draw_elements()
# 处理事件
self.handle_event()
# 碰撞检测
self.detect_conlision()
# 刷新显示
pygame.display.update()
# 入口函数
if __name__ == "__main__":
# 创建主场景
mainScene = MainScene()
# 开始游戏
mainScene.run_scene()
框架流程中的涉及到的功能函数,例如绘制、计算坐标等并没有填写内容,我们在以后具体添加功能中,再去实现。此时直接运行效果如下: