游戏初始化:设置游戏窗口;创建游戏时钟;创建精灵,精灵组
游戏循环:设置刷新帧率;事件监听;碰撞检测;更新/绘制精灵组;更新屏幕显示
使用面向对象设计飞机大战游戏类
明确主程序职责:1)游戏初始化;2)游戏循环
主程序类:plane_main:游戏主程序
1)风转著游戏类;2)创建游戏对象;3)启动游戏
plane_sprites:屏幕尺寸常量,游戏精灵子类
1)封装游戏中所有需要使用的精灵子类;2)提供游戏的相关工具
代码实现:
新建plane_main.py文件
使用常量代替固定的数值;
应用场景:
开发时,可能会需要使用固定的数值,例如屏幕的高度是700;这个时候,建议不要直接使用固定数值,而应该使用常量;在开发时,为了保证代码的可维护性,尽量不要使用魔法数字;
常量
常量的定义:定义常量和定义变量的语法完全一样,都是使用赋值语句;
常量的命名应该所有字母都使用大写,单词与单词之间使用下划线连接;
常量的好处:
阅读代码时,通过常量名 见名知意 不需要v哀册数字的含义;
如果需要调整值,只需要修改常量定义就可以实现统一修改;
提示:
python中并没有真正意义的常量,只是通过命名的约定–所有字母都是大写的就是常量,开发时不要轻易的修改。
#主游戏类
import pygame
import plane_sprite
#屏幕大小的常量
SCREEN_RECT = pygame.Rect(0,0,480,700)
#刷新的帧率
FRAME_PER_SEC = 60
class PlaneGame(object):
"""飞机大战主游戏"""
def __init__(self):
print("游戏初始化")
#1.创建游戏窗口--矩形对象的size属性就是元组
self.screen = pygame.display.set_mode((SCREEN_RECT.size))
#2.创建游戏时钟
self.clock = pygame.time.Clock()
#3.调用私有方法,精灵和精灵组的创建
self.__create_sprites()
def __create_sprites(self):
pass
def start_game(self):
print("游戏开始")
while True:
#1.设置刷频率
self.clock.tick(FRAME_PER_SEC)
#2.事件监听
self.__event_handles()
#3.碰撞检测
self.__check_collide()
#4,更新/绘制精灵组
self.__update_sprites()
#5.更新显示
pygame.display.update()
def __event_handles(self):
for even in pygame.event.get():
#判断是否退出游戏
if even.type == pygame.QUIT:
PlaneGame.__game_over()
def __check_collide(self):
pass
def __update_sprites(self):
pass
@staticmethod
def __game_over(cls):
print("游戏结束")
pygame.quit()
exit()
if __name__ == '__main__':
#创建游戏对象
game = PlaneGame()
#启动游戏
game.start_game()