GPx04
SNAP!によるゲームAIアルゴリズム(その2)
3目並べに「待った(Undo)」機能を実装する。
3目並べに1手先読み、2手先読み、n手先読み思考ルーチンを用意する。
SNAP!のターボモードを有効にする。思考ルーチンの処理が重たいので必須。
それでもコンピュータの回答まで数秒間待つ必要があるので、画面を連打しないように注意する(誤動作する)。
解説動画:
※音質ごめんなさい。ヘッドセットのプラグが抜けていました※
課題1
〇×ゲームに「待った(Undo)」と2手先読み思考ルーチンをSNAP!で実装する。
Webclassの講義資料に添付したファイルをダウンロードしてSNAP!に読み込み、コードを組み立てて実験する。
ファイル名:tick-tack-toe_kadai3k2.xml ※1
作成したコードをSNAP!から保存(ダウンロード)してWebclassのGPx04課題の問1として提出する。
GPx04課題の問2に問1で修正した内容を回答する。
動作例)
組み立て参考画像
応用問題1
〇×ゲームにn手先読み思考ルーチンをSNAP!で実装する。
Webclassの講義資料に添付したファイルをダウンロードしてSNAP!に読み込み、コードを組み立てて実験する。
作成したコードをSNAP!から保存(ダウンロード)してWebclassのGPx04課題の問1として提出してもよい。
応用問題2
応用問題1の参考画像の通りにコードを組み立てるとコンピュータプレイヤーは決まりきった手筋しかプレイしない。
そこで解説動画のヒントを元に状況によってランダムに着手を選択するように修正する。
(ヒント1)
先読み打ち切りと必敗の場合には空きマスのリスト spaces から取り出してチェックした最後の場所が item に入っている。
そこで上記のプログラムでは itemの場所をプレイするように値を返している。
これをitemの代わりに random_ai コマンドで選んだランダムな場所をプレイするように修正する。(複数箇所ある)
(ヒント2)
temp_move には勝敗不明の着手の最後の1つだけが記録されている。これをリストで初期化して勝敗不明着手リストとして利用して、必敗局面でなければtemp_moveリストからランダムに選んで値を返すように修正する。次の画像の3つのブロックを適切な場所に配置して元のブロックと入れ替える。
難問
〇×ゲームの勝利条件を逆転させる。3つ並べた方が負けの条件で勝つようにプレイする思考ルーチンを作成する。