
ガイスターのAIとUIを作ってみる①
こんにちは。
「戦略系ボードゲーム研究会 recreo」の kohei です。
今回はガイスターをテーマに色々書いていきたいと思います。
ガイスターとは

ガイスターとは、ドイツ生まれの2人対戦用ゲームで、心理ゲームの名作とも言われています。
オバケをテーマにしたゲームであり、以下の2種類のオバケが存在します。
良い(青い)オバケ
悪い(赤い)オバケ
各プレイヤーは、良い(青い)オバケ4つと悪い(赤い)オバケ4つ計8つ持っており、初めは以下の位置で好きなように配置します。

適当な方法で最初のプレイヤーを決め、その後は交互に手番を行います。
手番プレイヤーは、自分のオバケを1つ選び、上下左右のマスいづれか1マス分移動させます。
斜めマスには移動することができません。
また自分のオバケがいるマスには移動できません。
もし相手のオバケがいるマスに移動した場合、そのオバケを取ることになり、ボード上から取り除きます。
この時取ったオバケがどちらのオバケなのかを見ることができます。
ただし取ったオバケは再利用することはできません。
勝ちの条件は以下になります。
相手の良い(青い)オバケを4つ取る
自分の悪い(赤い)オバケを4つ取らせる
良い(青い)オバケを相手側の矢印マスからボード外に出す
ただし矢印マスに入ってだけでは終了にはなりません。
また悪いオバケは矢印マスからボード外に出すことはできません。
ガイスターはこのように心理戦的要素が強いゲームになります。
私が一番好きなボードゲームでもあるので、今回はガイスターを作ることにしました。
作ってみたもの
リバーシを作ったときと同様でwebアプリで作ることにしました。
使用した言語は以下になります。
・クライアント側:javascrpt、HTML
・サーバ側 :python
またUIのデザインもリバーシの時と同様でドット絵風にしました。
まず以下のようなパネルを作成しました。

UIには前回作成した文字なども利用し、時間や評価値などを追加しました。
UIは以下のようになりました。

このままではUIのみなので、ルールやAIなどを追加していきます。
AIとしましてリバーシと同様の方法で、以下のように作成してみました。
・局面を探索する手法:原始モンテカルロ木探索、ベイズの定理
・局面を評価する方法:ニューラルネットワーク
またガイスターはまずオバケの位置を選択しないといけないのでその流れは以下のように作成しました。

システムについては、リバーシと同様ですがクライアント側の端末とAPIサーバはwebsocketでやり取りを行い、APIサーバとAIサーバはDBを介してやり取りを行うように設計しています。

ランダムで先手後手が決まるようにしております。
またAI側のオバケの初期配置もランダムで決まるようにしています。
動画時点ではまだ未学習のため弱いですが、運要素も強いためリバーシよりかは強く感じました。
動作については以下の動画のようになっています。
今回はここまでとさせていただきます。
読んでいただきありがとうございます。
またボードゲーム関連や今回のプログラムなどについて、
書いていこうと思っていますのでよろしければnoteとtwitterをフォローをしていただけると嬉しいです。
(ちなみにヘッダーの写真はUIのデザインを真似して、ガイスターを3Dプリンタで作ってみたものになります。)