zoukankan      html  css  js  c++  java
  • 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()

            

  • 相关阅读:
    JSTL 标签库<转>
    EL表达式 <转>
    前端知识点记录
    spring boot 项目连接数据库查询数据过程
    vue -电子时钟
    XML读取
    Druid 连接池
    java JDBC自我总结
    各种数据库的链接方式总结
    Java MD5获取
  • 原文地址:https://www.cnblogs.com/fromlantianwei/p/9909527.html
Copyright © 2011-2022 走看看