1. 程式人生 > >18 11 05 繼續補齊對python中的class不熟悉的地方 和 pygame 精靈

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