【悲報】ChatGPTがアホすぎる件-2-

プログラミング

こんにちは、ぴかろです。

思ったより前回の記事が長くなってしまったので今回は前回の続きを書いていこうと思います。

前回の記事をまだお読みでない方はこちらからどうぞ!

今回は私が大好きなゲームをChatGPTに作ってもらおうと思います。

条件、ジャンルなどの指定

ぴかろ
ぴかろ

VisualStudioCode上で動く簡単なゲームを作ってもらえますか?

ぴかろ
ぴかろ

使用言語はPythonで、拡張機能は使用しないでください。ジャンルは推理ゲームでお願いします。

私は現在Visual Studio Codeを使っておりなおかつプログラムの大元にかかわる拡張機能は使用していないのでこのような条件でお願いしました。あとは普段あまりプレイすることのないジャンルの推理ゲームをお願いしてみました。

どんな回答が返ってきたか

ChatGPT
ChatGPT

了解しました。Pythonを使用して、拡張機能を使用しない推理ゲームを作成することができます。

以下は、簡単な推理ゲームの例です。このゲームでは、プレイヤーは数字を当てる必要があり、正解の数字を当てるためにヒントが提供されます。

ChatGPT
ChatGPT
import random

# 正解の数字をランダムに生成
answer = random.randint(1, 10)

# プレイヤーが正解を当てるまでループする
while True:
    # プレイヤーが数字を入力する
    guess = int(input("1から10までの数字を当ててください:"))

    # 入力された数字が正解よりも大きいか小さいかをチェックする
    if guess < answer:
        print("もっと大きい数字を試してみてください。")
    elif guess > answer:
        print("もっと小さい数字を試してみてください。")
    else:
        # 正解を当てた場合、プレイヤーに勝利メッセージを表示してゲームを終了する
        print("正解です!おめでとうございます。")
        break

この推理ゲームでは、プレイヤーが入力した数字が正解の数字よりも大きいか小さいかを判断することで、正解を当てることができます。このような単純なゲームではありますが、Pythonの基礎的な文法を学ぶのに役立つことがあります。

そうきたか…

確かに私の伝え方が不十分だった部分もあるのですが、まさか私がイメージしてる(犯人と探偵が出てくる)ゲームと全く違うものが出てくるとは思いませんでした。

このゲームを実際に動かしてみるとこんな感じでした。

画像の上で”5″と入力してるのが分かるでしょうか。今回私はたまたま一発で正解しましたが、コードを読み解くと、入力した数より大きい数が答えなら”もっと大きい数字を試してみてください。”と表示され、入力した数より小さい数が答えなら”もっと小さい数字を試してみてください。”と表示されるようになってます。タイトルではアホって書いてますけどこんなコード書けるなんて賢いですね。今の私が一発でミスなく書けって言われても多分無理です。

望みの物を出すために調整する

ぴかろ
ぴかろ

私が言った推理ゲームというのは探偵と犯人がいるタイプの推理ゲームです。ノベルゲームといえばわかるでしょうか?

ChatGPT
ChatGPT

了解しました。探偵と犯人が登場する、ノベルゲームのような推理ゲームをPythonで作成することができます。

以下は、簡単な探偵ゲームの例です。このゲームでは、プレイヤーは犯人を特定するために手掛かりを探し、推理を行います。

ChatGPT
ChatGPT

# 犯人の名前

criminal = “山田太郎”

# 証拠品のリスト

evidences = [

{“name”: “指紋”, “belong_to”: “山田太郎”},

{“name”: “足跡”, “belong_to”: “山田太郎”},

{“name”: “証言”, “belong_to”: “田中花子”}

]

# プレイヤーが犯人を特定するまでループする

while True: # プレイヤーが手掛かりを調べる

print(“手掛かりを調べます。”)

for evidence in evidences:

print(f”{evidence[‘name’]}が見つかりました。”) # プレイヤーが推理を行う

print(“犯人は誰でしょうか?”) suspect = input()

# プレイヤーの推理が正しいかどうかをチェックする

if suspect == criminal:

# 正解の場合、プレイヤーに勝利メッセージを表示してゲームを終了する

print(“正解です!犯人は山田太郎でした。”)

break else:

# 不正解の場合、プレイヤーに失敗メッセージを表示して続けるかどうかを確認する

print(f”{suspect}は犯人ではありません。”)

answer = input(“もう一度推理を行いますか?(はい or いいえ)”)

if answer == “いいえ”:

break

(コピペの都合上インデントなどは揃ってません。ご了承ください。)

なかなか本格的な推理ゲームができたんじゃないか!?と思ったのもつかの間、このコードを実際に実行してみるとこんな感じでした。

いや、これは無理やろ…

まず人物の固有名詞が1個も出てこない時点で不可能ですね。手掛かりも3つありますが内容を知ることはできません。ということでさらなる改善を求めました。

ぴかろ
ぴかろ

山田太郎は田中花子を個人的に恨んでいるというような文言を追加することができますか?導入が何もないのでこのままでは推理ゲームとして成立していません。

ChatGPT
ChatGPT

申し訳ありません。確かに、犯人の動機が推理ゲームにおいて重要であることはご指摘の通りです。以下のように、犯人の動機を明確にする文章を追加することができます。

ChatGPT
ChatGPT

# 犯人の情報

criminal = { “name”: “山田太郎”, “motive”: “田中花子を個人的に恨んでいる” }

# 手掛かりのリスト

evidences = [

{“name”: “指紋”, “belong_to”: “山田太郎”},

{“name”: “足跡”, “belong_to”: “山田太郎”},

{“name”: “証言”, “belong_to”: “田中花子を知る人物”} ]

