代码已经标注前后顺序,感觉还算比较详细,
res/引入的图片素材,大家可以自行百度或对接自己的素材,希望对大家有所帮助!
import pygame
import sys
import pygame.locals
IMG_BACKGROUND="res/img_bg_level_2.jpg"
APP_ICO="res/app.ico"
# TODO 12 创建所有显示的图形父类 Model
class Model:
# TODO 16定义主题框对象,用于模型访问使用
window = None
# TODO 10.制作背景构造方法 , 传入图片路径 x,y
def __init__(self, img_path, x, y):
self.img = pygame.image.load(img_path) # 背景图片,传入图片路径
self.x = x
self.y = y
# TODO 13 将模型加入窗体的方法抽取到父类
def display(self):
# TODO 17使用Mode的类变量访问窗体对象 调用bilt 方法,将图片加入到窗体中
Model.window.blit(self.img,(self.x,self.y))
# TODO 背景
class Bcakground(Model):
#TODO 16.定义背景移动方法
def move(self):
self.y +=1 #纵坐标自增1,展示出来图片不断变化
# TODO 21.加入背景移动的情况判定
if self.y <= Game.WINDOW_HEIGHT: # TODO .如果没有超出屏幕就正常移动
self.y += 1
else:
self.y=0 #纵坐标=0 恢复原位
#TODO 22覆盖父类display方法 制作原始背景贴图+辅助背景图
def display(self):
# TODO .原始背景贴图,推荐使用super().display()
Model.window.blit(self.img,(self.x,self.y))
# TODO 辅助背景,坐标位置与原始背景贴图上下拼接吻合
Model.window.blit(self.img,(self.x,self.y-Game.WINDOW_HEIGHT))
# TODO 玩家
class PlayerPlane(Model):
pass
#TODO 敌方
class EnemyPlane(Model):
pass
# TODO 子弹
class Bullet(Model):
pass
# TODO 游戏
class Game:
WINDOW_HEIGHT = 768
WINDOW_WIDTH = 512
# TODO 1.主程序 运行游戏入口 def构造方法
def run(self):
self.frame_init() #TODO 4.执行窗体初始化
self.model_init()# TODO 12.背景图执行对象初始化
while True: # TODO 使用反复执行的机制, 刷新窗体
#TODO 19 调用背景移动操作,构造背景图片下拉移动的效果
self.background.move()
#TODO 20 移动完毕后将移动后的图片加入到窗体中
self.background.display()
# TODO 6.刷新窗体
pygame.display.update()
self.event_init()#TODO 8.初始化关闭窗口-监听事件并反复调用监听
# TODO 3.初始化 窗体
def frame_init(self):
# TODO 5.初始化窗体
self.windows=pygame.display.set_mode((Game.WINDOW_WIDTH,Game.WINDOW_HEIGHT))
Model.window = self.windows #TODO 15将窗体对象传入模型类中
# TODO 7.设置游戏相关属性
img=pygame.image.load(APP_ICO)
pygame.display.set_icon(img)
pygame.display.set_caption("飞机大作战无敌版 -By.ictcast")
def event_init(self):
# TODO 9.获取当前页面所有发生的事件
for event in pygame.event.get():
# 判断当前事件类别是不是点击窗体的关闭按钮
if event.type == pygame.locals.QUIT:
# 执行退出系统操作
sys.exit()
# TODO 11.初始化窗体中的对象
def model_init(self):
# 初始化背景对象,传入图片路径,放置在0,0(x.y)位置
self.background=Bcakground(IMG_BACKGROUND,0,0) #TODO 18.使用self 提成为类方法调用
# TODO 14 使用抽取的Model类中的display方法完成 18操作之后失效
# background.display()
# 调用bilt方法,将图片加入到窗口体
# self.windows.blit(background.img,(background.x,background.y))
#TODO 2.程序测试类 入口操作
if __name__ == '__main__':
Game().run()