Pythonは初心者から上級者まで幅広く使われているプログラミング言語であり、ゲーム開発にも適しています。本記事では、Pythonを使って簡単なゲームを作成する実践プロジェクトを紹介します。ここでは、Pygameライブラリを使用して基本的なゲームを作成する方法を解説します。
1. Pygameのインストール
Pygameは、Pythonでゲームを作成するためのライブラリです。まずは、Pygameをインストールしましょう。
bashコードをコピーするpip install pygame
2. ゲームの基本構造
ゲームウィンドウの作成
Pygameを使って、基本的なゲームウィンドウを作成します。
pythonコードをコピーするimport pygame
import sys
# Pygameの初期化
pygame.init()
# ウィンドウサイズの設定
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))
# ウィンドウタイトルの設定
pygame.display.set_caption("Simple Game")
# メインループ
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# 画面の背景色を設定
screen.fill((0, 0, 0))
# 画面を更新
pygame.display.flip()
このコードを実行すると、黒い背景のゲームウィンドウが表示されます。ウィンドウを閉じると、プログラムが終了します。
3. ゲーム要素の追加
プレイヤーキャラクターの作成
まずは、プレイヤーキャラクターを作成します。ここでは、四角形をプレイヤーキャラクターとして描画します。
pythonコードをコピーする# プレイヤーの設定
player_size = 50
player_color = (0, 128, 255)
player_x = screen_width // 2
player_y = screen_height - player_size * 2
# メインループ内に追加
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# 画面の背景色を設定
screen.fill((0, 0, 0))
# プレイヤーキャラクターの描画
pygame.draw.rect(screen, player_color, (player_x, player_y, player_size, player_size))
# 画面を更新
pygame.display.flip()
プレイヤーキャラクターの移動
次に、キーボード入力を使用してプレイヤーキャラクターを移動させます。
pythonコードをコピーする# 移動速度の設定
player_speed = 5
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# キーの状態を取得
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
player_x -= player_speed
if keys[pygame.K_RIGHT]:
player_x += player_speed
if keys[pygame.K_UP]:
player_y -= player_speed
if keys[pygame.K_DOWN]:
player_y += player_speed
# 画面の背景色を設定
screen.fill((0, 0, 0))
# プレイヤーキャラクターの描画
pygame.draw.rect(screen, player_color, (player_x, player_y, player_size, player_size))
# 画面を更新
pygame.display.flip()
4. 敵キャラクターの追加
次に、敵キャラクターを追加します。ここでは、敵キャラクターをランダムに生成し、画面の上部から下部に向かって移動させます。
pythonコードをコピーするimport random
# 敵の設定
enemy_size = 50
enemy_color = (255, 0, 0)
enemy_speed = 5
enemy_list = []
# 敵を生成する関数
def create_enemy():
enemy_x = random.randint(0, screen_width - enemy_size)
enemy_y = 0
enemy_list.append([enemy_x, enemy_y])
# 敵を移動させる関数
def move_enemies():
for enemy in enemy_list:
enemy[1] += enemy_speed
# メインループ内に追加
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# キーの状態を取得
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
player_x -= player_speed
if keys[pygame.K_RIGHT]:
player_x += player_speed
if keys[pygame.K_UP]:
player_y -= player_speed
if keys[pygame.K_DOWN]:
player_y += player_speed
# 敵を生成
if random.randint(1, 20) == 1:
create_enemy()
# 敵を移動
move_enemies()
# 画面の背景色を設定
screen.fill((0, 0, 0))
# プレイヤーキャラクターの描画
pygame.draw.rect(screen, player_color, (player_x, player_y, player_size, player_size))
# 敵キャラクターの描画
for enemy in enemy_list:
pygame.draw.rect(screen, enemy_color, (enemy[0], enemy[1], enemy_size, enemy_size))
# 画面を更新
pygame.display.flip()
5. ゲームオーバーの判定
プレイヤーキャラクターが敵キャラクターに衝突した場合にゲームオーバーとする判定を追加します。
pythonコードをコピーする# 衝突判定の関数
def check_collision(player_x, player_y, enemy_x, enemy_y):
if (player_x < enemy_x + enemy_size and
player_x + player_size > enemy_x and
player_y < enemy_y + enemy_size and
player_y + player_size > enemy_y):
return True
return False
# メインループ内に追加
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# キーの状態を取得
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
player_x -= player_speed
if keys[pygame.K_RIGHT]:
player_x += player_speed
if keys[pygame.K_UP]:
player_y -= player_speed
if keys[pygame.K_DOWN]:
player_y += player_speed
# 敵を生成
if random.randint(1, 20) == 1:
create_enemy()
# 敵を移動
move_enemies()
# 衝突判定
for enemy in enemy_list:
if check_collision(player_x, player_y, enemy[0], enemy[1]):
pygame.quit()
sys.exit()
# 画面の背景色を設定
screen.fill((0, 0, 0))
# プレイヤーキャラクターの描画
pygame.draw.rect(screen, player_color, (player_x, player_y, player_size, player_size))
# 敵キャラクターの描画
for enemy in enemy_list:
pygame.draw.rect(screen, enemy_color, (enemy[0], enemy[1], enemy_size, enemy_size))
# 画面を更新
pygame.display.flip()
6. ゲームの完成
このコードを実行すると、プレイヤーキャラクターが移動でき、ランダムに生成される敵キャラクターに当たるとゲームオーバーとなる簡単なゲームが完成します。以下に、完成したコードをまとめます。
pythonコードをコピーするimport pygame
import sys
import random
# Pygameの初期化
pygame.init()
# ウィンドウサイズの設定
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))
# ウィンドウタイトルの設定
pygame.display.set_caption("Simple Game")
# プレイヤーの設定
player_size = 50
player_color = (0, 128, 255)
player_x = screen_width // 2
player_y = screen_height - player_size * 2
player_speed = 5
# 敵の設定
enemy_size = 50
enemy_color = (255, 0, 0)
enemy_speed = 5
enemy_list = []
# 敵を生成する関数
def create_enemy():
enemy_x = random.randint(0, screen_width - enemy_size)
enemy_y = 0
enemy_list.append([enemy_x, enemy_y])
# 敵を移動させる関数
def move_enemies():
for enemy in enemy_list:
enemy[1] += enemy_speed
# 衝突判定の関数
def check_collision(player_x, player_y, enemy_x, enemy_y):
if (player_x < enemy_x + enemy_size and
player_x + player_size > enemy_x and
player_y < enemy_y + enemy_size and
player_y + player_size > enemy_y):
return True
return False
# メインループ
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# キーの状態を取得
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
player_x -= player_speed
if keys[pygame.K_RIGHT]:
player_x += player_speed
if keys[pygame.K_UP]:
player_y -= player_speed
if keys[pygame.K_DOWN]:
player_y += player_speed
# 敵を生成
if random.randint(1, 20) == 1:
create_enemy()
# 敵を移動
move_enemies()
# 衝突判定
for enemy in enemy_list:
if check_collision(player_x, player_y, enemy[0], enemy[1]):
pygame.quit()
sys.exit()
# 画面の背景色を設定
screen.fill((0, 0, 0))
# プレイヤーキャラクターの描画
pygame.draw.rect(screen, player_color, (player_x, player_y, player_size, player_size))
# 敵キャラクターの描画
for enemy in enemy_list:
pygame.draw.rect(screen, enemy_color, (enemy[0], enemy[1], enemy_size, enemy_size))
# 画面を更新
pygame.display.flip()
終わりに
このプロジェクトでは、Pygameを使って基本的なゲームを作成しました。プレイヤーキャラクターの移動、敵キャラクターの生成と移動、衝突判定など、ゲーム開発の基本的な要素を学びました。さらに発展させて、スコアの表示やレベルアップ機能を追加するなど、より高度な機能に挑戦してみてください。ゲーム開発は楽しく、創造性を発揮できる分野ですので、ぜひ挑戦を続けてみてください。