用pygame開發(fā)自己的游戲-5.增加分?jǐn)?shù)功能

一、引言

前面教程中我們學(xué)會(huì)判斷綠色方塊接收紅色方塊,我們來(lái)增加一個(gè)功能,在屏幕左上角顯示游戲的得分。

二、實(shí)現(xiàn)思路

目前我們只有一個(gè)紅色方塊,為了能有機(jī)會(huì)撞到多次好計(jì)分,紅色方塊掉到最下方或者被接住后,我們需要重新生成紅色方塊。代碼上的實(shí)現(xiàn)比較簡(jiǎn)單,將紅色方塊的位置重新改變下就可以實(shí)現(xiàn)該需求了。另外,我們?cè)黾右粋€(gè)變量score,當(dāng)紅色方塊被接住后,我們就讓score增加1,就達(dá)到統(tǒng)計(jì)好分?jǐn)?shù)的目的。
相關(guān)代碼:

import pygame, sys

# 初始化
pygame.init()
SCREEN = pygame.display.set_mode((400, 300))
pygame.display.set_caption('Hello World!')

# 綠色方塊固定在最下方,左右移動(dòng),y值不變
green_x = 110
# 紅色方塊從上往下移動(dòng),x值不變
red_y = 0
# 游戲主循環(huán)
score = 0
while True: 
    for event in pygame.event.get():
        # 處理退出事件
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        # 鍵盤按下事件
        elif event.type == pygame.KEYDOWN:
            # 'a'鍵被按下
            if event.key == pygame.K_a:
                green_x -= 5
            elif event.key == pygame.K_d:
                green_x += 5
    red_y += 5
    green_rect = pygame.Rect(green_x, 250, 100, 50)
    if green_rect.colliderect(85, red_y, 20, 50):
        print('紅色方塊與綠色方塊碰撞到了')
        # 為了方便看到碰撞結(jié)果,直接break返回
        score += 1
        red_y = 0
    if red_y >= 300:
        red_y = 0
    SCREEN.fill((255, 255, 255))
    # 調(diào)用 pygame.display.update() 方法更新整個(gè)屏幕的顯示
    pygame.draw.rect(SCREEN, (255, 0, 0), (85, red_y, 20, 50))
    pygame.draw.rect(SCREEN, (0, 255, 0), (green_x, 250, 100, 50))
    pygame.display.update()
    pygame.time.delay(50)

游戲主要邏輯已經(jīng)完成,我們只需要增加顯示分?jǐn)?shù)的功能。通過(guò)查文檔(百度找個(gè)能看懂的例子學(xué)習(xí)),顯示文字需要以下幾行代碼。

# 初始化
pygame.font.init()
# Font的第一個(gè)參數(shù)填寫字體,None表示用默認(rèn)字體
myfont = pygame.font.Font(None,60)
# 可以理解為把文字轉(zhuǎn)化為圖片
textImage = myfont.render("Hello Pygame", True, (0, 0, 255))
# 將圖片顯示出來(lái)
screen.blit(textImage, (100,100))

仿照以上的代碼,我們將代碼實(shí)現(xiàn)出來(lái)。需要注意的是,文字轉(zhuǎn)為圖片、圖片顯示出來(lái)兩行代碼是每個(gè)循環(huán)里都需要做的事情,所以必須加在while循環(huán)里,否則文字無(wú)法顯示出來(lái),會(huì)被后面的覆蓋。
最終代碼如下:

import pygame, sys

# 初始化
pygame.init()
SCREEN = pygame.display.set_mode((400, 300))
pygame.display.set_caption('Hello World!')

# 綠色方塊固定在最下方,左右移動(dòng),y值不變
green_x = 110
# 紅色方塊從上往下移動(dòng),x值不變
red_y = 0
# 游戲主循環(huán)
score = 0
pygame.font.init()
myfont = pygame.font.Font(None,60)

while True: 
    for event in pygame.event.get():
        # 處理退出事件
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        # 鍵盤按下事件
        elif event.type == pygame.KEYDOWN:
            # 'a'鍵被按下
            if event.key == pygame.K_a:
                green_x -= 5
            elif event.key == pygame.K_d:
                green_x += 5
    red_y += 5
    green_rect = pygame.Rect(green_x, 250, 100, 50)
    if green_rect.colliderect(85, red_y, 20, 50):
        print('紅色方塊與綠色方塊碰撞到了')
        # 為了方便看到碰撞結(jié)果,直接break返回
        score += 1
        red_y = 0
    if red_y >= 300:
        red_y = 0
    SCREEN.fill((255, 255, 255))
    # 調(diào)用 pygame.display.update() 方法更新整個(gè)屏幕的顯示
    pygame.draw.rect(SCREEN, (255, 0, 0), (85, red_y, 20, 50))
    pygame.draw.rect(SCREEN, (0, 255, 0), (green_x, 250, 100, 50))
    textImage = myfont.render("score: " + str(score), True, (0, 0, 255))
    SCREEN.blit(textImage, (10,10))
    pygame.display.update()
    pygame.time.delay(50)

三、思考題

  1. 把文字的顯示改成黃色,位置在右上角。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容