🐍

cloude3.5-sonetを使って避けゲーを作ってみる

2024/06/26に公開

はじめに

Anthropicが2024年6月20日にClaude 3.5 Sonnetを発表した
どんな性能なのかゲームを作成してもらい性能を確認する

作成してもらうゲーム

某弾幕天国風の避けゲーをpygameで実装する

チャットしながら作成する

1回目のチャット

質問
あなたはゲーム開発者です
Raspberry Pi環境で動くpythonのゲームを作成してください
ゲームは東方のような避けゲーを作成してください
回答

はい、承知いたしました。ラズベリーパイ環境で動作する、東方風の避けゲーをPythonで作成いたします。以下にシンプルなバージョンのコードを示します。このゲームは、Pygameライブラリを使用しています。

main.py
import pygame
import random
import math

# 初期化
pygame.init()

# 画面設定
WIDTH = 800
HEIGHT = 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("東方風避けゲー")

# 色の定義
WHITE = (255, 255, 255)
RED = (255, 0, 0)

# プレイヤーの設定
player = pygame.Rect(WIDTH // 2, HEIGHT - 50, 20, 20)
player_speed = 5

# 弾の設定
bullets = []
bullet_speed = 3
bullet_spawn_rate = 20

# ゲームループ
clock = pygame.time.Clock()
running = True
score = 0

while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # プレイヤーの移動
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT] and player.left > 0:
        player.x -= player_speed
    if keys[pygame.K_RIGHT] and player.right < WIDTH:
        player.x += player_speed
    if keys[pygame.K_UP] and player.top > 0:
        player.y -= player_speed
    if keys[pygame.K_DOWN] and player.bottom < HEIGHT:
        player.y += player_speed

    # 弾の生成
    if random.randint(1, bullet_spawn_rate) == 1:
        bullet_x = random.randint(0, WIDTH)
        bullets.append([bullet_x, 0])

    # 弾の移動と衝突判定
    for bullet in bullets[:]:
        bullet[1] += bullet_speed
        if bullet[1] > HEIGHT:
            bullets.remove(bullet)
        elif player.collidepoint(bullet[0], bullet[1]):
            running = False

    # 描画
    screen.fill((0, 0, 0))
    pygame.draw.rect(screen, WHITE, player)
    for bullet in bullets:
        pygame.draw.circle(screen, RED, bullet, 5)

    # スコア表示
    score += 1
    font = pygame.font.Font(None, 36)
    score_text = font.render(f"Score: {score}", True, WHITE)
    screen.blit(score_text, (10, 10))

    pygame.display.flip()
    clock.tick(60)

