如何用 Python 製作蛇遊戲

已發表: 2022-02-02

如果你是一個喜歡玩蛇遊戲的人,我相信你會覺得這篇文章很有趣。

在本文中,我將教你如何設計一個簡單的蛇遊戲,即使是 Python 初學者也能輕鬆開發。

有很多方法可以創建這個遊戲,其中一種包括使用 Python 的 PyGame 庫,這是我們用來創建遊戲的 Python 庫。

另一種方法是使用海龜庫。 該模塊預裝了 Python,它為用戶提供了一個虛擬畫布來創建形狀和圖片。

因此,本文將使用 turtle 庫來實現我們的簡單蛇遊戲,該遊戲對初學者非常友好,尤其適用於 Python 開發新手。

除了這個模塊,我們還將使用另外兩個模塊,即;

  • 時間模塊——此方法將允許我們跟踪自上一次以來經過的秒數。
  • Random 模塊——它在 Python 中隨機生成數字。

您需要使用的其他基本工具包括您選擇的文本編輯器。 我將在本文中使用 VSCode。 當然,如果您還沒有 Python 3,則需要在您的機器上安裝它。 您也可以使用 Geekflare 編譯器。

這應該是有趣的!

蛇遊戲如何運作

這個遊戲的最終目標是讓玩家通過控制蛇來收集屏幕顯示的食物來獲得最高分。

玩家使用與蛇移動方向相關的四個方向鍵來控制蛇。 如果蛇撞到一個方塊或它自己,玩家就輸了。

我們將按照以下步驟來實現這個遊戲。

  • 將預安裝的模塊(turtle、time 和 random)導入我們的程序。
  • 使用 turtle 模塊創建遊戲的屏幕顯示。
  • 設置蛇在屏幕周圍移動方向的鍵。
  • 遊戲實現。

創建一個snakegame.py 文件,我們將在其中添加實現代碼。

導入模塊

這段代碼將導入默認預裝在 Python 中的海龜、時間和隨機模塊。 此外,我們將為玩家的初始分數、玩家將獲得的最高分數以及玩家每一步的延遲時間設置默認值。 這裡使用時間模塊來計算延遲時間。

將以下代碼添加到您的 snakegame.py 文件中。

 import turtle import random import time player_score = 0 highest_score = 0 delay_time = 0.1

創建遊戲的屏幕顯示

我們在此處導入的海龜模塊將允許我們創建一個虛擬畫布,該畫布將成為遊戲的窗口屏幕。 從這裡,我們可以創建蛇的身體和蛇將收集的食物。 我們的屏幕還將顯示玩家的跟踪得分。

將此代碼添加到 Python 文件中。

 # window screen created wind = turtle.Screen() wind.title("Snake Maze") wind.bgcolor("red") # The screen size wind.setup(width=600, height=600) # creating the snake snake = turtle.Turtle() snake.shape("square") snake.color("black") snake.penup() snake.goto(0, 0) snake.direction = "Stop" # creating the food snake_food = turtle.Turtle() shapes = random.choice('triangle','circle') snake_food.shape(shapes) snake_food.color("blue") snake_food.speed(0) snake_food.penup() snake_food.goto(0, 100) pen = turtle.Turtle() pen.speed(0) pen.shape('square') pen.color('white') pen.penup() pen.hideturtle() pen.goto(0, 250) pen.write("Your_score: 0 Highest_Score : 0", align="center", font=("Arial", 24, "normal")) turtle.mainloop()

上面的代碼片段從初始化海龜屏幕開始,並將標題和背景顏色傳遞給屏幕。 定義屏幕的窗口大小後,我們在虛擬畫布上繪製蛇的形狀。

penup() 方法只是拿起海龜的筆,這樣海龜移動時就不會畫線。 goto(x,y) 方法包含將海龜移動到絕對位置的坐標位置。

然後我們創造蛇收集的食物。 我們希望在每次蛇收集食物時顯示玩家的分數以及玩家在遊戲中達到的最高分數。 因此,我們使用 pen.write() 方法來實現這一點。 hideturtle() 將海龜圖標從屏幕上的標題部分隱藏起來。

在代碼末尾添加 turtle.mainloop() 很重要,這將延長屏幕顯示時間,讓用戶可以在屏幕上執行某些操作。

運行該文件,您應該有以下輸出:

蛇和食物顯示玩家的初始分數和最高分數。

設置蛇的方向鍵

在這裡,我們將設置特定的鍵來引導蛇在屏幕上的移動方向。 我們將使用“L”表示左,“R”表示右,“U”表示上,“D”表示下。 我們將使用我們將在蛇上調用的海龜的方向函數來實現這些方向。

