转载:python中的pygame编写飞机大战(一)游戏框架搭建

作者:还在琢磨 
来源:CSDN 
原文:https://blog.csdn.net/mbl114/article/details/78074742 
版权声明:本文为博主原创文章,转载请附上博文链接

家里孩子在学python,用了其中的pygame来教学。也想和他一起学,搜了很多文章,感觉作者“还在琢磨”写得条理清晰,由浅入深,又加上了OOP的思想,便于后期维护及修改。就把他的代码再学习一边,扩展了一些功能。最终效果如下:

简单的游戏实现流程应该是:

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()

框架流程中的涉及到的功能函数,例如绘制、计算坐标等并没有填写内容,我们在以后具体添加功能中,再去实现。游戏中需要用到的各种功能基本完备了,以后的代码就是往这个框架里填写东西。我很喜欢这种风格,从框架到细部。一点一点学,一点一点填写、测试。

猜你喜欢

转载自blog.csdn.net/hailler1119/article/details/88089234