# ゲームオーバー画面
screen.fill((0, 0, 0))
font = pygame.font.Font(None, 72)
game_over_text = font.render("Game Over", True, WHITE)
final_score_text = font.render(f"Final Score: {score}", True, WHITE)
screen.blit(game_over_text, (WIDTH // 2 - 150, HEIGHT // 2 - 50))
screen.blit(final_score_text, (WIDTH // 2 - 150, HEIGHT // 2 + 50))
pygame.display.flip()

# 3秒待機してから終了
pygame.time.wait(3000)

pygame.quit()

このコードは以下の特徴を持っています:

  1. プレイヤーは白い四角形で表現され、矢印キーで移動できます。
  2. 赤い弾が画面上部からランダムに降ってきます。
  3. プレイヤーは弾を避けながら、できるだけ長く生き残ることが目標です。
  4. スコアは生存時間に基づいて増加します。
  5. 弾に当たるとゲームオーバーとなり、最終スコアが表示されます。
    このゲームを実行するには、Pygameライブラリをインストールする必要があります。ラズベリーパイ上で以下のコマンドを実行してインストールできます:
pip3 install pygame

このゲームは基本的な構造を持っていますが、さらに以下のような機能を追加して拡張することができます:

  • 複数の弾の種類や動きのパターン
  • パワーアップアイテム
  • 背景画像や音楽の追加
  • レベルシステムの実装
    これらの拡張機能を追加することで、より本格的な東方風の避けゲーに近づけることができます。

実際に動かしてみる

難易度がぬるすぎる
弾の動きを増やしたい

2回目のチャット

質問
複数の弾の種類や動きのパターンを追加してください
回答

はい、承知いたしました。複数の弾の種類と動きのパターンを追加した改良版のコードを以下に示します。

main.py
import pygame
import random
import math

# 初期化
pygame.init()

# 画面設定
WIDTH = 800
HEIGHT = 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("東方風避けゲー")

# 色の定義
WHITE = (255, 255, 255)
RED = (255, 0, 0)
BLUE = (0, 0, 255)
GREEN = (0, 255, 0)

# プレイヤーの設定
player = pygame.Rect(WIDTH // 2, HEIGHT - 50, 20, 20)
player_speed = 5

# 弾の設定
bullets = []
bullet_spawn_rate = 20

# 弾の種類
class Bullet:
    def __init__(self, x, y, color, speed, pattern):
        self.x = x
        self.y = y
        self.color = color
        self.speed = speed
        self.pattern = pattern
        self.angle = 0

    def move(self):
        if self.pattern == "straight":
            self.y += self.speed
        elif self.pattern == "sine":
            self.y += self.speed
            self.x += math.sin(self.y * 0.05) * 2
        elif self.pattern == "spiral":
            self.angle += 0.1
            self.x += math.cos(self.angle) * self.speed
            self.y += math.sin(self.angle) * self.speed

    def draw(self):
        pygame.draw.circle(screen, self.color, (int(self.x), int(self.y)), 5)

# ゲームループ
clock = pygame.time.Clock()
running = True
score = 0

while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # プレイヤーの移動
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT] and player.left > 0:
        player.x -= player_speed
    if keys[pygame.K_RIGHT] and player.right < WIDTH:
        player.x += player_speed
    if keys[pygame.K_UP] and player.top > 0:
        player.y -= player_speed
    if keys[pygame.K_DOWN] and player.bottom < HEIGHT:
        player.y += player_speed

    # 弾の生成
    if random.randint(1, bullet_spawn_rate) == 1:
        bullet_x = random.randint(0, WIDTH)
        bullet_type = random.choice(["straight", "sine", "spiral"])
        bullet_color = random.choice([RED, BLUE, GREEN])
        bullet_speed = random.uniform(2, 4)
        bullets.append(Bullet(bullet_x, 0, bullet_color, bullet_speed, bullet_type))

    # 弾の移動と衝突判定
    for bullet in bullets[:]:
        bullet.move()
        if bullet.y > HEIGHT or bullet.x < 0 or bullet.x > WIDTH:
            bullets.remove(bullet)
        elif player.collidepoint(bullet.x, bullet.y):
            running = False

    # 描画
    screen.fill((0, 0, 0))
    pygame.draw.rect(screen, WHITE, player)
    for bullet in bullets:
        bullet.draw()

    # スコア表示
    score += 1
    font = pygame.font.Font(None, 36)
    score_text = font.render(f"Score: {score}", True, WHITE)
    screen.blit(score_text, (10, 10))

    pygame.display.flip()
    clock.tick(60)

# ゲームオーバー画面
screen.fill((0, 0, 0))
font = pygame.font.Font(None, 72)
game_over_text = font.render("Game Over", True, WHITE)
final_score_text = font.render(f"Final Score: {score}", True, WHITE)
screen.blit(game_over_text, (WIDTH // 2 - 150, HEIGHT // 2 - 50))
screen.blit(final_score_text, (WIDTH // 2 - 150, HEIGHT // 2 + 50))
pygame.display.flip()

# 3秒待機してから終了
pygame.time.wait(3000)

pygame.quit()

この改良版では以下の変更を加えました:

  1. Bulletクラスを導入し、各弾の動きと描画を管理します。
  2. 3種類の弾のパターンを追加しました:
    • "straight": まっすぐ下に落ちる
    • "sine": サインカーブを描きながら落ちる
    • "spiral": 螺旋を描きながら落ちる
  3. 弾の色をランダムに変更(赤、青、緑)
  4. 弾の速度をランダムに設定
    これらの変更により、ゲームはより多様で挑戦的になります。プレイヤーは異なる動きをする弾を避けなければならず、より東方シリーズに近い体験が得られます。
    さらなる改良のアイデアとしては:
  • ボスキャラクターの追加
  • レベルシステムの実装(時間経過とともに難易度が上がる)
  • プレイヤーの攻撃機能の追加
  • パワーアップアイテムの実装
    これらの機能を追加することで、さらに本格的な弾幕シューティングゲームに近づけることができます。

動かす

弾の挙動がおかしい
後、まだぬるいからレベルを追加させてみる

3回目のチャット

質問
弾の挙動が少しおかしいので修正してください
画面上部でくるくる回って下に落ちてこないです
そして、レベルシステムの実装(時間経過とともに難易度が上がる)を追加してください
回答

はい、承知いたしました。弾の挙動を修正し、レベルシステムを実装した改良版のコードを以下に示します。

main.py
import pygame
import random
import math

# 初期化
pygame.init()

# 画面設定
WIDTH = 800
HEIGHT = 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("東方風避けゲー")

# 色の定義
WHITE = (255, 255, 255)
RED = (255, 0, 0)
BLUE = (0, 0, 255)
GREEN = (0, 255, 0)

# プレイヤーの設定
player = pygame.Rect(WIDTH // 2, HEIGHT - 50, 20, 20)
player_speed = 5

# 弾の設定
bullets = []
bullet_spawn_rate = 20

# レベルシステム
level = 1
level_up_time = 10000  # 10秒ごとにレベルアップ
last_level_up = pygame.time.get_ticks()

# 弾の種類
class Bullet:
    def __init__(self, x, y, color, speed, pattern):
        self.x = x
        self.y = y
        self.color = color
        self.speed = speed
        self.pattern = pattern
        self.angle = 0

    def move(self):
        if self.pattern == "straight":
            self.y += self.speed
        elif self.pattern == "sine":
            self.y += self.speed
            self.x += math.sin(self.y * 0.05) * 2
        elif self.pattern == "spiral":
            self.angle += 0.1
            self.x += math.cos(self.angle) * self.speed
            self.y += self.speed * 0.5  # スパイラルパターンでも下に落ちるように修正

    def draw(self):
        pygame.draw.circle(screen, self.color, (int(self.x), int(self.y)), 5)

# ゲームループ
clock = pygame.time.Clock()
running = True
score = 0

while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # プレイヤーの移動
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT] and player.left > 0:
        player.x -= player_speed
    if keys[pygame.K_RIGHT] and player.right < WIDTH:
        player.x += player_speed
    if keys[pygame.K_UP] and player.top > 0:
        player.y -= player_speed
    if keys[pygame.K_DOWN] and player.bottom < HEIGHT:
        player.y += player_speed

    # レベルアップ処理
    current_time = pygame.time.get_ticks()
    if current_time - last_level_up > level_up_time:
        level += 1
        last_level_up = current_time
        bullet_spawn_rate = max(5, bullet_spawn_rate - 2)  # スポーン率を上げる(最小5)

    # 弾の生成
    if random.randint(1, bullet_spawn_rate) == 1:
        bullet_x = random.randint(0, WIDTH)
        bullet_type = random.choice(["straight", "sine", "spiral"])
        bullet_color = random.choice([RED, BLUE, GREEN])
        bullet_speed = random.uniform(2 + level * 0.5, 4 + level * 0.5)  # レベルに応じて速度を上げる
        bullets.append(Bullet(bullet_x, 0, bullet_color, bullet_speed, bullet_type))

    # 弾の移動と衝突判定
    for bullet in bullets[:]:
        bullet.move()
        if bullet.y > HEIGHT or bullet.x < 0 or bullet.x > WIDTH:
            bullets.remove(bullet)
        elif player.collidepoint(bullet.x, bullet.y):
            running = False

    # 描画
    screen.fill((0, 0, 0))
    pygame.draw.rect(screen, WHITE, player)
    for bullet in bullets:
        bullet.draw()

    # スコアとレベル表示
    score += 1
    font = pygame.font.Font(None, 36)
    score_text = font.render(f"Score: {score}", True, WHITE)
    level_text = font.render(f"Level: {level}", True, WHITE)
    screen.blit(score_text, (10, 10))
    screen.blit(level_text, (10, 50))

    pygame.display.flip()
    clock.tick(60)

# ゲームオーバー画面
screen.fill((0, 0, 0))
font = pygame.font.Font(None, 72)
game_over_text = font.render("Game Over", True, WHITE)
final_score_text = font.render(f"Final Score: {score}", True, WHITE)
final_level_text = font.render(f"Final Level: {level}", True, WHITE)
screen.blit(game_over_text, (WIDTH // 2 - 150, HEIGHT // 2 - 100))
screen.blit(final_score_text, (WIDTH // 2 - 150, HEIGHT // 2))
screen.blit(final_level_text, (WIDTH // 2 - 150, HEIGHT // 2 + 100))
pygame.display.flip()

# 3秒待機してから終了
pygame.time.wait(3000)

pygame.quit()

主な変更点:

  1. 弾の挙動修正:
    • スパイラルパターンの弾が必ず下に落ちるように修正しました。self.y += self.speed * 0.5 を追加し、Y軸方向にも移動するようにしました。
  2. レベルシステムの実装:
    • level変数を追加し、10秒(level_up_time)ごとにレベルアップするようにしました。
    • レベルアップ時にbullet_spawn_rateを減少させ、弾の出現頻度を上げています。
    • 弾の速度をレベルに応じて徐々に上げるようにしました。
  3. 表示の改善:
    • 現在のレベルを画面に表示するようにしました。
    • ゲームオーバー画面に最終レベルも表示するようにしました。
      これらの変更により、弾の挙動が修正され、時間経過とともに難易度が上がるレベルシステムが実装されました。プレイヤーはより長く生き残ることでより高いスコアとレベルを達成できるようになりました。

動かす

1個前より難しくなっている!
レベルアップの時間を10秒から3秒に変更してみた

いい難易度になってきたが、もっと難しくしたい

4回目のチャット

質問
弾が四方から中心に迫ってくるように変更することはできますか?
回答

はい、もちろんできます。弾が四方から中心に向かって迫ってくるように変更したコードを以下に示します。

main.py
import pygame
import random
import math

# 初期化
pygame.init()

# 画面設定
WIDTH = 800
HEIGHT = 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("東方風避けゲー")

# 色の定義
WHITE = (255, 255, 255)
RED = (255, 0, 0)
BLUE = (0, 0, 255)
GREEN = (0, 255, 0)
YELLOW = (255, 255, 0)

# プレイヤーの設定
player = pygame.Rect(WIDTH // 2, HEIGHT // 2, 20, 20)
player_speed = 5

# 弾の設定
bullets = []
bullet_spawn_rate = 20

# レベルシステム
level = 1
level_up_time = 10000  # 10秒ごとにレベルアップ
last_level_up = pygame.time.get_ticks()

# 弾の種類
class Bullet:
    def __init__(self, x, y, color, speed, angle):
        self.x = x
        self.y = y
        self.color = color
        self.speed = speed
        self.angle = angle

    def move(self):
        self.x += math.cos(self.angle) * self.speed
        self.y += math.sin(self.angle) * self.speed

    def draw(self):
        pygame.draw.circle(screen, self.color, (int(self.x), int(self.y)), 5)

# 弾の生成関数
def spawn_bullet():
    side = random.choice(["top", "bottom", "left", "right"])
    if side == "top":
        x = random.randint(0, WIDTH)
        y = 0
        angle = math.pi / 2
    elif side == "bottom":
        x = random.randint(0, WIDTH)
        y = HEIGHT
        angle = -math.pi / 2
    elif side == "left":
        x = 0
        y = random.randint(0, HEIGHT)
        angle = 0
    else:  # right
        x = WIDTH
        y = random.randint(0, HEIGHT)
        angle = math.pi

    color = random.choice([RED, BLUE, GREEN, YELLOW])
    speed = random.uniform(2 + level * 0.5, 4 + level * 0.5)
    return Bullet(x, y, color, speed, angle)

# ゲームループ
clock = pygame.time.Clock()
running = True
score = 0

while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # プレイヤーの移動
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT] and player.left > 0:
        player.x -= player_speed
    if keys[pygame.K_RIGHT] and player.right < WIDTH:
        player.x += player_speed
    if keys[pygame.K_UP] and player.top > 0:
        player.y -= player_speed
    if keys[pygame.K_DOWN] and player.bottom < HEIGHT:
        player.y += player_speed

    # レベルアップ処理
    current_time = pygame.time.get_ticks()
    if current_time - last_level_up > level_up_time:
        level += 1
        last_level_up = current_time
        bullet_spawn_rate = max(5, bullet_spawn_rate - 2)  # スポーン率を上げる(最小5)

    # 弾の生成
    if random.randint(1, bullet_spawn_rate) == 1:
        bullets.append(spawn_bullet())

    # 弾の移動と衝突判定
    for bullet in bullets[:]:
        bullet.move()
        if (bullet.x < 0 or bullet.x > WIDTH or 
            bullet.y < 0 or bullet.y > HEIGHT):
            bullets.remove(bullet)
        elif player.collidepoint(bullet.x, bullet.y):
            running = False

    # 描画
    screen.fill((0, 0, 0))
    pygame.draw.rect(screen, WHITE, player)
    for bullet in bullets:
        bullet.draw()

    # スコアとレベル表示
    score += 1
    font = pygame.font.Font(None, 36)
    score_text = font.render(f"Score: {score}", True, WHITE)
    level_text = font.render(f"Level: {level}", True, WHITE)
    screen.blit(score_text, (10, 10))
    screen.blit(level_text, (10, 50))

    pygame.display.flip()
    clock.tick(60)

# ゲームオーバー画面
screen.fill((0, 0, 0))
font = pygame.font.Font(None, 72)
game_over_text = font.render("Game Over", True, WHITE)
final_score_text = font.render(f"Final Score: {score}", True, WHITE)
final_level_text = font.render(f"Final Level: {level}", True, WHITE)
screen.blit(game_over_text, (WIDTH // 2 - 150, HEIGHT // 2 - 100))
screen.blit(final_score_text, (WIDTH // 2 - 150, HEIGHT // 2))
screen.blit(final_level_text, (WIDTH // 2 - 150, HEIGHT // 2 + 100))
pygame.display.flip()

# 3秒待機してから終了
pygame.time.wait(3000)

pygame.quit()

主な変更点:

  1. Bulletクラスを修正し、角度(angle)を使用して弾の移動方向を決定するようにしました。
  2. spawn_bullet関数を新たに追加し、画面の四辺からランダムに弾を生成するようにしました。各辺から生成される弾は、中心に向かって移動します。
  3. プレイヤーの初期位置を画面中央に変更しました。
  4. 弾の色に黄色(YELLOW)を追加し、より多様な弾を生成するようにしました。
  5. 弾の削除条件を画面外に出た時に変更しました。
    これらの変更により、弾が四方から中心に向かって迫ってくるゲームプレイが実現されました。プレイヤーは画面中央付近で四方からの弾を避けながらプレイすることになります。レベルシステムも維持されており、時間経過とともに難易度が上がります。

レベルアップを3秒に設定して動かす

弾の揺れは消えたけどいい感じの難易度になってきた

チャットで微調整

この後2回会話してゲームを完成させた

  • 弾を揺らす
  • ゲームオーバーで画面リトライできるようにする

完成したゲーム

コード
main.py
import pygame
import random
import math
# 初期化
pygame.init()
# 画面設定
WIDTH = 800
HEIGHT = 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("東方風避けゲー")
# 色の定義
WHITE = (255, 255, 255)
RED = (255, 0, 0)
BLUE = (0, 0, 255)
GREEN = (0, 255, 0)
YELLOW = (255, 255, 0)
PURPLE = (255, 0, 255)
# フォント設定
font = pygame.font.Font(None, 36)
large_font = pygame.font.Font(None, 72)
# 弾の種類
class Bullet:
    def __init__(self, x, y, color, speed, angle, bullet_type):
        self.x = x
        self.y = y
        self.color = color
        self.speed = speed
        self.angle = angle
        self.bullet_type = bullet_type
        self.time = 0
    def move(self):
        if self.bullet_type == "straight":
            self.x += math.cos(self.angle) * self.speed
            self.y += math.sin(self.angle) * self.speed
        elif self.bullet_type == "curve":
            self.angle += 0.05
            self.x += math.cos(self.angle) * self.speed
            self.y += math.sin(self.angle) * self.speed
        elif self.bullet_type == "wave":
            self.x += math.cos(self.angle) * self.speed
            self.y += math.sin(self.angle) * self.speed + math.sin(self.time * 0.1) * 3
            self.time += 1
    def draw(self):
        pygame.draw.circle(screen, self.color, (int(self.x), int(self.y)), 5)
# 弾の生成関数
def spawn_bullet(level):
    side = random.choice(["top", "bottom", "left", "right"])
    if side == "top":
        x = random.randint(0, WIDTH)
        y = 0
        angle = math.pi / 2
    elif side == "bottom":
        x = random.randint(0, WIDTH)
        y = HEIGHT
        angle = -math.pi / 2
    elif side == "left":
        x = 0
        y = random.randint(0, HEIGHT)
        angle = 0
    else:  # right
        x = WIDTH
        y = random.randint(0, HEIGHT)
        angle = math.pi
    color = random.choice([RED, BLUE, GREEN, YELLOW, PURPLE])
    speed = random.uniform(2 + level * 0.3, 4 + level * 0.3)
    bullet_type = random.choice(["straight", "curve", "wave"])
    return Bullet(x, y, color, speed, angle, bullet_type)
# ゲーム関数
def game():
    # プレイヤーの設定
    player = pygame.Rect(WIDTH // 2, HEIGHT // 2, 20, 20)
    player_speed = 5
    # 弾の設定
    bullets = []
    bullet_spawn_rate = 20
    # レベルシステム
    level = 1
    level_up_time = 3000  # 3秒ごとにレベルアップ
    last_level_up = pygame.time.get_ticks()
    # ゲームループ
    clock = pygame.time.Clock()
    running = True
    score = 0
    while running:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                return False  # ゲームを完全に終了
        # プレイヤーの移動
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT] and player.left > 0:
            player.x -= player_speed
        if keys[pygame.K_RIGHT] and player.right < WIDTH:
            player.x += player_speed
        if keys[pygame.K_UP] and player.top > 0:
            player.y -= player_speed
        if keys[pygame.K_DOWN] and player.bottom < HEIGHT:
            player.y += player_speed
        # レベルアップ処理
        current_time = pygame.time.get_ticks()
        if current_time - last_level_up > level_up_time:
            level += 1
            last_level_up = current_time
            bullet_spawn_rate = max(5, bullet_spawn_rate - 2)  # スポーン率を上げる(最小5)
        # 弾の生成
        if random.randint(1, bullet_spawn_rate) == 1:
            bullets.append(spawn_bullet(level))
        # 弾の移動と衝突判定
        for bullet in bullets[:]:
            bullet.move()
            if (bullet.x < -50 or bullet.x > WIDTH + 50 or
                bullet.y < -50 or bullet.y > HEIGHT + 50):
                bullets.remove(bullet)
            elif player.collidepoint(bullet.x, bullet.y):
                return score, level  # スコアとレベルを返す
        # 描画
        screen.fill((0, 0, 0))
        pygame.draw.rect(screen, WHITE, player)
        for bullet in bullets:
            bullet.draw()
        # スコアとレベル表示
        score += 1
        score_text = font.render(f"Score: {score}", True, WHITE)
        level_text = font.render(f"Level: {level}", True, WHITE)
        screen.blit(score_text, (10, 10))
        screen.blit(level_text, (10, 50))
        pygame.display.flip()
        clock.tick(60)
# メインループ
def main():
    while True:
        result = game()
        if result is False:
            break
        score, level = result
        # ゲームオーバー画面
        screen.fill((0, 0, 0))
        game_over_text = large_font.render("Game Over", True, WHITE)
        final_score_text = font.render(f"Final Score: {score}", True, WHITE)
        final_level_text = font.render(f"Final Level: {level}", True, WHITE)
        retry_text = font.render("Press SPACE to retry, ESC to quit", True, WHITE)
        screen.blit(game_over_text, (WIDTH // 2 - 150, HEIGHT // 2 - 100))
        screen.blit(final_score_text, (WIDTH // 2 - 100, HEIGHT // 2))
        screen.blit(final_level_text, (WIDTH // 2 - 100, HEIGHT // 2 + 50))
        screen.blit(retry_text, (WIDTH // 2 - 200, HEIGHT // 2 + 150))
        pygame.display.flip()
        # リトライ待機
        waiting = True
        while waiting:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    return
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_SPACE:
                        waiting = False
                    elif event.key == pygame.K_ESCAPE:
                        return
    pygame.quit()
if __name__ == "__main__":
    main()

いい感じな難易度のゲームが完成した!
会話を初めて大体20分くらいで作れる。

まとめ

  • 1回目の会話の時点から、ゲームとして遊べるものを作成してくれた
  • ゲームのチューニング方法の提案をしてくれる
  • ゲーム作成する際の基盤をぱぱっと作ってくれる
リバナレテックブログ

Discussion