全国高等専門学校プログラミングコンテスト2019 競技部門に参加しました. 宮崎県都城市で開催され,1回戦敗退でした.(チームの多くが通信できない)
ルール概要
陣取りゲームで,2プレイヤーがそれぞれ最大8つのエージェントを2プレイヤー同時に動かしていきます.
Rule
エージェントは8方向に動くことができます. エージェントが動いた後のマスは陣地となります. 陣地となったマスは相手チームのエージェントは入ることができません. 1ターン消費して.そのマスを陣地から解放する作業が必要になります. 得点としては2種類あって,まずは「占有得点」について説明します. 占有得点は,エージェントが通った後,陣地になったマスがそのまま得点となります. それぞれのマスに最大16点,最低-16点割り振られています. 一方,「包囲得点」は,陣地によってマスを囲むと,そのマスの絶対値が得点となります. つまり,-16のマスを占有で得点すると,16点引かれてしまうのに対して,囲って得点すると,16点もらえるということになります. 囲むときに,頂点の部分は陣地である必要があります.
Image
コンポーネント全体
サーバと通信したり,AIの手を表示したりするInterfaceと,思考するAIに分かれます. 私はすべてに関わりました.
IPC
前回から変更なしです.
Interface
通信や,手の表示をしたりします. .NET CORE 3.0, WPF, ZXing.Netを用いました.
Image
AI
2体の場合は,交互ゲームとみなし,minimax法を用いました. エージェントの多い場合は,1体ずつ動かして,探索します. 評価値の工夫として,そのままゲームの得点を使うのではなく,包囲得点を減点したり,自陣の分散度合いを吟味したりしました.
乾草した感想
JSON解析部門ってマジですか!?
テストプログラム事前に公開するって言ってたのに…約束守ってよ…ドキュメントも不明瞭でアッ…
(Q.下級生のプログラミングの授業で,これを発表させられる人間の気持ちを答えよ(これ発表してよかったんか…?))
というか時間制限のあるゲームでREST APIとJSON使うな