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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。