生成AIのコード生成能力を実際に確かめてみます。
ChatGPTを使用して、Pythonのゲームプログラムを作成してもらい、実行できるか確認しました。
使用する生成AI
OpenAIのChatGPT3.5を使用します。また、Pythonの実行環境はJupyter Labを使用します。
AIが作成したゲームコード
数字当てゲーム
プロンプト
以下のようなプロンプトを入力、ChatGPTから以下のような回答を得ました。
コード
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()
実行する
これを実行してみます。
エラーもなく、実行されました。
最後まで、問題なくゲームができました。
コード生成は完璧でした。
アクションゲームーブロックよけゲーム
プロンプトとコード、実行結果動画(初回)
つぎにアクションゲームができないか聞いてみます。
こちらは紆余曲折があり、最初のコードを実行しても動きませんでした。結局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)
実行すると下の動画のようなゲームが始まりました。ただし、スピードが上がらないので、難しくありません。
改善のプロンプト
以下のように、難易度を上げるようにプロンプトを入力します。
コード(最終版)
最終的に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でもよりレベルが高いコード作成が可能か、より複雑なゲームの作成がどこまで可能か、など確かめてみたいと思います。
コメント