武侠小说中,高手过招讲究起手式,所谓"行家一伸手,便知有没有"。程序开发、软件架构中,也是类似的道理,当业务逻辑越来越复杂,代码越来越多时,一个好的项目结构,从目录命名、模块分层这些,从一开始就决定了后面的代码是否易于维护。

所以这节主要讨论下,游戏中如何组织自己的代码,回忆上节学到的最小开发框架(即:模板),一个游戏大致可以分为以下几个标准处理过程:

__init__() 初始化

new() 游戏初次进入(或主角挂了,重新开始时)

update() 游戏逻辑更新

events() 事件处理(响应键盘、鼠标等事件)

draw() 屏幕渲染绘制

show_start_screen() 游戏的启动画面(通常也用来展示广告)

show_go_screen() 游戏结束时的画面

run() 游戏运行的循环入口

按上面的讨论,把上节的模板改造一下,变成下面这样:

import pygame as pg
from part_01.settings import *class Game:def __init__(self):pg.init()pg.mixer.init()self.screen = pg.display.set_mode(SIZE)pg.display.set_caption(TITLE)self.clock = pg.time.Clock()self.running = Trueself.playing = Falseself.all_sprites = []# 开始新游戏时的处理(eg: 主角挂了,重新开始;或第1次进入)def new(self):self.all_sprites = pg.sprite.Group()self.run()# 游戏运行的循环入口def run(self):# 注:有2个控制变量,running是控制pygame是否退出,而playing是游戏情节是否继续处理# (即:有可能游戏情况结束,比如:主角挂了,显示game over,但是pygame并不需要退出)self.playing = Truewhile self.playing:self.clock.tick(FPS)self.events()self.update()self.draw()# 游戏逻辑更新处理def update(self):pass# 事件处理def events(self):for event in pg.event.get():if event.type == pg.QUIT:if self.playing:self.playing = Falseself.running = False# 屏幕渲染def draw(self):self.screen.fill(BLACK)self.all_sprites.draw(self.screen)pg.display.update()# 游戏开始的splash图片def show_start_screen(self):pass# game over时的显示def show_go_screen(self):passg = Game()
# 显示开始场景
g.show_start_screen()
while g.running:# 开始g.new()# 主角挂了之后的显示g.show_go_screen()pg.quit()

注1:引入了一个列表(或叫容器)all_sprites,用于存放所有sprite

注2:  一些常量,仍然放在settings.py中

# game optionsSIZE = WIDTH, HEIGHT = 360, 480
FPS = 30TITLE = "My Game"# define color
BLACK = 0, 0, 0
WHITE = 255, 255, 255
RED = 255, 0, 0
GREEN = 0, 255, 0
BLUE = 0, 0, 255

注3:有二个控制循环的bool型变量,running与playing,二者的区别在于running用于控制pygame是否退出,而playing用于控制游戏情节是否继续。 

注4:为了简化代码,import pygame时,指定了一个别名pg,这样代码看上去简洁点。

转载于:https://www.cnblogs.com/yjmyzz/p/pygame-kidscancode-part1-code-structure.html

