はじめに
このプロジェクトでは、Python と Pygame ライブラリを使ってヘビゲームを作成するプロセスを案内します。このゲームには、ゲームウィンドウ、ヘビ、パワーアップ、そしてスコアがあります。ヘビはゲームウィンドウの中を移動し、パワーアップを食べます。ヘビがパワーアップを食べると、ヘビの長さが 1 増えます。スコアは画面に表示されます。
👀 プレビュー

🎯 タスク
このプロジェクトでは、以下のことを学びます。
- Pygame を使ってゲームウィンドウを作成する方法
- ユーザー入力を処理してヘビの動きを制御する方法
- ヘビの位置を作成して更新する方法
- ヘビとパワーアップを画面に描画する方法
- ヘビとパワーアップの間の衝突を検出する方法
- スコアを追跡する方法
- スコアを画面に表示する方法
🏆 成果
このプロジェクトを完了すると、以下のことができるようになります。
- Pygame を使ってグラフィカルなゲームウィンドウを作成する
- ユーザー入力を処理してゲームを制御する
- ゲームオブジェクトを作成して更新する
- ゲーム内の衝突を検出する
- ゲームスコアを表示して更新する
プロジェクトファイルを作成する
snake_game.py という名前の新しいファイルを作成し、コードエディタで開きます。
cd ~/project
touch snake_game.py
sudo pip install pygame
必要なモジュールをインポートする
snake_game.py ファイルで、pygame と random モジュールをインポートします。
import pygame
import random
Pygame を初期化する
モジュールをインポートした後、Pygame を初期化します。
pygame.init()
ゲームウィンドウを設定する
ゲームウィンドウの幅、高さ、および 1 秒当たりのフレーム数(FPS)を定義します。
WIDTH = 800
HEIGHT = 600
FPS = 10
色を定義する
ゲームで使用する色を定義します。
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
BLUE = (0, 0, 255)
YELLOW = (255, 255, 0)
BACKGROUND_COLOR = (50, 50, 50)
ゲームウィンドウをセットアップする
定義された幅と高さでゲームウィンドウを設定します。
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Snake Game")
clock = pygame.time.Clock()
上記のコードでは、pygame.display.set_mode() は指定された幅と高さでディスプレイを初期化するために使用されます。pygame.display.set_caption() はゲームウィンドウのタイトルを設定するために使用されます。pygame.time.Clock() はゲーム内の時間を追跡するために使用されます。
ヘビをセットアップする
ヘビのブロックサイズと速度を定義します。
snake_block_size = 20
snake_speed = 5
ブロックサイズを 20、速度を 5 に設定します。これは、ヘビが 1 回に 5 ピクセル移動することを意味します。
ゲーム変数を設定する
スコアを表示するためのフォントスタイルとフォントサイズを定義します。
font_style = pygame.font.SysFont(None, 50)
score_font = pygame.font.SysFont(None, 35)
パワーアップを設定する
パワーアップのブロックサイズを定義します。
powerup_block_size = 20
関数を定義する
以下の関数を定義します。
draw_snake(snake_block_size, snake_list)
この関数は、画面上にヘビを描画します。
def draw_snake(snake_block_size, snake_list):
for x in snake_list:
pygame.draw.rect(
screen, GREEN, [x[0], x[1], snake_block_size, snake_block_size]
)
上記のコードでは、pygame.draw.rect() は画面上に矩形を描画するために使用されます。最初のパラメータは画面、2 番目のパラメータは色、3 番目のパラメータは矩形の位置とサイズです。
draw_powerup(powerup_x, powerup_y)
この関数は、画面上にパワーアップを描画します。
def draw_powerup(powerup_x, powerup_y):
pygame.draw.rect(
screen, RED, [powerup_x, powerup_y, powerup_block_size, powerup_block_size]
)
上記のコードでは、pygame.draw.rect() は画面上に矩形を描画するために使用されます。最初のパラメータは画面、2 番目のパラメータは色、3 番目のパラメータは矩形の位置とサイズです。
display_score(score)
この関数は、画面上にスコアを表示します。
def display_score(score):
value = score_font.render("Score: " + str(score), True, WHITE)
screen.blit(value, [10, 10])
上記のコードでは、score_font.render() は画面上にスコアをレンダリングするために使用されます。最初のパラメータは表示するテキスト、2 番目のパラメータはアンチエイリアシング、3 番目のパラメータはテキストの色です。screen.blit() は画面上にテキストを描画するために使用されます。最初のパラメータは表示するテキスト、2 番目のパラメータはテキストの位置です。
game_loop()
この関数は、メインゲームループを含んでいます。
def game_loop():
## Game loop code goes here
ゲームループコードを完成させる
game_loop() 関数を、while ループ内にゲームロジックを追加することで完成させます。
def game_loop():
game_over = False
game_close = False
## ヘビの初期位置を設定する
x1 = WIDTH / 2
y1 = HEIGHT / 2
x1_change = 0
y1_change = 0
## ヘビの体を設定する
snake_list = []
snake_length = 1
## パワーアップを設定する
powerup_x = round(random.randrange(0, WIDTH - powerup_block_size) / 20) * 20
powerup_y = round(random.randrange(0, HEIGHT - powerup_block_size) / 20) * 20
## ゲームループを設定する
while not game_over:
while game_close:
screen.fill(BACKGROUND_COLOR)
message = font_style.render("Press SPACE to play again", True, YELLOW)
screen.blit(message, [WIDTH / 2 - 200, HEIGHT / 2 - 50])
pygame.display.flip()
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_over = True
game_close = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
game_loop()
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_over = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
x1_change = -snake_block_size
y1_change = 0
elif event.key == pygame.K_RIGHT:
x1_change = snake_block_size
y1_change = 0
elif event.key == pygame.K_UP:
y1_change = -snake_block_size
x1_change = 0
elif event.key == pygame.K_DOWN:
y1_change = snake_block_size
x1_change = 0
if x1 >= WIDTH or x1 < 0 or y1 >= HEIGHT or y1 < 0:
game_close = True
x1 += x1_change
y1 += y1_change
screen.fill(BACKGROUND_COLOR)
pygame.draw.rect(
screen, BLUE, [powerup_x, powerup_y, powerup_block_size, powerup_block_size]
)
snake_head = []
snake_head.append(x1)
snake_head.append(y1)
snake_list.append(snake_head)
if len(snake_list) > snake_length:
del snake_list[0]
for x in snake_list[:-1]:
if x == snake_head:
game_close = True
draw_snake(snake_block_size, snake_list)
display_score(snake_length - 1)
pygame.display.flip()
if x1 == powerup_x and y1 == powerup_y:
powerup_x = round(random.randrange(0, WIDTH - powerup_block_size) / 20) * 20
powerup_y = (
round(random.randrange(0, HEIGHT - powerup_block_size) / 20) * 20
)
snake_length += 1
clock.tick(snake_speed)
pygame.quit()
上記のコードでは、pygame.QUIT はゲームを終了するために使用されます。pygame.KEYDOWN はキーが押されたかどうかを確認するために使用されます。pygame.K_LEFT、pygame.K_RIGHT、pygame.K_UP、および pygame.K_DOWN はそれぞれ左矢印キー、右矢印キー、上矢印キー、および下矢印キーが押されたかどうかを確認するために使用されます。pygame.draw.rect() は画面上に矩形を描画するために使用されます。最初のパラメータは画面、2 番目のパラメータは色、3 番目のパラメータは矩形の位置とサイズです。pygame.display.flip() は画面を更新するために使用されます。pygame.time.Clock() はゲーム内の時間を追跡するために使用されます。pygame.time.Clock.tick() はゲームの FPS を設定するために使用されます。
ゲームを実行する
ゲームを実行するために、ファイルの末尾に以下の内容を追加します。
game_loop()
pygame.quit()
最後に、デスクトップに切り替えて、以下のコマンドを使用してプロジェクトを実行します。
python snake_game.py

まとめ
おめでとうございます!Python と Pygame ライブラリを使って、成功裏にヘビゲームを作成しました。このプロジェクトでは、ゲームウィンドウを設定し、色を定義し、ヘビとパワーアップを描画し、スコアを表示し、ゲームロジックを実装する方法を学びました。これで、ゲームを実行して楽しむことができます。



