18 11 05 繼續補齊對python中的class不熟悉的地方 和 pygame 精靈
阿新 • • 發佈:2018-11-05
---恢復內容開始---
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()