和風網標誌

使用 Python 創建您的第一個遊戲:貪吃蛇遊戲

日期:

Python 既有趣又易於使用。擁有大量可用的庫, 蟒蛇 透過簡化遊戲和應用程式的創建,讓我們的生活變得更輕鬆。在本文中,我們將創造一個我們許多人可能在生活中某個時刻玩過的經典遊戲——貪吃蛇遊戲。如果您以前沒有體驗過這款遊戲,現在您有機會探索和製作自己的版本,而無需在系統上安裝繁重的庫。要開始製作這款懷舊的貪吃蛇遊戲,您所需要的只是對 Python 的基本了解和像 repl.it 這樣的線上編碼編輯器。

貪吃蛇遊戲是一款永恆的街機經典遊戲,玩家控制一條蛇,它在吃食物時會變長。在此實作中,讓我們分解程式碼以了解遊戲的結構以及 Turtle 庫如何用於圖形和使用者互動。

目錄

使用 Turtle Graphics 進行簡單的遊戲開發

海龜圖形 Python 中的函式庫 提供了一種有趣的互動式方式來創建形狀、在螢幕上繪圖以及響應用戶輸入。它通常用於教育目的,透過視覺回饋教授程式設計概念。該程式碼利用 Turtle 創建遊戲元素,例如蛇、食物和分數顯示。

線上編碼編輯器:Repl.it

名為 Repl.it 的 Web 編碼平台可讓您直接在 Web 瀏覽器中開發、執行程式碼並進行協作。它支援許多不同的程式語言,除了程式碼共享、版本控制和團隊合作等功能外,還具有內建的編譯器和解釋器。開發人員廣泛使用它來學習、快速原型設計和程式碼共享,因為它使用簡單且無需設定。

算法

讓我們開始用 python 建立我們的第一個遊戲。為此,我們需要遵循以下某些步驟:

建立 Repl 文件

第一步:安裝必要的程式庫

這標誌著開發貪吃蛇遊戲的第一步。海龜、隨機和時間就是其中之一。

  • 龜: 我們需要這個庫來創建遊戲中的圖形。我們能夠操縱螢幕上食物和蛇的運動並繪製它們。
  • 隨機: 為了在螢幕上為食物創建隨機位置,我們利用隨機庫。這確保了每次吃食物時,它都會出現在不同的地方。
  • 時間: 由於時間庫的原因,蛇的每次移動之間都會有輕微的延遲。這使得遊戲的操作更加簡單,玩家也更加享受。
import turtle
import time
import random

Step2:設定遊戲環境。

這包括確定螢幕尺寸、添加藍色背景以及添加少量延遲以確保流暢的遊戲體驗。我們還設定了 high_score 等變數來保留獲得的最高分數,score 來監控玩家的分數,以及分段來追蹤蛇的身體。

# Initialize the screen
sc = turtle.Screen()
sc.bgcolor("blue")
sc.setup(height=1000, width=1000)
delay = 0.1

# Initialize variables
segments = []
score = 0
high_score = 0
產量

第三步:創建蛇

方形烏龜象徵蛇。我們將筆放在螢幕中央 (goto(0, 100)),將其顏色設為黑色,然後抬起它以避免繪製線條。最初設定為“停止”,蛇的方向保持靜止,直到玩家開始移動它。

# Create the snake
snake = turtle.Turtle()
snake.shape("square")
snake.color("black")
snake.penup()
snake.goto(0, 100)
snake.direction = "stop"
創造蛇

第四步:運動功能

我們根據蛇當時的方向定義其運動函數(move())。這些功能控制蛇向上、向下、向左、向右移動的能力。當要求時,他們將蛇的頭部向適當的方向移動 20 個單位。

# Functions to move the snake
def move():
    if snake.direction == "up":
        y = snake.ycor()
        snake.sety(y + 20)
    if snake.direction == "down":
        y = snake.ycor()
        snake.sety(y - 20)
    if snake.direction == "left":
        x = snake.xcor()
        snake.setx(x - 20)
    if snake.direction == "right":
        x = snake.xcor()
        snake.setx(x + 20)

第五步:控制蛇

使用 sc.listen() 和 sc.onkey(),我們配置關鍵監聽器來控制蛇。相關例程(go_up()、go_down()、go_left()、go_right())回應 w、s、a 或 d 鍵盤上的按鍵來改變蛇的方向。

# Functions to link with the keys
def go_up():
    snake.direction = "up"

def go_down():
    snake.direction = "down"

def go_left():
    snake.direction = "left"

def go_right():
    snake.direction = "right"

# Listen for key inputs
sc.listen()
sc.onkey(go_up, "w")
sc.onkey(go_down, "s")
sc.onkey(go_left, "a")
sc.onkey(go_right, "d")

第六步:製作食物

