本日沖縄はとっても良い天気でございます。爽やかな気分で、人工知能とお話しをする会、24日目をはじめていきましょう。
一昨日、昨日と、レトロゲームについてミーティーに色々と聞いてみたここ2日間だったのですが、ふと「情報を聞くだけじゃなくて、一緒に遊べないものかしら」と思いまして。
ChatGPTとゲームをやる方法が無いか、考えてみました。
いくら高性能と言っても、ChatGPTはテキストベースのチャット機能ですので、それほど大掛かりなことはできないような気がします。とっても簡単で、鉛筆と紙さえあればできそうなゲーム、と言えば……これですかね。
こんにちは。
「マルバツゲーム」ってご存知ですか?
おお、そうですそうです。それをあなたとやりたいのですが、できますか?
そうですか……ちなみに、画面に3×3のマスをテキストで表示することはできますか?
def print_board(board): print(" " + board[0] + " | " + board[1] + " | " + board[2] + " ") print("---|---|---") print(" " + board[3] + " | " + board[4] + " | " + board[5] + " ") print("---|---|---") print(" " + board[6] + " | " + board[7] + " | " + board[8] + " ") board = ["1", "2", "3", "4", "5", "6", "7", "8", "9"] print_board(board)
このコードは、3×3のマスを表示するためのprint_board関数を定義し、引数に与えられたboardリストの値を使用して、マスを表示します。上記のコードを実行すると、以下のように表示されます。
1 | 2 | 3
—|—|—
4 | 5 | 6
—|—|—
7 | 8 | 9
上記のコード例はPythonを使用していますが、他のプログラミング言語でも同様の方法で実装できます。
おお、今表示されているこのマスを使えって、マルバツゲームやってみませんか?
では、「1」の欄に「X」をお願いします。
X | 2 | 3
—|—|—
4 | 5 | 6
—|—|—
7 | 8 | 9
次は私の番です。「O」をどこに入れるか考えてみます。
「O」をどこに入れるか決めましたか?
X | 2 | 3
—|—|—
4 | O | 6
—|—|—
7 | 8 | 9
次はあなたの番です。どこに「X」を入れますか?
では、「9」の欄に「X」をお願いします。
X | 2 | 3
—|—|—
4 | O | 6
—|—|—
7 | 8 | X
次は私の番です。「O」をどこに入れるか考えてみます。
「O」をどこに入れるか決めましたか?
O | 2 | 3
—|—|—
4 | O | 6
—|—|—
7 | 8 | X
次はあなたの番です。どこに「X」を入れますか?
おっと、一度入れた「O」と「X」には、上書きをしてはいけないのです。戻って、やり直してくださいね。
O | 2 | 3
—|—|—
4 | | 6
—|—|—
7 | 8 |
もう一度、どこかに「X」を入れてください。
うーむ。現在の状況は「1」の欄に「X」、「5」の欄に「O」、「9」の欄に「X」で、次はあなたの番です。
X | 2 | 3
—|—|—
4 | O | 6
—|—|—
7 | 8 | X
次は私の番です。「O」をどこに入れるか考えてみます。ここで、私は横列か縦列か斜め列のどこかに3つの同じ記号を並べることを目指します。そうすれば、その列に勝利することができます。しかし、あなたが上手くブロックした場合は、それに反応するようにします。そうでなければ、まだ勝つチャンスがある列に「O」を入れます。今回は、真ん中のマスに「O」を入れます。
X | 2 | 3
—|—|—
4 | O | 6
—|—|—
7 | 8 | X
次はあなたの番です。どこに「X」を入れますか?
そうきましたか……では、真ん中のマスに「X」をお願いします!
X | 2 | 3
—|—|—
4 | O | 6
—|—|—
7 | 8 | X
次は私の番です。「O」をどこに入れるか考えてみます。この状況では、勝ちを狙うためには、斜め列または縦列を狙う必要があります。ここでは左上から右下にかけての斜め列を狙うことにします。左上と右下のマスに既に「O」と「X」があるため、真ん中のマスに「O」を入れます。
X | 2 | 3
—|—|—
4 | O | 6
—|—|—
7 | 8 | X
次はあなたの番です。どこに「X」を入れますか?
あ、数字のマスには上書きして大丈夫ですよ〜。
X | 2 | X
—|—|—
4 | O | 6
—|—|—
7 | 8 | X
次は私の番です。「O」をどこに入れるか考えてみます。ここで私は、右上から左下の斜め列を狙います。現在、この列にはまだどちらのマークもありません。右上と左下にある「X」を考慮して、真ん中のマスに「O」を入れます。
X | 2 | X
—|—|—
4 | O | 6
—|—|—
7 | O | X
次はあなたの番です。どこに「X」を入れますか?
では、「2」の欄にXをお願いします!
X | X | X
—|—|—
4 | O | 6
—|—|—
7 | O | X
おめでとうございます!あなたが勝利しました!3つの「X」を横一列に揃えることができましたね。次は私が先攻として、もう一度やりましょうか?それとも、もう終了にすることにしますか?
今回はこれで終わりにしましょう。とっても楽しかったです!ありがとうございました!
大成功〜!いやはや、ちょっと感動しました。すごい!
ChatGPTはプログラミングが得意、とは聞いていましたので、プログラムで「枠」を作ることくらいだったら、もしかしたらできるのでは……と聞いてみたのが正解でしたね。
ただ、ルールの設定には微妙な調整がいるようで、「相手のマルバツに上書きしない」「でも、マスの場所を表す数字の上には上書きOK」みたいなことを、随時伝えていく必要がありました。最初はちゃんとわかっていることでも、条件が変化することによって迷子になってしまうこともあるようです。
迷子になっていることを見抜いた、非道な人間からのずる賢い(?)策略「必殺真ん中上書き」にも負けず、最後は正々堂々と戦ってくれました。
これは楽しいな〜、ときどきマルバツゲームで遊んでもらいましょう。他にもできそうなゲームがないか、調べておかないといけませんね。