將以下代碼段添加到您的代碼中。

 # Assigning directions def moveleft(): if snake.direction != "right": snake.direction = "left" def moveright(): if snake.direction != "left": snake.direction = "right" def moveup(): if snake.direction != "down": snake.direction = "up" def movedown(): if snake.direction != "up": snake.direction = "down" def move(): if snake.direction == "up": coord_y = snake.ycor() snake.sety(coord_y+20) if snake.direction == "down": coord_y = snake.ycor() snake.sety(coord_y-20) if snake.direction == "right": coord_x = snake.xcor() snake.setx(coord_x+20) if snake.direction == "left": coord_x = snake.xcor() snake.setx(coord_x-20) wind.listen() wind.onkeypress(moveleft, 'L') wind.onkeypress(moveright, 'R') wind.onkeypress(moveup, 'U') wind.onkeypress(movedown, 'D')

上面的 move() 函數設置蛇在精確坐標值內定義位置的移動。

listen() 函數是一個事件監聽器,當玩家按下按鍵時,它調用將蛇移動到特定方向的方法。

蛇遊戲玩法實現

在奠定了我們蛇遊戲的基本外觀之後,我們將不得不使遊戲實時化。

這將涉及以下內容:

  • 每次收集食物時,蛇的長度都會增加,最好使用不同的顏色。
  • 每次蛇收集食物時增加玩家的分數並跟踪最高分數。
  • 玩家可以控制蛇與牆壁或自己的身體發生碰撞。
  • 當蛇碰撞時,遊戲重新開始。
  • 當遊戲重新開始時,玩家的分數會重置為零,而屏幕會保留玩家的最高分數。

將此代碼的其餘部分添加到您的 python 文件中。

 segments = [] #Implementing the gameplay while True: wind.update() if snake.xcor() > 290 or snake.xcor() < -290 or snake.ycor() > 290 or snake.ycor() < -290: time.sleep(1) snake.goto(0, 0) snake.direction = "Stop" snake.shape("square") snake.color("green") for segment in segments: segment.goto(1000, 1000) segments.clear() player_score = 0 delay_time = 0.1 pen.clear() pen.write("Player's_score: {} Highest_score: {}".format(player_score, highest_score), align="center", font=("Arial", 24, "normal")) if snake.distance(snake_food) < 20: coord_x = random.randint(-270, 270) coord_y = random.randint(-270, 270) snake_food.goto(coord_x, coord_y) # Adding segment added_segment = turtle.Turtle() added_segment.speed(0) added_segment.shape("square") added_segment.color("white") added_segment.penup() segments.append(added_segment) delay_time -= 0.001 player_score += 5 if player_score > highest_score: highest_score = player_score pen.clear() pen.write("Player's_score: {} Highest_score: {}".format(player_score, highest_score), align="center", font=("Arial", 24, "normal")) # checking for collisions for i in range(len(segments)-1, 0, -1): coord_x = segments[i-1].xcor() coord_y = segments[i-1].ycor() segments[i].goto(coord_x, coord_y) if len(segments) > 0: coord_x = snake.xcor() coord_y = snake.ycor() segments[0].goto(coord_x, coord_y) move() for segment in segments: if segment.distance(snake) < 20: time.sleep(1) snake.goto(0, 0) snake.direction = "stop" snake.color('white') snake.shape('square') for segment in segments: segment.goto(1000, 1000) segment.clear() player_score = 0 delay_time = 0.1 pen.clear() pen.write("Player's_score: {} Highest_score: {}".format(player_score, highest_score), align="center", font=("Arial", 24, "normal")) time.sleep(delay_time) turtle.mainloop()

在上面的代碼片段中,我們為蛇的食物在屏幕內設置了一個隨機位置。 蛇每次收集到這種食物,它的身體部分就會以不同的顏色增加; 白色,在這種情況下,以區分它的生長。

蛇在沒有碰撞的情況下收集食物後,將食物設置在屏幕尺寸270坐標範圍內的隨機位置。 每次蛇收集食物,玩家的分數增加 5。當蛇碰撞時,玩家的分數設置為 0,而屏幕保持最高分數。

現在返回 Python 文件,你應該會看到你的海龜屏幕如下所示:

結論

正如我們在本文中所見,使用海龜庫是創建蛇遊戲的一種有趣且簡單的方法。 或者,您可以使用 PyGame 庫實現相同的功能。 您可以在此處查看 PyGame 教程,了解如何以不同的方式實現遊戲。

您還可以嘗試在 Python 中進行數字猜謎遊戲或如何在 Python 中獲取 JSON 數據。
享受編碼!