pygame-KidsCanCode系列jumpy-part1-如何组织复杂游戏的代码相关推荐

  1. html5 Game开发系列文章之 三 搭建基本游戏框架(代码封装)

    在之前的二节中,我做出一个基本的游戏精灵--一条红色的飞行的小飞龙,但是在进行下一步开发前,我觉得有必要对现有的代码进行封装!在这一节中,我将封装一些基本的方法,并演示如何在JS中实现继承! 首先了解 ...

  2. 信创办公–基于WPS的PPT最佳实践系列 (将幻灯片组织成节的形式)

    信创办公–基于WPS的PPT最佳实践系列 (将幻灯片组织成节的形式) 目录 应用背景 操作步骤 1.创建节 2.节的功能 应用背景 当在处理一份内容较多的演示文稿时,为了更好的整理和查阅,我们可以将幻 ...

  3. Unity跨平台UI解决方案:可能是最全的FairyGUI系列教程.Part1

    目录 FairyGUI简介导读 FairyGUI效果演示 FairyGUI和UGUI类比 从基础角度 从技术角度 从整体角度 FairyGUI编辑器使用 FairyGUI的项目文件结构 编译器主界面 ...

  4. Python开发系列课程(12) - 图形用户界面和游戏开发

    图形用户界面和游戏开发 基于tkinter模块的GUI GUI是图形用户界面的缩写,图形化的用户界面对使用过计算机的人来说应该都不陌生,在此也无需进行赘述.Python默认的GUI开发模块是tkint ...

  5. 大恶人吉日嘎拉之走火入魔闭门造车之.NET疯狂架构经验分享系列之(一)后台控制逻辑代码部分...

    我也是本着善意把自己的代码结构分享给大家,欢迎大家用批评指点.首先我为什么把这个标题写为恶人,因为我很喜欢招惹别人,因为喜欢跟别人交流,喜欢指出别人的缺点,偷偷学习别人的优点,所以大家都会反感我,因为 ...

  6. python游戏脚本实例-Python使用pygame模块编写俄罗斯方块游戏的代码实例

    文章先介绍了关于俄罗斯方块游戏的几个术语. 边框――由10*20个空格组成,方块就落在这里面. 盒子――组成方块的其中小方块,是组成方块的基本单元. 方块――从边框顶掉下的东西,游戏者可以翻转和改变位 ...

  7. n 如何编写html,webpack4系列教程,如何编写plugin处理html代码逻辑?

    本博客不欢迎:各种镜像采集行为,请尊重知识产权法律法规.大家都是程序员,不要闹得不开心. 在上一篇文章中,利用不同位置的publicPath,对html中的cdn地址,进行了处理.但是,遗留了一个小问 ...

  8. Py之pygame:有趣好玩—利用pygame库实现鱼儿自动实时目标跟踪(附完整代码)

    Py之pygame:有趣好玩-利用pygame库实现鱼儿自动实时目标跟踪(附完整代码) 目录 输出结果 实现代码 输出结果 实现代码 #Py之pygame:利用pygame库实现鱼儿自动实时目标跟踪i ...

  9. c++代码好玩_Py之pygame:有趣好玩—利用pygame库实现鱼儿自动实时目标跟踪(附完整代码)...

    Py之pygame:有趣好玩-利用pygame库实现鱼儿自动实时目标跟踪(附完整代码) 目录 输出结果 实现代码 输出结果 ​ 实现代码 #Py之pygame:利用pygame库实现鱼儿自动实时目标跟 ...

最新文章

  1. 面向对象编程(OOP)----BLUE大师JS课堂笔记(二)
  2. OpenWrt启动过程分析+添加自启动脚本【转】
  3. c++读取txt中每行的数据到数组中
  4. The import java.util cannot be resolved
  5. 信号回勾产生的原因_电力电缆故障原因及常用检测方法
  6. ubuntu无线网络开关
  7. Linux命令之 mke2fs -- 格式化分区(为分区写入文件系统)
  8. linux 远程桌面配置,linux 远程桌面的配置
  9. C Primer Plus note7
  10. Unity学习笔记(一)——C#语法基础
  11. [2018.11.03 T3] 单调序列
  12. PSP XREADER 1.63下载(PSP阅读器)v1.6最新版 含安装/使用方法
  13. OpenCore引导配置说明第四版
  14. window.opener 与 window.dialogArguments的用法
  15. 看《一人之下:陈朵篇》——架空世界里的真实
  16. 机器学习算法(十):线性回归之最小二乘法
  17. BZOJ 3505 【CQOI2014】 数三角形
  18. 云计算与大数据——数据中心
  19. GoDaddy域名转出教程 - 解锁、获取转移码、快速确认转出
  20. 关于zuul和nginx文件上传大小限制问题

热门文章

  1. BN、CBN、CmBN 的对比与总结
  2. 记一次windows 10启动报错 An operat ing system wasn‘t found. Try disconnecting any drives that don‘t con问题
  3. Remix-IDE安装开发环境与使用文档(Windows环境)
  4. win7系统wifi没有网络连接到服务器,Win7无线Wifi无法连接怎么办?win7系统Wifi无法连接的三种故障原因及解决方法...
  5. JS中的click事件无反应
  6. 包对象之Oracle如何编译失效包体
  7. 顺序结构不属于python语言控制结构_顺的解释|顺的意思|汉典“顺”字的基本解释...
  8. 高性能计算机传奇(vamei)
  9. 数据分析岗位面试准备请看这篇!
  10. 一文读懂通信玩家半年财报,有人欢喜有人愁!