Pythonでヘビゲームを作る方法
公開: 2022-02-02あなたがヘビゲームを楽しんでいる人なら、この記事が面白いと思うでしょう。
この記事では、Pythonの初心者でも簡単に開発できる簡単なスネークゲームを考案する方法を説明します。
このゲームを作成する方法はいくつかありますが、そのうちの1つには、ゲームの作成に使用するPythonライブラリであるPythonのPyGameライブラリの使用が含まれます。
もう1つの方法は、タートルライブラリを使用することです。 このモジュールにはPythonがプリインストールされており、ユーザーが図形や画像を作成するための仮想キャンバスを提供します。
したがって、この記事では、タートルライブラリを使用して、特に初心者のPython開発者にとって初心者に優しいシンプルなスネークゲームを実装します。
このモジュールに加えて、他の2つのモジュールも使用します。
- 時間モジュール–この方法では、前回から経過した秒数を追跡できます。
- ランダムモジュール–Pythonでランダムに数値を生成します。
使用する必要のあるその他の基本的なツールには、選択したテキストエディタが含まれます。 この記事ではVSCodeを使用します。 もちろん、Python 3をまだインストールしていない場合は、マシンにインストールする必要があります。 Geekflareコンパイラを使用することもできます。
これは楽しいはずです!
スネークゲームのしくみ
このゲームの最終的な目標は、画面に表示される食べ物を集めるためにヘビを制御することによって、プレーヤーが最高のスコアを達成することです。
プレーヤーは、ヘビが向かっている方向を基準にした4つの方向キーを使用してヘビを制御します。 ヘビがブロックまたはそれ自体に当たった場合、プレーヤーはゲームに負けます。
このゲームを実装するために実行する次の手順。
- プレインストールされたモジュール(カメ、時間、ランダム)をプログラムにインポートします。
- 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()メソッドを使用してこれを実装します。 hiddenturtle()は、このテキストが書き込まれているヘッダーセクションの画面からタートルアイコンを非表示にします。
コードの最後に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ファイルを返すと、タートル画面が次のように表示されます。
結論
この記事で見たように、タートルライブラリを使用することは、ヘビゲームを作成するための楽しくて簡単な方法の1つです。 または、PyGameライブラリを使用して同じものを実装することもできます。 ここでPyGameチュートリアルをチェックして、ゲームを別の方法で実装する方法を確認できます。
Pythonで数を推測するゲームや、PythonでJSONデータを取得する方法を試すこともできます。
コーディングをお楽しみください!