python新手敲打飞机大作战项目(上)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yaxiaoran1/article/details/82228795

代码已经标注前后顺序,感觉还算比较详细,

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()


猜你喜欢

转载自blog.csdn.net/yaxiaoran1/article/details/82228795