
【Typescriptでゲーム制作】AI対戦の⭕️❌ゲームを作ってみた
どうもです。あいぺけです。
今回はAI対戦のできる⭕️❌ゲームを作ったので紹介していきます。
普通の⭕️❌ゲームとは違って、勝負がつくまでエンドレスに続けることができる対戦ゲームになってます。
Webで作成しているのでダウンロードとかは不要で、PCとスマホの両方に対応しています。
遊び方については動画でまとめたので良かったら見ていってください。
1. ゲームのルール
マス目の選択ができるようになってます。
マス目の種類は、3x3, 4x4, 5x5の3種類です。
勝利条件は、縦横斜めのいずれかを自分のマークで揃えた方が勝者となります。
そのため、3x3の場合は縦横斜めのいずれかを3つ並べば勝ちとなり、4x4の場合は4つ、5x5の場合は5つ並べば勝ちとなります。
このゲームの特殊なルールとして、3x3の場合は最低3つ空白のマスができるように設定しており、4x4は4つ、5x5は5つ空白のマスができるようになっています。
そのため、古いマーク(⭕️、❌)は自動で消えることで勝負がつくまでエンドレスに続けることができます。
2. AIが強すぎた
作ってみて思いました。AIが強すぎる…。
次にどのマスが消えるかを判断するためにセットされたマークの順番を覚えて先読みする必要があると思いますが、、、無理ですね。
自分で何度かプレーしてみましたが、勝てる気が全くしません。
たぶん、プログラムに間違いがなければAI側が負けることはないんじゃないかな…
4x4、5x5で勝てた人がいたら教えてください。笑
3. AIのアルゴリズム
AIのアルゴリズムについては、前回作ったオセロゲームと同じαβ法という探索法を使って実装しています。
処理内容の例として簡単に説明すると5手先までの着手可能な全パターンを取得して、その中で最も良い手を選択するという感じです。
何を良い手とするかは評価方法によるので、評価方法は自分で考える、みたいな感じです。
今回作った⭕️❌ゲームの場合、手数の少ない手で勝利する場合の評価を高くなるように設定して実装しました。
あと、例として5手先としてしましたが、自分は「何手先まで探索を行う」という指定をするのではなく、「探索する時間を制限」することでAIのターンで探索時間が一定になるようにしました。
αβ法についての解説や実装方法については、調べるとYouTubeでも出てくるのでそれを見たりしながら勉強しました。
書籍になりますが「ゲームで学ぶ探索アルゴリズム実践入門」がとても分かりやすくて参考になりました。
4. 終わりに
ゲーム自体はとてもシンプルですが、割と面白いものができた気がします。
自分が弱すぎてAIに勝てないのか、普通にAIが強すぎるのかは謎のままです。笑
AIに勝てる人がいたら教えて欲しいレベルです。
前回のオセロゲームや今回の⭕️❌ゲームのように、盤面のあるゲームをいくつか作ってみたので、引き続き紹介できればと思います。
ここまで読んでいただき、ありがとうございました。