ホーム » Python » 【AIのコード生成能力を検証】Pythonゲームを作成する①

【AIのコード生成能力を検証】Pythonゲームを作成する①

Python

生成AIのコード生成能力を実際に確かめてみます。
ChatGPTを使用して、Pythonのゲームプログラムを作成してもらい、実行できるか確認しました。

使用する生成AI

OpenAIのChatGPT3.5を使用します。また、Pythonの実行環境はJupyter Labを使用します。

【初心者入門】どうすればPythonが使えるのか、インストール方法を解説
Pythonを実際にプログラミングしたい初心者はPythonにはどのようなツールがあるのか、どのようにインストールして環境を構築すれば良いか迷います。Jupyter LabとGoogle Colaboratoryの特徴とインストール方法を説明します。

Project Jupyter | Home

【初心者入門】どうすればPythonが使えるのか、インストール方法を解説
Pythonを実際にプログラミングしたい初心者はPythonにはどのようなツールがあるのか、どのようにインストールして環境を構築すれば良いか迷います。Jupyter LabとGoogle Colaboratoryの特徴とインストール方法を説明します。

ChatGPT (openai.com)

【その1】ChatGPTとは?使い方や機能、活用方法を徹底解説
昨今話題のChatGPTですが、新たなビジネスチャンスと考える人もいれば、人間の仕事を奪う脅威のように捉える人もいます。ChatGPTとは何か、何ができるのかを正しく知り、どのような活用ができるのか調べます。

AIが作成したゲームコード

数字当てゲーム

プロンプト

以下のようなプロンプトを入力、ChatGPTから以下のような回答を得ました。

prompt1

コード

import random

def guess_the_number():
    secret_number = random.randint(1, 100)
    attempts = 0

    print("1から100までの数字を当ててください!")

    while True:
        user_guess = int(input("予想した数字を入力してください: "))
        attempts += 1

        if user_guess == secret_number:
            print(f"おめでとうございます!{secret_number}を当てました!試行回数: {attempts}")
            break
        elif user_guess < secret_number:
            print("もっと大きな数です。再試行してください。")
        else:
            print("もっと小さな数です。再試行してください。")

if __name__ == "__main__":
    guess_the_number()

実行する

これを実行してみます。

jupyter_number

エラーもなく、実行されました。

number

最後まで、問題なくゲームができました。

コード生成は完璧でした。

アクションゲームーブロックよけゲーム

プロンプトとコード、実行結果動画(初回)

つぎにアクションゲームができないか聞いてみます。

prompt2

こちらは紆余曲折があり、最初のコードを実行しても動きませんでした。結局turtleモジュールでなく、Pygameを使用した以下のコードになりました。

import pygame
import random
import sys

# Pygameの初期化
pygame.init()

# 画面のサイズ
WIDTH, HEIGHT = 600, 400

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

# プレイヤーの設定
player_size = 50
player_x = (WIDTH – player_size) // 2
player_y = HEIGHT – player_size – 20
player_speed = 5

# 敵の設定
enemy_size = 50
enemy_x = random.randint(0, WIDTH – enemy_size)
enemy_y = -enemy_size
enemy_speed = 3

# Pygameの画面設定
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption(“アクションゲーム”)

clock = pygame.time.Clock()

# ゲームループ
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] and player_x > 0:
player_x -= player_speed
if keys[pygame.K_RIGHT] and player_x < WIDTH – player_size:
player_x += player_speed

enemy_y += enemy_speed
if enemy_y > HEIGHT:
enemy_x = random.randint(0, WIDTH – enemy_size)
enemy_y = -enemy_size

# 衝突判定
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
):
print(“ゲームオーバー”)
pygame.quit()
sys.exit()

# 画面の描画
screen.fill(WHITE)
pygame.draw.rect(screen, BLUE, (player_x, player_y, player_size, player_size))
pygame.draw.rect(screen, RED, (enemy_x, enemy_y, enemy_size, enemy_size))

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

実行すると下の動画のようなゲームが始まりました。ただし、スピードが上がらないので、難しくありません。

改善のプロンプト

以下のように、難易度を上げるようにプロンプトを入力します。

prompt3

コード(最終版)

最終的に3点ごとにスピードを上げるプログラムにしました。コードは以下の通りです。

import pygame
import random
import sys

# Pygameの初期化
pygame.init()

# 画面のサイズ
WIDTH, HEIGHT = 800, 600

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

# プレイヤーの設定
player_size = 50
player_x = (WIDTH - player_size) // 2
player_y = HEIGHT - player_size - 20
player_speed = 5

# 敵の設定
enemy_size = 150  # 大きさを変更
enemy_x = random.randint(0, WIDTH - enemy_size)
enemy_y = -enemy_size
enemy_speed = 3

# スコアの初期化
score = 0

# Pygameの画面設定
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("アクションゲーム")

font = pygame.font.Font(None, 36)  # フォントの設定

clock = pygame.time.Clock()

# ゲームループ
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] and player_x > 0:
        player_x -= player_speed
    if keys[pygame.K_RIGHT] and player_x < WIDTH - player_size:
        player_x += player_speed

    enemy_y += enemy_speed
    if enemy_y > HEIGHT:
        enemy_x = random.randint(0, WIDTH - enemy_size)
        enemy_y = -enemy_size
        score += 1  # 敵をかわしたらスコアを増やす

        # スコアが3の倍数の時、敵のスピードを1上げる
        if score % 3 == 0:
            enemy_speed += 1

    # 衝突判定
    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
    ):
        print("ゲームオーバー スコア:", score)
        pygame.quit()
        sys.exit()

    # 画面の描画
    screen.fill(WHITE)
    pygame.draw.rect(screen, BLUE, (player_x, player_y, player_size, player_size))
    pygame.draw.rect(screen, RED, (enemy_x, enemy_y, enemy_size, enemy_size))

    # スコアの表示
    score_text = font.render("Score: {}".format(score), True, (0, 0, 0))
    screen.blit(score_text, (10, 10))

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

完成版の実行結果(動画)

以下のようにスピードが徐々に上がっていくので、ゲームらしくなりました。

完成するまでには、何回かやり取りをする必要がありますが、全くのPython初心者である私にここまでのゲームを作らせてくれるのですから、ChatGPTの威力は絶大です!

【プロンプトエンジニアリングに学ぶ】上手なAIとの対話や質問の仕方 – ライフ&ジョブブログ (life-and-job.com)

まとめ

ChatGPT(3.5)を使用して、Pythonのゲームプログラムを2つ作成してもらい、実行できるか確認しました。 使用する生成AI OpenAIのChatGPT3.5を使用します。
プロンプトを繰り返す必要はありますが、生成AIのコード生成能力は高いことが検証できました。

今後はChatGPT4でもよりレベルが高いコード作成が可能か、より複雑なゲームの作成がどこまで可能か、など確かめてみたいと思います。

コメント

タイトルとURLをコピーしました