
いよいよPythonの最後のお勉強です。
今回もChatGPTさんに教えてもらったよ。
ちょこちょこ補足していくので、よろしくお願いします。
第5回:当たり判定をつけて障害物をよけるゲームを作ろう!
🐍後輩:「先輩!キャラが動くようになったんですけど、ぶつかる要素がないと物足りないですね…。」
👨💻先輩:「よし、じゃあ今日は障害物を追加して、ぶつからないように避けるゲームを作ろう!」
🎯 障害物を追加してみよう!
🐍「まず、障害物ってどうやって作るんですか?」
👨💻「キャラクターと同じように、四角いブロックを描画して、それを動かせばいい。」
🐍「なるほど!じゃあ試してみます!」
import pygame
import random
# Pygameを初期化
pygame.init()
# 画面サイズ
WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("障害物をよけよう!")
# キャラクター画像を読み込む
character = pygame.image.load("character.png")
character = pygame.transform.scale(character, (50, 50))
# キャラクターの初期位置
x, y = WIDTH // 2, HEIGHT - 100
speed = 5 # 移動速度
# 障害物
obstacle_width = 50
obstacle_height = 50
obstacle_x = random.randint(0, WIDTH - obstacle_width)
obstacle_y = 0
obstacle_speed = 5 # 障害物の落下速度
# ゲームループ
running = True
while running:
screen.fill((255, 255, 255)) # 背景を白にする
# 障害物を描画
pygame.draw.rect(screen, (255, 0, 0), (obstacle_x, obstacle_y, obstacle_width, obstacle_height))
# キャラクターを描画
screen.blit(character, (x, y))
pygame.display.update() # 画面更新
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# キー入力をチェック
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and x > 0:
x -= speed
if keys[pygame.K_RIGHT] and x < WIDTH - 50:
x += speed
# 障害物を下に移動
obstacle_y += obstacle_speed
# 障害物が画面の下に到達したら再配置
if obstacle_y > HEIGHT:
obstacle_y = 0
obstacle_x = random.randint(0, WIDTH - obstacle_width)
pygame.quit()
🐍「おぉ!赤い障害物が上から落ちてくる!」
👨💻「キャラを動かして、ぶつからないようによけてみろ!」
🐍「うわっ!避けられた!」

上の設定だと、障害物のスピードが。。。
2くらいが程々かもね。
💥 当たり判定をつけよう!
🐍「でも、ぶつかっても何も起こらないですね。」
👨💻「そうだな。じゃあ、キャラクターと障害物がぶつかったらゲームオーバーにしよう!」
🐍「どうやるんですか?」
👨💻「pygame.Rect
を使って、キャラクターと障害物の衝突判定をするんだ。」
🐍「やってみます!」
import pygame
import random
# Pygameを初期化
pygame.init()
# 画面サイズ
WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("障害物をよけよう!")
# キャラクター画像を読み込む
character = pygame.image.load("character.png")
character = pygame.transform.scale(character, (50, 50))
# キャラクターの初期位置
x, y = WIDTH // 2, HEIGHT - 100
speed = 5 # 移動速度
# 障害物
obstacle_width = 50
obstacle_height = 50
obstacle_x = random.randint(0, WIDTH - obstacle_width)
obstacle_y = 0
obstacle_speed = 5 # 障害物の落下速度
# ゲームループ
running = True
while running:
screen.fill((255, 255, 255)) # 背景を白にする
# 障害物を描画
pygame.draw.rect(screen, (255, 0, 0), (obstacle_x, obstacle_y, obstacle_width, obstacle_height))
# キャラクターを描画
screen.blit(character, (x, y))
pygame.display.update() # 画面更新
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# キー入力をチェック
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and x > 0:
x -= speed
if keys[pygame.K_RIGHT] and x < WIDTH - 50:
x += speed
# 障害物を下に移動
obstacle_y += obstacle_speed
# 当たり判定
character_rect = pygame.Rect(x, y, 50, 50)
obstacle_rect = pygame.Rect(obstacle_x, obstacle_y, obstacle_width, obstacle_height)
if character_rect.colliderect(obstacle_rect): # 衝突判定
print("ゲームオーバー!")
running = False
# 障害物が画面の下に到達したら再配置
if obstacle_y > HEIGHT:
obstacle_y = 0
obstacle_x = random.randint(0, WIDTH - obstacle_width)
pygame.quit()
🐍「やった!ぶつかるとゲームオーバーになりました!」
👨💻「そうそう。これで単純な障害物回避ゲームが完成だ!」
🐍「すごい…!Pythonでこんなゲームが作れるんですね!」

コードにもコメントあるので、解りやすいかな。
まあ、相変わらずキャラの感度が良すぎるが。。。
🎉 まとめ:Pythonゲーム作りの流れ
🐍「Pythonでゲームを作る流れがわかってきました!」
👨💻「いい感じだな! 最後に、今回学んだことをまとめよう。」
🔹 Pythonゲーム開発の流れ
- Pygameの基本セットアップ
- 画面を表示する
- イベントを処理する(キー入力やウィンドウを閉じる動作)
- キャラクターを表示&動かす
pygame.image.load()
で画像を読み込むpygame.key.get_pressed()
でキー入力を取得し、キャラを動かす
- 障害物を追加
pygame.draw.rect()
で四角形を描画random.randint()
でランダムな位置から出現させる
- 当たり判定をつける
pygame.Rect()
を使い、colliderect()
で衝突判定をする
🐍「Pythonでゲームを作るのって思ったより楽しいですね!」
👨💻「Pythonはシンプルなコードでゲームを作れるから、初めてのプログラミングにもぴったりだ。」
🐍「これからもゲーム作りに挑戦したいです!」
👨💻「その意気だ! どんどん挑戦して、自分だけのオリジナルゲームを作ってみろ!」
🐍「先輩、ありがとうございました!」
👨💻「こちらこそ、一緒に作れて楽しかったぞ!」
🎮 おわりに:次は自分のゲームを作ってみよう!
🐍「よし、次はもっと面白いゲームを作るぞー!」
👨💻「応援してるぞ! Pythonゲーム開発、楽しめよ!」
🎉 お疲れさまでした! 🎉