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

 

        

posted @ 2018-11-05 21:23  Mr喃先森  阅读(265)  评论(0编辑  收藏  举报