はじめに
Codingameのローカル対戦環境を用意するときに、Java周りの環境構築が難しかったのでdockerでポンするようにした
cg-brutaltesterを使用して、CLIでローカル対戦を行うことを目的としています
GUIで対戦を見たい場合の環境構築は以下を参照してください
前提
dockerの詳しい説明は省きます
docker-desktopなどをインストールしてdockerコマンドが使えるようになっていればできるはずです
環境構築
必要なリポジトリをcloneする
git clone https://github.com/EmulsionBondo/CodingameLocalBattle.git cd CodingameLocalBattle
CodingameのRefreeをcloneする
利用可能なものの一覧はこちらにあります
今回は通称おばあちゃんことFall Challenge2020のものをcloneします
cg-brutaltesterには記載されていませんが、対応してくれたリポジトリがあったのでそちらを使用します*1
git clone https://github.com/FrogChopi/FallChallenge2020_brutaltester
cg-brutaltesterの実行ファイルをダウンロード
curl -OL https://github.com/dreignier/cg-brutaltester/releases/download/1.0.0/cg-brutaltester-1.0.0.jar
Refreeのビルド
docker run -it --rm --name my-maven-project --platform linux/amd64 -v $PWD/FallChallenge2020_brutaltester/:/usr/src/mymaven -w /usr/src/mymaven maven:3.3-jdk-8 mvn clean install package mv FallChallenge2020_brutaltester/target/fall-2020-1.0-SNAPSHOT.jar ./
ローカル対戦環境のdockerを立てる
docker build -t local_battle --platform linux/amd64 ./ docker run -it -d --name local_battle --platform linux/amd64 -v $PWD:/work local_battle
docker上でcg-burutaltesterを動かす
以下のコマンドでローカル対戦が実行されます
docker exec local_battle java -jar cg-brutaltester-1.0.0.jar -r "java -jar fall-2020-1.0-SNAPSHOT.jar" -p1 "python3 test.py" -p2 "./a.out" -n 1
-p1
でplayer1のAI、-p2
でplayer2のAI、-n
で対戦数を指定します
a.out
のような実行ファイルを指定する場合、docker上の環境と違うとエラーが出るかもしれないです
C++の場合、以下でdocker上でビルドできるようにしています
プログラムはpathを指定するなり、CodingameLocalBattle
ディレクトリに持ってくるなりよしなにしてください
docker exec local_battle g++ -std=gnu++17 -O2 a.cpp -o a.out
実行が終わると以下のような出力が出ます
01:40:47,055 INFO [com.magusgeek.brutaltester.Main] Referee command line: java -jar fall-2020-1.0-SNAPSHOT.jar 01:40:47,059 INFO [com.magusgeek.brutaltester.Main] Player 1 command line: python3 test.py 01:40:47,059 INFO [com.magusgeek.brutaltester.Main] Player 2 command line: ./a.out 01:40:47,059 INFO [com.magusgeek.brutaltester.Main] Number of games to play: 1 01:40:47,060 INFO [com.magusgeek.brutaltester.Main] Number of threads to spawn: 1 01:40:53,751 INFO [com.magusgeek.brutaltester.GameThread] End of game 1 0.00% 0.00% 01:40:53,754 INFO [com.magusgeek.brutaltester.Main] *** End of games *** +----------+----------+----------+ | Results | Player 1 | Player 2 | +----------+----------+----------+ | Player 1 | | 0.00% | +----------+----------+----------+ | Player 2 | 0.00% | | +----------+----------+----------+
こどげの初期プログラムを使っているのでどちらも0.00%
になっていますが、ちゃんと動くプログラムに差し替えれば勝率が変動します
終わりに
Javaの環境にブチギレた結果できあがった
cg-brutaltesterに対応したRefreeが公開されていれば、基本的には同様に動くはず
動かないとかあればお気軽にどうぞ
GUIの方もそのうち試して見るかも
*1:対応リポジトリがない場合でもpom.xmlの修正とCommandLineInterface classを追加することで同様に環境構築が出来ます。じろうさんのブログでその手順が紹介されているのでコンテスト開催してすぐなどまだ対応リポジトリがない場合はそちらを参照ください codingame 2023春 ローカル環境構築(自分用メモ) - じろうのブログ