18 11 05 继续补齐对python中的class不熟悉的地方 和 pygame 精灵
---恢复内容开始---
class game : #历史最高分----- 是定义类的属性 top_score =0 def __init__(self, player_name) : #是定义的实例属性 每个实例都要有他的格式 self.player_name = player_name @staticmethod #设置一个静态属性 它不访问类属性 与实例属性 谁来都一样 def show_help(): print("展示输入信息") @classmethod #设置一个类属性 需要访问 谁来结果也一样 def show_top_score(cls): # cls 表明访问的是自己的这个类 print("历史记录%d"%cls.top_score) def start_game (self): #设置一个实例属性 每个调用都有自己的名称 在 init 里 要输入初始参数 print("%s开始游戏啦"%(self.player_name)) #调用静态属性 game.show_help() #调用类属性 game.show_top_score() #调用实例属性 每个实例有着自己的参数 必须要传参 player1 = game("小明") print(player1.player_name) player1.start_game()
敲这个异常艰辛 因为在def 设置函数的时候 缩进打了两个 检查了蛮久才发现了这个问题 这也是平时有点觉得python没那么规范 没有好好打 制造出来的错误
代码小结
1 实例方法 方法内部需要访问的 实例属性
2 类方法 方法内部只需要访问到整个类的属性
3 静态方法 方法内部 两个都不用访问
class game : #历史最高分----- 是类的属性 top_score =0 def __init__(self, player_name) : self.player_name = player_name #设置一个静态属性 它不访问类属性 与实例属性 谁来都一样 def show_help(cls): print("展示输入信息") #设置一个类属性 需要访问 谁来结果也一样 def show_top_score(cls): # cls 表明访问的是自己的这个类 print("历史记录%d"%cls.top_score) def start_game (self): #设置一个实例属性 每个调用都有自己的名称 在 init 里 要输入初始参数 print("%s开始游戏啦"%(self.player_name)) #调用静态属性 #game.show_help() #调用类属性 #game.show_top_score() #调用实例属性 每个实例有着自己的参数 必须要传参 player1 = game("小明") print(player1.player_name) player1.start_game() player1.show_top_score() player1.show_help()
上面直接用调用实例属性 把两个@删了也能访问到 觉得这样也ok 所以实例属性很万能 三个都能防访问
---恢复内容结束---
class game : #历史最高分----- 是定义类的属性 top_score =0 def __init__(self, player_name) : #是定义的实例属性 每个实例都要有他的格式 self.player_name = player_name @staticmethod #设置一个静态属性 它不访问类属性 与实例属性 谁来都一样 def show_help(): print("展示输入信息") @classmethod #设置一个类属性 需要访问 谁来结果也一样 def show_top_score(cls): # cls 表明访问的是自己的这个类 print("历史记录%d"%cls.top_score) def start_game (self): #设置一个实例属性 每个调用都有自己的名称 在 init 里 要输入初始参数 print("%s开始游戏啦"%(self.player_name)) #调用静态属性 game.show_help() #调用类属性 game.show_top_score() #调用实例属性 每个实例有着自己的参数 必须要传参 player1 = game("小明") print(player1.player_name) player1.start_game()
敲这个异常艰辛 因为在def 设置函数的时候 缩进打了两个 检查了蛮久才发现了这个问题 这也是平时有点觉得python没那么规范 没有好好打 制造出来的错误
代码小结
1 实例方法 方法内部需要访问的 实例属性
2 类方法 方法内部只需要访问到整个类的属性
3 静态方法 方法内部 两个都不用访问
class game : #历史最高分----- 是类的属性 top_score =0 def __init__(self, player_name) : self.player_name = player_name #设置一个静态属性 它不访问类属性 与实例属性 谁来都一样 def show_help(cls): print("展示输入信息") #设置一个类属性 需要访问 谁来结果也一样 def show_top_score(cls): # cls 表明访问的是自己的这个类 print("历史记录%d"%cls.top_score) def start_game (self): #设置一个实例属性 每个调用都有自己的名称 在 init 里 要输入初始参数 print("%s开始游戏啦"%(self.player_name)) #调用静态属性 #game.show_help() #调用类属性 #game.show_top_score() #调用实例属性 每个实例有着自己的参数 必须要传参 player1 = game("小明") print(player1.player_name) player1.start_game() player1.show_top_score() player1.show_help()
上面直接用调用实例属性 把两个@删了也能访问到 觉得这样也ok 所以实例属性很万能 三个都能防访问
继续I我的 pygame 学习
精灵
封装自己的图像image 大小ract 速度speed
精灵组 把所有精灵 从放进去精灵组 同时进行
同时把所有精灵放进精灵组 一起调用update 方法更新位置
一起用 draw方法 来进行屏幕上的位置
import pygame class gamesprite(pygame.sprite.Sprite): #定义一个类 括号里面的是调用了pygame.sprite.Sprite (父) 类的内置方法 def __init__(self , image_name ,speed = 1): #传两个参数 其中speed默认为1 super().__init__() #用super调用父类的方法 self.image = pygame.image.load(image_name) # 参数 = 调用pygame方法 传上去的的 变量名 self.rect = self.image.get_rect() #得到传上去图片的大小 self.speed = speed def update(self): self.rect.y += self.speed #图片的位置等于图片y的增加量
上面是精灵组的包 @ 来使用
import pygame from plane_sprites import* #从plane文件中调用所有方法 pygame.init() # 设置游戏的窗口 screen = pygame.display.set_mode((480, 700)) # 总游戏的运行窗口 只有一个 # 背景 background = pygame.image.load("./images/background.png") screen.blit(background, (0, 0)) # 游戏窗口绘制完成 # 进行飞机窗口的绘制 hero = pygame.image.load("./images/me1.png") screen.blit(hero, (200, 300)) # 英雄相对于界面的位置 # 定义飞机的初始位置 hero_rect = pygame.Rect(200, 500, 102, 126) #创建敌方的飞机 enemy = gamesprite("./images/enemy1.png") enemy1 = gamesprite("./images/enemy1.png",2) #增加多个精灵 并更改速度 enemy3 = gamesprite("./images/enemy1.png",10) #创建敌方的飞机组 让所有小飞机进入 enemy_group = pygame.sprite.Group(enemy,enemy1,enemy3) # 对整个游戏进行刷新 pygame.display.update() clock = pygame.time.Clock() # 游戏循环 while True: clock.tick(60) # 游戏刷新的频率 for event in pygame.event.get(): if event.type == pygame.QUIT : print("游戏退出.....") pygame.quit() exit() #python 中内置的关闭指令 if hero_rect.y <= 1: hero_rect.y = 500 else: hero_rect.y -= 1 # 更改游戏合飞机对于界面的位置 screen.blit(background, (0, 0)) screen.blit(hero, hero_rect) #让精灵组调用两个方法 enemy_group.update() #让组中的所有精灵更新位置 enemy_group.draw(screen) #调用draw方法 把精灵组中所有精灵绘制在 screen 上面 pygame.display.update() pass pygame.quit()