食物以紅色的圓形烏龜物件表示。最初放置在座標 (100, 100) 處,作為蛇吃的目標。當蛇與食物碰撞時,它會「吃掉」食物,並且新的食物會出現在隨機位置。

# Create the food
food = turtle.Turtle()
food.shape("circle")
food.color("red")
food.penup()
food.goto(100, 100)

創造食物

Step7:顯示分數

海龜物件(筆)顯示玩家的分數和獲得的最高分數。每次蛇吃掉食物時,這些資訊都會更新。

# Create the score display
pen = turtle.Turtle()
pen.penup()
pen.goto(0, 100)
pen.hideturtle()
pen.write("Score: 0  High Score: 0", align="center", font=("Arial", 30, "normal")
顯示分數

Step8:主遊戲循環

貪吃蛇遊戲的核心是主遊戲循環。它管理用戶輸入、更新螢幕、移動蛇、尋找碰撞以及調節遊戲的進行方式。讓我們來更詳細地考察一下主循環各部分的具體功能:

while True:
    sc.update()  # Update the screen
    move()  # Move the snake
    time.sleep(delay)  # Introduce a slight delay for smooth gameplay
  • sc.update() :更新畫面以反映遊戲中所做的任何變更。如果沒有這個,螢幕將不會刷新,玩家也不會看到蛇的移動或分數更新。
  • move():函數根據蛇的當前方向控制蛇的運動。它將蛇的頭部按照玩家輸入指定的方向移動 20 個單位。蛇不斷地朝著它上次指示的方向移動,直到玩家改變方向。
  • time.sleep(delay):在蛇的每次運動之間引入輕微的延遲。這 delay 變量設置為 0.1 在代碼的開頭。這個延遲的目的是為了控制遊戲的速度。如果沒有它,蛇會移動得太快,玩家無法做出反應,從而使遊戲變得困難。

吃食物和養蛇

    if snake.distance(food) < 20:
        x = random.randint(-200, 200)
        y = random.randint(-200, 200)
        food.penup()
        food.goto(x, y)
        food.pendown()

        # Increase the length of the snake
        new_segment = turtle.Turtle()
        new_segment.shape("square")
        new_segment.color("grey")
        new_segment.penup()
        segments.append(new_segment)
        score += 1

        # Update score and high score
        if score > high_score:
            high_score = score
        pen.clear()
        pen.write("Score: {}  High Score: {}".format(score, high_score), align="center", font=("Arial", 30, "normal"))

吃食物

  • 當蛇的頭(snake)在食物 20 個單位的距離內(food),這意味著蛇已經「吃掉」了食物。
  • 然後使用以下命令將食物的位置重設為螢幕上新的隨機位置 random.randint().
  • 這種動作會產生食物每次被吃掉時「重新出現」在不同位置的錯覺。

蛇體的生長

  • 當蛇吃掉食物時,代碼會在蛇的身體中添加一個新的部分以使其生長。
  • 一個新的海龜物件(new_segment)被創建,它成為 segments 名單。
  • 此清單記錄了構成蛇身體的所有部位。
  • 玩家的分數增加(score += 1)每次蛇吃食物時。

分數更新

  • 吃完食物並更新分數後,分數顯示將使用 pen 目的。
  • pen.clear() 功能清除先前的分數顯示。
  • 然後,使用以下命令將更新後的分數和高分寫入螢幕 pen.write().

移動蛇的身體

    for i in range(len(segments) - 1, 0, -1):
        x = segments[i - 1].xcor()
        y = segments[i - 1].ycor()
        segments[i].goto(x, y)

    # Move the first segment to follow the head
    if len(segments) > 0:
        x = snake.xcor()
        y = snake.ycor()
        segments[0].goto(x, y)
  • 這一段程式碼負責讓蛇的身體跟隨它的頭。
  • 它迭代通過 segments 列表,從最後一段開始(len(segments) - 1)向下到第二段(0),將每個段移動到其前面的段的位置。
  • 這會產生蛇的身體隨著頭部移動的效果。

更新第一段(頭部)

  • 移動所有身體部位後,第一部分(頭部)的位置將更新以符合蛇的當前位置(snake).
  • 這確保了蛇的頭部在移動時繼續引導身體。

尾註

此程式碼提供了使用 Turtle 圖形庫的貪吃蛇遊戲的基本結構。遊戲涉及控制蛇吃食物並變長,同時避免與牆壁和自己的尾巴碰撞。這是一個很棒的初學者項目,適合學習遊戲開發概念、基本 Python 程式設計以及處理使用者輸入和圖形。您可以隨意自訂和擴展此程式碼,以添加碰撞偵測、增加難度或添加關卡等功能,讓您的貪吃蛇遊戲更加精彩!

如果您想了解有關 python 的更多信息,請註冊我們的 免費的Python課程.

也請閱讀我們更多與 python 相關的文章:

現貨圖片

最新情報

現貨圖片