第二十三次总结:飞机大战(三)

开发游戏前

开发游戏,使用pygame包

pip install pygame

导入模块

import pygame

pygame.init()

主要的代码

pygame.quit()

主要的代码

主要分两块

循环以外

循环内

循环的外部

主要是加载一些东西

生成游戏的屏幕

使用绘制图片三步曲完成背景图的绘制,第1步是在外部完成的,主要是加载图片,得到图片对象

生成一些对象

矩形对象,目的,是帮我们记录,图片的数据(x,y,宽,高)

时钟对象

循环的内部

修改一些数据

绘制图片,绘图三步曲的2,3步骤,在这里实现

使用最新的x y数据来绘制图片

更新显示

控制帧率

时钟对象.tick(帧率)

事件监听

可以用一个方法获取事件列表

只需要找一找事件列表中,是否有我们预定义好的事件和响应。如果有,那么就相应设置

event_list = 【点击空格,有点m键的事件,点击数字2】
for event in event_list:
    if event.type == 21: # 假设21是空格事件的type编号
    #验证事件的类别是否是点击空格,如果是的话,会进入到当前的if分支
        点击空格时的执行的代码
        假设点击空格是放大招,敌机全灭
    if event.type == 右方向键对应的type值:
        飞机的矩形对象.x += 2
    if event.type == 按下左方向键时对应的type值:
        飞机的x数据 -= 2

点右上角的叉

如果用户有点右上角的叉,这个行为,那么我们就是结束游戏

如果用户点击的是右方向键,那么,我们就会让飞机的x坐标+

点左方向键,就让x坐标

飞机对象的封装

定义了一个类

HeroPlane

通过这个类,可以创建一个飞机对象

飞机对象中有两个实例属性

对象.属性 = 值

飞机对象.image = 飞机图片对象

飞机对象.rect = 飞机矩形对象

当前是三个对象

主要是飞机对象

图片对象与矩形对象都被封装在飞机对象的内部

作为了飞机对象的属性的值

大家第二天早点来,早点干活早点结束,不然吃晚

工具模块中定义英雄飞机类

在tool模块中定义的这个英雄飞机类

import pygame
​
class HeroPlane():
    def __init__(self, img_path):
        print('...英雄飞机创建成功...')
        # hero = pygame.image.load('./images/me3.png')
        self.image = pygame.image.load(img_path)
        self.rect = pygame.Rect(150, 300, 102, 126)
​
    def update(self):
        # 修改飞机的位置
        self.rect.x += 2
        if self.rect.x >= 480:
            self.rect.x = 0

英雄飞机类让他继承精灵类

一,注意事项

如果我们定义的类不是直接的继承自object

而是继承的别的类

那么在初始化的时候

一定

一定

一定

要调用一下父类的init方法

通过

super().__init__()

二,调用时注意

观注一下,父类的init方法中,是否有必需传递的参数

如果有,那么我们在用super调用的时候,一定要传参进去

除了self参数可以不用传

class HeroPlane(pygame.sprite.Sprite):
    def __init__(self, img_path):
        # 调用父类方法
        # pygame.sprite.Sprite.__init__(self)
        super().__init__()
        # 对象.方法()

精灵对象添加到精灵组

先要实例化精灵组的类,得到一个精灵组的对象

精灵组的对象,添加精灵的对象

精灵组的对象调用update方法

看一看精灵成员,是否也同样调用了自身的update方法

精灵组的对象.update()

定义函数的时候内存的事

通过类来调用实例方法

通过类调用实例方法

因为实例方法的第一个形参是self

如果是用类来调实例方法,实例方法中所需要的形参,自己传

如果是用实例对象来调实例方法,实例方法中所需要的形参,不用传

class Cat:
    def __init__(self, name):
        self.name = name
​
    def print_name(self):
        print("at print name method")
        print(self.name)
​
t = Cat("tom")
j = Cat("jifei")
Cat.print_name(j)
# t.print_name()

飞机类的设计分析

继承的详析

自定义的游戏精灵类,继承自 pygame的精灵类

class GameSprite(pygame.sprite.Sprite):
    """自定义的游戏精灵类"""
    def __init__(self, image_path, speed):
        self.image = pygame.image.load(image_path)
        self.rect = pygame.Rect(0,0,100,200)
        self.speed = speed

自定义的英雄飞机类,继承自,自定义的游戏精灵类

class HeroPlane(GameSprite):
    def __init__(self, i, s):
        # 设置我方飞机的位置
        super().__init__(i,s)

猜你喜欢

转载自blog.csdn.net/qq_42552477/article/details/89214932