如何使用 PyGame 創建開始菜單和遊戲結束屏幕

如何使用 PyGame 創建開始菜單和遊戲結束屏幕

PyGame 是用於使用 Python 創建項目的流行庫,它為遊戲開發提供了一組強大的工具。在本文中,您將學習如何使用 PyGame 為簡單遊戲創建開始菜單和遊戲結束屏幕。​​​​​​

創建一個簡單的遊戲

在創建開始菜單和遊戲結束屏幕之前,讓我們先製作一個簡單的遊戲。在這個遊戲中,你將用方向鍵控制一個角色,並儘量避開障礙物。為了簡單起見,盡量不要使用任何圖像。

首先,您需要導入必要的模塊。您將使用pygame模塊來訪問 PyGame 的功能。要安裝該模塊,您可以使用 pip 包管理器:

pip install pygame

現在我們的模塊可以使用了,讓我們創建一個簡單的遊戲,玩家可以使用箭頭鍵和障礙物向左或向右移動。如果你撞到障礙物,遊戲就會結束。這是相同的代碼:

import pygame
pygame.init()

screen_width = 750
screen_height = 450
screen = pygame.display.set_mode((screen_width, screen_height))

obstacle_x = 400
obstacle_y = 400
obstacle_width = 40
obstacle_height = 40
player_x = 200
player_y = 400
player_width = 20
player_height = 20

while True:

    for event in pygame.event.get():

        if event.type == pygame.QUIT:
            pygame.quit()
            quit()

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        player_x -= 5
    if keys[pygame.K_RIGHT]:
        player_x += 5

    if player_x + player_width > obstacle_x and player_x < obstacle_x + obstacle_width and player_y + player_height > obstacle_y and player_y < obstacle_y + obstacle_height:
        game_over = True

    screen.fill((0, 0, 0))
    pygame.draw.rect(screen, (255, 0, 0), (obstacle_x, obstacle_y, obstacle_width, obstacle_height))
    pygame.draw.rect(screen, (0, 255, 0), (player_x, player_y, player_width, player_height))
    pygame.display.update()

在上面的代碼中,您設置了遊戲窗口並聲明了遊戲變量。您還處理了用戶輸入並將元素繪製到屏幕上。

使用pygame的簡單遊戲

創建開始菜單

現在您已經有了一個基本的遊戲,讓我們創建一個開始菜單。為此,您需要為遊戲狀態聲明一個全局變量。此變量將跟踪遊戲的當前狀態,例如開始菜單是否處於活動狀態或遊戲是否正在運行。您需要在遊戲代碼的開頭添加此變量:

game_state = "start_menu"

接下來,您將添加一個函數來將開始菜單繪製到屏幕上。您可以使用 PyGame 函數在屏幕上繪製文本、按鈕和其他元素。

def draw_start_menu():
    screen.fill((0, 0, 0))
    font = pygame.font.SysFont('arial', 40)
    title = font.render('My Game', True, (255, 255, 255))
    start_button = font.render('Start', True, (255, 255, 255))
    screen.blit(title, (screen_width/2 - title.get_width()/2, screen_height/2 - title.get_height()/2))
    screen.blit(start_button, (screen_width/2 - start_button.get_width()/2, screen_height/2 + start_button.get_height()/2))
    pygame.display.update()

然後,您可以將draw_start_menu()函數添加到主遊戲循環中。

while True:

   for event in pygame.event.get():
       if event.type == pygame.QUIT:
           pygame.quit()
           quit()

   if game_state == "start_menu":
       draw_start_menu()

   if game_state == "game":
       keys = pygame.key.get_pressed()
       # rest of the code

現在,開始菜單將被繪製到屏幕上。最後一步是處理用戶輸入。您可以在主遊戲循環中添加一個 if 語句來檢查用戶是否按下了開始按鈕。

if game_state == "start_menu":
    keys = pygame.key.get_pressed()
    if keys[pygame.K_SPACE]:
        player_x = 200
        player_y = 400
        game_state = "game"
        game_over = False

使用此代碼,遊戲將在用戶按下開始按鈕時開始。

帶有開始屏幕的pygame簡單遊戲

實現遊戲結束畫面

現在您有了開始菜單,讓我們創建遊戲結束屏幕。此函數應顯示最終得分和遊戲結束消息。

def draw_game_over_screen():
   screen.fill((0, 0, 0))
   font = pygame.font.SysFont('arial', 40)
   title = font.render('Game Over', True, (255, 255, 255))
   restart_button = font.render('R - Restart', True, (255, 255, 255))
   quit_button = font.render('Q - Quit', True, (255, 255, 255))
   screen.blit(title, (screen_width/2 - title.get_width()/2, screen_height/2 - title.get_height()/3))
   screen.blit(restart_button, (screen_width/2 - restart_button.get_width()/2, screen_height/1.9 + restart_button.get_height()))
   screen.blit(quit_button, (screen_width/2 - quit_button.get_width()/2, screen_height/2 + quit_button.get_height()/2))
   pygame.display.update()

然後您可以將此函數添加到主遊戲循環中。

if game_state == "start_menu":
    draw_start_menu()
if game_state == "game_over":
    draw_game_over_screen()

if game_state == "game":
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        player_x -= 5
    if keys[pygame.K_RIGHT]:
        player_x += 5

if player_x + player_width > obstacle_x and player_x < obstacle_x + obstacle_width and player_y + player_height > obstacle_y and player_y < obstacle_y + obstacle_height:
    game_over = True
    game_state = "game_over"

