python:pygame小遊戲(三)—— 打字遊戲
阿新 • • 發佈:2019-01-06
""" 打字遊戲 1. 宣告列表word、xx(x座標值)、yy(y座標值) 2. 建立init()函式,初始化三個列表 3. 第四部分:paint ===>繪製字元 4. 第三部分:action ===>進行字母移動 5. 鍵盤監聽事件 迴圈比對 """ import pygame, sys # 匯入隨機函式模組 import random """ 第一部分:主函式 """ def menu(): # 1.設定視窗標題 pygame.display.set_caption("打字遊戲") # 2.死迴圈 while True: # 3.設定背景顏色填充 screen.fill((255, 255, 255)) # 繪製哪張圖,以及起始點位置 #screen.blit(back, (0, 0)) # 4.呼叫業務處理函式 action() # 5.呼叫圖形圖案繪製函式 paint() # 7.螢幕重新整理延遲 pygame.time.delay(10) # 6.設定視窗重新整理螢幕 pygame.display.update() """ 第二部分:變數宣告初始化區域 """ # 設定窗體 screen = pygame.display.set_mode((800, 600), 0, 0) # 儲存字母列表 word = [] # 儲存字母座標值列表 xx = [] yy = [] # 載入圖片 # back = pygame.image.load("1.jpg") """ 第五部分:初始化函式 """ def init(): for i in range(0,10): # 字母 ===》A :65 a==>97 word.append(random.randint(65,90)) # 座標值 xx.append(random.randint(0,800)) yy.append(random.randint(0,600)) """ 第三部分:業務邏輯處理區域 """ def action(): # 4.1 迴圈迭代事件監聽 for event in pygame.event.get(): # 4.2 判斷是否退出系統 if event.type == pygame.QUIT: sys.exit() # 4.4 迴圈比對 if event.type == pygame.KEYDOWN: # 鍵盤按下 # 4.5 迴圈遍歷與按鍵比較 for i in range(0,10): # 4.6 判斷 if event.key == word[i]+32: # 4.7 業務處理 word[i] = random.randint(65,90) # 使得word“消失” xx[i] = random.randint(0,800) # xx座標另產生一個隨機數,表現為“消失” # 使得yy座標“消失”,yy座標變負號,消失在螢幕看不見的位置 yy[i] = -random.randint(0,600) # 4.8 防止消失多個 break # 4.3 字母移動 for i in range(0,10): yy[i] += 1 # 迴圈判斷 if yy[i] > 600: yy[i] = 0 # 4.3.1 根據飛行方向修改座標值 # 4.3.2 根據座標值修改飛行方向 # 4.4 根據分數修改速度 """ 第四部分:圖形圖案繪製區域 """ def paint(): # 4.1 初始化字型 pygame.font.init() # 4.2 設定字型樣式 (ps: wryh.ttf是字型庫的檔案,和專案檔案放到一個資料夾中) font = pygame.font.Font("wryh.ttf", 28) # 4.3 迴圈迭代 for i in range(0,10): # 4.4 設定繪製內容 fontRead = font.render(chr(word[i]),True,(0,0,0)) # int轉字串,字型為黑色 # 4.5 設定繪製內容的座標 screen.blit(fontRead,(xx[i],yy[i])) # 將字串繪製到該視窗上 # main函式 if __name__ == '__main__': init() menu()
程式碼二:進一步完善程式碼功能,設計成更好看的介面
""" 打字遊戲 1. 宣告列表word、xx(x座標值)、yy(y座標值) 2. 建立init()函式,初始化三個列表 3. 第四部分:paint ===>繪製字元 4. 第三部分:action ===>進行字母移動 5. 鍵盤監聽事件 迴圈比對 拓展練習: 1. 分數 score +5 2. 根據分數處理 速度問題 3. 更改顏色 每個字母只有一個顏色 4. 更改背景 將背景改為圖片 """ import pygame, sys # 匯入隨機函式模組 import random """ 第一部分:主函式 """ def menu(): # 1.設定視窗標題 pygame.display.set_caption("打字遊戲") # 2.死迴圈 while True: # 3.設定背景顏色填充 # screen.fill((255, 255, 255)) # 繪製哪張圖,以及起始點位置 screen.blit(back, (0, 0)) # 4.呼叫業務處理函式 action() # 5.呼叫圖形圖案繪製函式 paint() # 7.螢幕重新整理延遲 pygame.time.delay(speed) # 6.設定視窗重新整理螢幕 pygame.display.update() """ 第二部分:變數宣告初始化區域 """ # 設定窗體 screen = pygame.display.set_mode((800, 600), 0, 0) # 儲存字母列表 word = [] # 儲存字母座標值列表 xx = [] yy = [] # 儲存得分 score = 0 # 儲存RGB顏色值 R = 0 G = 0 B = 0 # 儲存速度 speed = 20 # 載入圖片(選一張好看的圖片作為背景) back = pygame.image.load("1.jpg") """ 第五部分:初始化函式 """ def init(): for i in range(0,10): # 字母 ===》A :65 a==>97 word.append(random.randint(65,90)) # 座標值 xx.append(random.randint(0,800)) yy.append(random.randint(0,600)) """ 第三部分:業務邏輯處理區域 """ def action(): global score # 4.1 迴圈迭代事件監聽 for event in pygame.event.get(): # 4.2 判斷是否退出系統 if event.type == pygame.QUIT: sys.exit() # 4.4 迴圈比對 if event.type == pygame.KEYDOWN: # 鍵盤按下 # 4.5 迴圈遍歷與按鍵比較 for i in range(0,10): # 4.6 判斷 if event.key == word[i]+32: # 4.7 業務處理 word[i] = random.randint(65,90) # 使得word“消失” xx[i] = random.randint(0,800) # xx座標另產生一個隨機數,表現為“消失” # 使得yy座標“消失”,yy座標變負號,消失在螢幕看不見的位置 yy[i] = -random.randint(0,600) score += 5 # 4.8 防止消失多個 break # 4.3 字母移動 for i in range(0,10): yy[i] += 1 # 迴圈判斷 if yy[i] > 600: yy[i] = 0 # 4.4 根據分數修改速度 global speed if score > 500: # 20個字 speed = 3 elif score > 250: # 50個字 speed = 5 elif score > 100: # 100個字 speed = 10 """ 第四部分:圖形圖案繪製區域 """ def paint(): # 4.1 初始化字型 pygame.font.init() # 4.2 設定字型樣式 (ps: wryh.ttf是字型庫的檔案,和專案檔案放到一個資料夾中) font = pygame.font.Font("wryh.ttf", 28) # 4.3 迴圈迭代 for i in range(0,10): # 4.7 呼叫updateColor updateColor() # 4.4 設定繪製內容 fontRead = font.render(chr(word[i]),True,(R,G,B)) # int轉字串,字型為黑色 scoreShow = font.render("score:%s"%score,True,(255,0,0)) # 4.5 設定繪製內容的座標 screen.blit(fontRead,(xx[i],yy[i])) # 將字串繪製到該視窗上 # 4.6 繪製分數 screen.blit(scoreShow, (20,20)) # 將字串繪製到該視窗上 """ 第六部分:更改RGB顏色值 """ def updateColor(): global R,G,B R = random.randint(0,255) G = random.randint(0, 255) B = random.randint(0, 255) # main函式 if __name__ == '__main__': init() menu()
執行效果貼圖展示:
注:
1. 為了使該遊戲設計更真實豐富,貼近生活實際,程式碼可以繼續新增其他的功能。
如字母落到底部過程都沒有消失,進行扣分處理,低於一定分值結束遊戲等。具體實現可自行設計。