python飞机大战pygame游戏框架搭建操作详解
本文实例讲述了python飞机大战pygame游戏框架搭建操作。分享给大家供大家参考,具体如下:
目标
- 明确主程序职责
- 实现主程序类
- 准备游戏精灵组
01.明确主程序职责
- 回顾快速入门案例,一个游戏主程序的职责可以分为两个部分:
- 游戏初始化
- 游戏循环
- 根据明确的职责,设计PlaneGame类如下:
提示根据职责封装私有方法,可以避免某一个方法的代码写得太过冗长
如果某一个方法编写的太长,既不好阅读,也不好维护!
- 游戏初始化——init()会调用以下方法:
游戏循环——start_game()会调用以下方法:
02.实现飞机大战主游戏类
2.1明确文件职责
- plane_main
- 封装主游戏类
- 创建游戏对象
- 启动游戏
- plane_sprites
- 封装游戏中所有需要使用的精灵子类
- 提供游戏的相关工具
代码实现
- 新建plane_main.py文件,并且设置为可执行
- 编写基础代码
importpygame fromplane_spritesimport* classPlaneGame(object): """飞机大战主游戏""" def__init__(self): print("游戏初始化") defstart_game(self): print("开始游戏...") if__name__=='__main__': #创建游戏对象 game=PlaneGame() #开始游戏 game.start_game()
2.3游戏初始化部分
完成init()代码如下:
def__init__(self): print("游戏初始化") #1.创建游戏的窗口 self.screen=pygame.display.set_mode((480,700)) #2.创建游戏的时钟 self.clock=pygame.time.Clock() #3.调用私有方法,精灵和精灵组的创建 self.__create_sprites() def__create_sprites(self): pass
使用常量代替固定的数值
- 常量——不变化的量
- 变量——可以变化的量
应用场景
- 在开发时,可能会需要使用固定的数值,例如屏幕的高度是700
- 这个时候,建议不要直接使用固定数值,而应该使用常量
- 在开发时,为了保证代码的可维护性,尽量不要使用魔法数字
常量的定义
- 定义常量和定义变量的语法完全一样,都是使用赋值语句
- 常量的命名应该所有字母都使用大写,单词与单词之间使用下划线连接
常量的好处
- 阅读代码时,通过常量名见名之意,不需要猜测数字的含义
- 如果需要调整值,只需要修改常量定义就可以实现统一修改
提示:Python中并没有真正意义的常量,只是通过命名的约定——所有字母都是大写的就是常量,开发时不要轻易的修改!
代码调整
- 在plane_sprites.py中增加常量定义
importpygame #游戏屏幕大小 SCREEN_RECT=pygame.Rect(0,0,480,700)
修改plane_main.py中的窗口大小
self.screen=pygame.display.set_mode(SCREEN_RECT.size)
2.4游戏循环部分
完成start_game()基础代码如下:
defstart_game(self): """开始游戏""" print("开始游戏...") whileTrue: #1.设置刷新帧率 self.clock.tick(60) #2.事件监听 self.__event_handler() #3.碰撞检测 self.__check_collide() #4.更新精灵组 self.__update_sprites() #5.更新屏幕显示 pygame.display.update() def__event_handler(self): """事件监听""" foreventinpygame.event.get(): ifevent.type==pygame.QUIT: PlaneGame.__game_over() def__check_collide(self): """碰撞检测""" pass def__update_sprites(self): """更新精灵组""" pass @staticmethod def__game_over(): """游戏结束""" print("游戏结束") pygame.quit() exit()
03.准备游戏精灵组
3.1确定精灵组
3.2代码实现
创建精灵组方法
def__create_sprites(self): """创建精灵组""" #背景组 self.back_group=pygame.sprite.Group() #敌机组 self.enemy_group=pygame.sprite.Group() #英雄组 self.hero_group=pygame.sprite.Group()
更新精灵组方法
def__update_sprites(self): """更新精灵组""" forgroupin[self.back_group,self.enemy_group,self.hero_group]: group.update() group.draw(self.screen)
更多关于Python相关内容可查看本站专题:《Python游戏开发技巧总结》、《Python数据结构与算法教程》、《PythonSocket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。