最後,您需要處理用戶輸入以處理用戶的選擇。您可以在主遊戲循環中添加一個 if 語句來檢查用戶是否按下了重啟或退出按鈕。

if game_state == "start_menu":
    keys = pygame.key.get_pressed()
    if keys[pygame.K_SPACE]:
        game_state = "game"
       player_x = 200
       player_y = 400
       game_state = "game"
       game_over = False

if game_state == "game_over":
    keys = pygame.key.get_pressed()
    if keys[pygame.K_r]:
        game_state = "start_menu"
    if keys[pygame.K_q]:
        pygame.quit()
        quit()

使用此代碼,遊戲將在用戶按下鍵盤上的“R”按鈕時重新開始,並在用戶按下鍵盤上的“Q”按鈕時退出。

帶有遊戲結束屏幕的pygame簡單遊戲

以下是完整代碼:

import pygame

pygame.init()
screen_width = 750
screen_height = 450
screen = pygame.display.set_mode((screen_width, screen_height))
obstacle_x = 400
obstacle_y = 400
obstacle_width = 40
obstacle_height = 40
player_x = 200
player_y = 400
player_width = 20
player_height = 20
game_state = "start_menu"

def draw_start_menu():
   screen.fill((0, 0, 0))
   font = pygame.font.SysFont('arial', 40)
   title = font.render('My Game', True, (255, 255, 255))
   start_button = font.render('Start', True, (255, 255, 255))
   screen.blit(title, (screen_width/2 - title.get_width()/2, screen_height/2 - title.get_height()/2))
   screen.blit(start_button, (screen_width/2 - start_button.get_width()/2, screen_height/2 + start_button.get_height()/2))
   pygame.display.update()

def draw_game_over_screen():
   screen.fill((0, 0, 0))
   font = pygame.font.SysFont('arial', 40)
   title = font.render('Game Over', True, (255, 255, 255))
   restart_button = font.render('R - Restart', True, (255, 255, 255))
   quit_button = font.render('Q - Quit', True, (255, 255, 255))
   screen.blit(title, (screen_width/2 - title.get_width()/2, screen_height/2 - title.get_height()/3))
   screen.blit(restart_button, (screen_width/2 - restart_button.get_width()/2, screen_height/1.9 + restart_button.get_height()))
   screen.blit(quit_button, (screen_width/2 - quit_button.get_width()/2, screen_height/2 + quit_button.get_height()/2))
   pygame.display.update()

while True:
   for event in pygame.event.get():
       if event.type == pygame.QUIT:
           pygame.quit()
           quit()
   if game_state == "start_menu":
       draw_start_menu()
       keys = pygame.key.get_pressed()
       if keys[pygame.K_SPACE]:
           player_x = 200
           player_y = 400
           game_state = "game"
           game_over = False
   elif game_state == "game_over":
       draw_game_over_screen()
       keys = pygame.key.get_pressed()
       if keys[pygame.K_r]:
           game_state = "start_menu"
       if keys[pygame.K_q]:
           pygame.quit()
           quit()

   elif game_state == "game":
       keys = pygame.key.get_pressed()
       if keys[pygame.K_LEFT]:
           player_x -= 5
       if keys[pygame.K_RIGHT]:
           player_x += 5

       if player_x + player_width > obstacle_x and player_x < obstacle_x + obstacle_width and player_y + player_height > obstacle_y and player_y < obstacle_y + obstacle_height:
           game_over = True
           game_state = "game_over"

       screen.fill((0, 0, 0))
       pygame.draw.rect(screen, (255, 0, 0), (obstacle_x, obstacle_y, obstacle_width, obstacle_height))
       pygame.draw.rect(screen, (0, 255, 0), (player_x, player_y, player_width, player_height))
       pygame.display.update()

   elif game_over:
       game_state = "game_over"
       game_over = False

代碼首先導入pygame模塊並對其進行初始化。然後它創建一個遊戲窗口並聲明必要的遊戲變量,包括玩家和障礙物的位置、尺寸和遊戲狀態。

該代碼定義了兩個函數,draw_start_menu()draw_game_over_screen(),用於繪製開始菜單和遊戲結束屏幕。這些函數使用 PyGame 函數在屏幕上繪製文本和按鈕。

主遊戲循環從處理事件和檢查遊戲狀態開始。如果遊戲狀態為start_menu,則開始菜單會繪製到屏幕上。如果遊戲狀態為game_over,則遊戲結束畫面會繪製到屏幕上。如果遊戲狀態為其他狀態,遊戲會更新並將玩家和障礙物繪製到屏幕上。

遊戲通過處理按鍵和檢查玩家與障礙物之間的碰撞來更新。如果發生碰撞,遊戲會將 game_over標誌設置為True並將游戲狀態設置為game_over

遊戲更新後,玩家和障礙物被繪製到屏幕上。最後,代碼檢查是否設置了game_over標誌,如果是,則重置標誌並將游戲狀態設置為game_over

這個過程不斷重複,直到遊戲窗口關閉。

通過具有視覺吸引力的 UI 提高用戶參與度

使用設計良好的用戶界面 (UI) 可以大大提高 PyGame 遊戲中的用戶參與度。清晰易讀的字體、視覺上吸引人的圖形、輕鬆的導航和用戶反饋都是設計 UI 時需要考慮的重要元素。通過實施這些元素,您可以創建有助於保持玩家興趣並沉浸在遊戲中的 UI。

請記住測試您的 UI 並收集玩家的反饋,以確保它能夠有效地提高參與度。總的來說,花時間創建強大的 UI 可以極大地提高玩家的遊戲體驗和樂趣。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *