1. 程式人生 > >python:pygame小遊戲(三)—— 打字遊戲

python:pygame小遊戲(三)—— 打字遊戲

   程式碼一:實現字元下落的基本功能

"""
打字遊戲
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. 為了使該遊戲設計更真實豐富,貼近生活實際,程式碼可以繼續新增其他的功能。

    如字母落到底部過程都沒有消失,進行扣分處理,低於一定分值結束遊戲等。具體實現可自行設計。