# ゲームの導入

print(f”{criminal[‘name’]}は、{criminal[‘motive’]}という動機で、田中花子を殺害しました。”) print(“あなたは探偵です。手掛かりを調べ、犯人を特定してください。”)

# プレイヤーが犯人を特定するまでループする

while True: # プレイヤーが手掛かりを調べる

print(“手掛かりを調べます。”)

for evidence in evidences:

print(f”{evidence[‘name’]}が見つかりました。”)

# プレイヤーが推理を行う print(“犯人は誰でしょうか?”)

suspect = input() # プレイヤーの推理が正しいかどうかをチェックする

if suspect == criminal[‘name’]:

# 正解の場合、プレイヤーに勝利メッセージを表示してゲームを終了する

print(“正解です!犯人は山田太郎でした。”)

break else:

# 不正解の場合、プレイヤーに失敗メッセージを表示して続けるかどうかを確認する

print(f”{suspect}は犯人ではありません。”)

answer = input(“もう一度推理を行いますか?(はい or いいえ)”)

if answer == “いいえ”:

break

よくわかんねえけどいけたんじゃねえか!?

↓↓↓

おう。次に行きましょう。

少しずつ改善を試みる

ぴかろ
ぴかろ

指紋、足跡、証言についての情報が全くないのでこれは推理ゲームとして成立していません。例えば指紋と入力したときに指紋についての情報がでてくるようにしてください。

ChatGPT
ChatGPT

申し訳ありません。確かに、手がかりについての情報が必要ですね。以下のように、手がかりに関する情報を追加し、その情報をプレイヤーに提示するように変更することができます。

ぴかろ
ぴかろ

すみません、最初に動機を書いてしまうと証言の意味がなくサルでも答えがわかってしまうと思うのですがそこについてはどうお考えですか?

ChatGPT
ChatGPT

申し訳ありません、確かにその点については考慮していませんでした。もし証言によって犯人を特定することができなくなってしまう可能性があるのであれば、動機に関する情報を後回しにすることもできます。

ぴかろ
ぴかろ

山田太郎が田中花子を殺害したことを最初に示してしまうと推理ゲームではなくなってしまうと思うので最初の文言は変えてほしいです。

ChatGPT
ChatGPT

確かに、最初に犯人が明かされてしまうと推理ゲームとしての面白さが失われてしまいますね。そのため、ゲームの最初には犯人の情報を出さず、プレイヤーが調査を進めていく中で犯人を推理していくような流れを作ることが大切です。

例えば、最初の文言として「ある女性が殺害されました。現場には山田太郎という男性がいたと目撃されています。しかし、山田太郎は自分が犯人ではないと主張しています。あなたは探偵として、真相を解明してください。」などというように、事件の概要を説明する形にするとよいでしょう。

このような会話を交わしてできたコードがこちら!

import random
# 犯人の名前を定義 criminal = “山田太郎”
# ゲーム開始メッセージ
print(“ある女性が殺害されました。現場には山田太郎という男性がいたと目撃されています。しかし、山田太郎は自分が犯人ではないと主張しています。あなたは探偵として、真相を解明してください。”) # 証言をランダムに生成する関数
def generate_testimony():
suspects = [“山田太郎”, “田中花子”, “佐藤健太”]
actions = [“現場にいた”, “逃げた”, “帰宅していた”]
reasons = [“仕事で忙しかったため”, “病気のため”, “家族と過ごすため”]
return “{}さんは事件当日、{}という理由で{}。”.format(random.choice(suspects), random.choice(actions), random.choice(reasons))
# 証言をランダムに生成する
testimony1 = generate_testimony()
testimony2 = generate_testimony()
testimony3 = generate_testimony()
# 指紋と足跡をランダムに生成する
fingerprints = random.randint(1, 10)
footprints = random.randint(1, 10)
# 探偵が持つべき情報を表示する
print(“【探偵が持つべき情報】”)
print(“指紋の数:{}”.format(fingerprints))
print(“足跡の数:{}”.format(footprints))
print(“証言1:{}”.format(testimony1))
print(“証言2:{}”.format(testimony2))
print(“証言3:{}”.format(testimony3))
# 犯人が嘘をついているかどうかを判断する関数
def is_criminal_lying(testimony): return criminal not in testimony
# 犯人を推理する print(“\n【犯人を推理する】”)
if is_criminal_lying(testimony1) and is_criminal_lying(testimony2):
print(“{}が犯人である可能性が高いです。”.format(criminal))
else:
print(“{}が犯人である可能性は低いです。”.format(criminal))

実際に実行した画面がこちらです。

肝心のゲーム要素がなくなってしまった…

このコードの場合、指紋の数、足跡の数、証言がそれぞれランダムで生成され、犯人の可能性の高さまで示してくれますが、肝心の入力パートがないです。そして証言もランダムということで今回の画像はたまたま山田太郎、田中花子、佐藤健太の3人が登場していますがもちろん山田太郎に関する情報が得られず、佐藤健太の情報しか出てこない可能性だってあるわけです。これはもしゲーム要素があっても破綻してますね。

まとめ

現在最新のGPT4に課金すればもう少しまともな答えが返ってくるのかもしれませんが、そこまで財力に余裕があるわけではないので今回は無料版でいろいろ試してみました。私はこの辺で疲れてやめてしまったのですがもう少し長い時間学習させたら、簡単なゲームぐらいはすぐに作れそうですね。(実際作ってみてる人も多いでしょう。)

この記事でもしChatGPTに興味がわいたらぜひ使ってみてください。サインアップすれば無料で利用できます!

コメント

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