BattleLineとは
2人対戦用のボードゲームです。
https://boardgamegeek.com/boardgame/760/battle-line
http://www.amazon.co.jp/GMT-%E3%83%90%E3%83%88%E3%83%AB%E3%83%A9%E3%82%A4%E3%83%B3/dp/B000VQOI10
アプリも出ていたりします。
https://itunes.apple.com/jp/app/reiner-knizias-battleline/id406165160?mt=8
経緯
実は少し前に作り始めたプログラムだったのですが、
放置していたGithubアカウントとQiitaアカウントを何とかしたいなということで今回アップロードしました。
やったこと
- BattleLineというボードゲームをJavaに移植した
- GUIで操作できるようにした
- 通信対戦を実装した
- AIを簡単に実装できるようにした
リポジトリ
https://github.com/oxsoft/battleline
とりあえず遊びたい人は、
https://github.com/oxsoft/battleline/releases
AI開発方法
README.mdにも書いていますが、ここにも書いておきます。
AIはcom.oxsoft.battleline.ai以下で開発します.
AIはクラスを作り,AriticialIntelligenceを継承して実装して下さい.
com.oxsoft.battleline.ai以下にAriticialIntelligenceを継承したクラスを実装すると,自動的にプログラムがAIとして認識します.
AriticialIntelligenceの各関数は,現在のゲームの状態をGameStateContainer型として受け取り,GameStateInput型のインスタンスinputの関数を呼び出すことにより,ゲームをプレイします.
必ず何らかのinputの関数を実行し,成功(trueが返ってくる)しなければなりません.成功していない場合は,そのゲームは失格となります.
- action
- カードを置く(input.putCard),パスをする(input.passTurn)などを行います.
- パスはカードを置く場所がない,または手札が全て戦術カードの時のみ行うことができます.
- draw
- 部隊カードを引く(input.drawTroop),戦術カードを引く(input.drawTactics),カードを引かずにターンを終了する(input.endTurnWithoutDraw)などを行います.
- どちらの山札も無い時のみ,カードを引かずにターンを終了することができます.
- returnCard
- 偵察を使い,カードを引いた時に,カードを山札に戻します(input.returnCards).
- resolveFlags(オプショナル)
- フラッグを取るこの関数が,actionの前後で呼ばれます.
- 何も実装しないと,全てのフラッグについて,取ることができれば取ります.
- win(オプショナル)
- ゲームに勝利したときに呼ばれます.(機械学習用)
- lose(オプショナル)
- ゲームに敗北したときに呼ばれます.(機械学習用)
TheFool.javaがサンプルとなっていますのでぜひ一度ご覧ください.
さいごに
誰か強いAIを開発してください。