あなたは、その支配下にある土地を増やしたいと思う進取の気性のある人です。これは非常に簡単です-現在の土地の外に出て、あなたの土地にループバックすると、そのループ内のすべてがあなたのものになります。しかし、キャッチがあります。他のドットが何らかの方法でループを見つけて交差すると、死にます。
まだ試していない場合は、Splix.ioにアクセスしてゲームを試してください。矢印キーを使用して、動きを制御します。
GIF
クレジット:http : //splix.io/
仕様
すべてのプレイヤーは、200x200ボード上のランダムな位置から始まります。(私はこれを変更する権利を留保します:)。可能な限り多くのポイントを集めるために、一定量の動きがあります。ポイントは以下によって集計されます:
- 殺したプレイヤーの数は300回
- ラウンド終了時に所有する土地の量
これは、他の人があなたの土地を盗むことができるというポイントをもたらします。彼らがあなたの土地の一部と交差するループを開始した場合、彼らはそれを主張することができます。ラウンド中に死亡した場合、そのラウンドのすべてのポイントを失います。
各ラウンドには、ランダムに選択されたプレーヤーのグループ(最大5人のユニークなプレーヤー)がいます(変更される場合があります)。すべてのプレイヤーが同数のラウンドに参加します。ボットの最終スコアは、ゲームごとの平均スコアによって決まります。各ゲームは2000ターンで構成されています(変更される場合もあります)。すべてのボットは同時に動きます。
死亡例
頭突き
両方のプレイヤーが頭を突き合わせて死ぬ。これは、両方のプレーヤーが自分のスペースの端にいる場合でも、まだ当てはまります。
ただし、自分の土地にプレイヤーが1人しかいない場合、他のプレイヤーは死亡します。
ラインクロス
この場合、紫色のプレイヤーのみが死亡します。
独自のラインを越えることはできません。
ボードを終了する
プレイヤーがボードから退出しようとすると、死亡してすべてのポイントを失います。
撮影エリア
プレイヤーは、トレイルがあるときにエリアをキャプチャし、自分の土地に再び入ります。
赤は2本の赤い線の間を塗りつぶします。プレーヤーが記入しない唯一のケースは、別のプレーヤーがループ内にいる場合です。明確にするために、これは自分が所有する土地だけでなく、他のプレイヤー自身がループにいるときにのみ適用されます。プレイヤーは他の人の土地を占領できます。プレイヤーがトレイルに囲まれたエリアを埋めることができない場合、トレイルは通常の土地に直接変換されます。他のプレイヤーの土地ループ内のプレイヤーが死亡した場合、そのループ内の領域は塗りつぶされます。プレイヤーが死亡するたびに、ボードは埋めることができるエリアを再検査されます。
コントローラーの詳細
コントローラーはこちらです。元のゲームと非常によく似ていますが、KotHおよび技術的な理由により適したものにするために、小さな変更が加えられています。@NathanMerrillのKotHCommライブラリを使用して構築されており、@ NathanMerrillの多大な支援も受けています。チャットルームのコントローラーで見つかったバグをお知らせください。KotHCommとの一貫性を保つため、コントローラー全体でEclipseコレクションを使用しましたが、ボットはJavaコレクションライブラリのみを使用して作成できます。
すべてがgithubリリースページの uberjarにパッケージ化されています。使用するには、ダウンロードしてプロジェクトに添付し、オートコンプリートに使用できるようにします(IntelliJの指示、Eclipse)。送信をテストするには、を使用してjarを実行しjava -jar SplixKoTH-all.jar -d path\to\submissions\folder
ます。にpath\to\submissions\folder
という名前のサブフォラーがあることを確認し、java
そこにすべてのファイルを配置します。ボットでパッケージ名を使用しないでください(KotHCommでは可能ですが、もう少し面倒です)。すべてのオプションを表示するには、を使用します--help
。すべてのボットをロードするには、を使用します--question-id 126815
。
ボットを書く
ボットの作成を開始するには、を拡張する必要がありますSplixPlayer
。
Direction makeMove(ReadOnlyGame game, ReadOnlyBoard board)
- ここで、ボットにどの動きをさせるかを決定します。nullを返してはいけません。
HiddenPlayer getThisHidden()
- の
HiddenPlayer
バージョンを取得しthis
ます。ボットをボードと比較するのに便利です。
- の
enum Direction
- 値
East
(x = 1; y = 0)West
(x = -1; y = 0)North
(x = 0; y = 1)South
(x = 0; y = -1)
Direction leftTurn()
- 取得
Direction
あなたが左折をした場合、あなたが得るだろう。
- 取得
Direction RightTurn()
Direction
右折した場合に得られるものを入手してください。
ReadOnlyBoard
これは、ボードにアクセスするクラスです。プレイヤーの位置が表示されたボードのローカルビュー(20x20)を取得するか、ボード上のポジションを所有および主張しているユーザーの情報のみを含むグローバルビュー(ボード全体)を取得できます。これはあなたがあなたの位置を得る場所でもあります。
SquareRegion getBounds()
- ボードのサイズを取得します。
MutableMap<com.nmerrill.kothcomm.game.maps.Point2D,ReadOnlySplixPoint> getGlobal()
- ボードのグローバルマップを取得します。
MutableMap<com.nmerrill.kothcomm.game.maps.Point2D,ReadOnlySplixPoint> getView()
getGlobal()
プレーヤーと同じ20x20の領域に制限され、プレーヤーの位置が表示されることを除いて、と同じです。
Point2D getPosition(SplixPlayer me)
- プレーヤーの位置を取得します。として使用し
board.getPosition(this)
ます。
- プレーヤーの位置を取得します。として使用し
Point2D getSelfPosition(ReadOnlyBoard)
- ボード上のあなたの位置を取得します。使用法:
Point2D mypos = getSelfPosition(board)
- ボード上のあなたの位置を取得します。使用法:
ReadOnlyGame
ReadOnlyGame
は、ゲームの残りのターン数へのアクセスのみを提供しますint getRemainingIterations()
。
ReadOnlySplixPoint
HiddenPlayer getClaimer()
HiddenPlayer
ポイントを主張している人のバージョンを取得します-主張=証跡。
HiddenPlayer getOwner()
- ポイントの所有者を取得します。
HiddenPlayer getWhosOnSpot()
- プレイヤーがこのポイントに配置されている場合、隠されたバージョンを返します。でのみ動作し
getLocal()
ます。
- プレイヤーがこのポイントに配置されている場合、隠されたバージョンを返します。でのみ動作し
Point2D
ここの他のクラスとは異なり、Point2D
KotHCommライブラリに含まれています。com.nmerrill.kothcomm.game.maps.Point2D
Point2D(int x, int y)
int getX()
int getY()
Point2D moveX(int x)
Point2D moveY(int y)
Point2D wrapX(int maxX)
x
の範囲内になるように値をラップしますmaxX
。
Point2D wrapY(int maxY)
y
の範囲内になるように値をラップしますmaxY
。
int cartesianDistance(Point2D other)
- これは、プレイヤーがポイントaからポイントbに移動するのに必要なターン数に変換されます。
Clojureのサポート
ClojureコンパイラはにバンドルされているSplixKoTH-all.jar
ため、ボットにClojureを使用できます。random_bot
使用方法については、my を参照してください。
ボットのデバッグ
コントローラーには、戦略のテストに役立つデバッガーが付属しています。開始するには、jarを実行します--gui
オプションを指定します。
あなたのjarファイルにデバッガをアタッチするには、従って、これらの命令のIntelliJのために、あるいはこれらの命令のEclipse(Eclipseのバージョンテストされていない)のために。
コードでデバッガーを使用している場合、これを使用してボットが見ているものを視覚化することができます。makeMove
ボットの先頭にブレークポイントを設定し、現在のスレッドのみを一時停止するようにします。次に、UIの[スタート]ボタンをクリックして、コードをステップ実行します。
さて、すべてをまとめるには:
ボットの実行
他のユーザーとボットを実行するには、リリースページでjarを実行する必要があります。フラグのリストは次のとおりです。
--iterations
(-i
)<=int
(デフォルト500
)- 実行するゲームの数を指定します。
--test-bot
(-t
)<=String
- ボットが含まれているゲームのみを実行します。
--directory
(-d
)<=パス- 送信を実行するディレクトリ。これを使用してボットを実行します。ボットがという名前のパスのサブフォルダーにあることを確認します
java
。
- 送信を実行するディレクトリ。これを使用してボットを実行します。ボットがという名前のパスのサブフォルダーにあることを確認します
--question-id
(-q
)<=int
(使用のみ126815
)- サイトから他の提出物をダウンロードしてコンパイルします。
--random-seed
(-r
)<=int
(デフォルトは乱数)- ランダムを使用するボットが結果を再現できるように、ランナーにシードを提供します。
--gui
(-g
)- トーナメントを実行する代わりに、デバッガーUIを実行します。に最適
--test-bot
です。
- トーナメントを実行する代わりに、デバッガーUIを実行します。に最適
--multi-thread
(-m
)<=boolean
(デフォルトtrue
)- マルチスレッドモードでトーナメントを実行します。これにより、コンピューターに複数のコアがある場合に、より高速な結果が得られます。
--thread-count
(-c
)<=int
(デフォルト4
)- マルチスレッドが許可されている場合に実行するスレッドの数。
--help
(-h
)- これに似たヘルプメッセージを出力します。
このページですべての提出を実行するには、を使用しますjava -jar SplixKoTH-all.jar -q 126815
。
投稿のフォーマット
コントローラーがすべてのボットをダウンロードできるようにするには、この形式に従う必要があります。
[BotName], Java // this is a header
// any explanation you want
[BotName].java // filename, in the codeblock
[code]
また、パッケージ宣言を使用しないでください。
スコアボード
+------+--------------+-----------+
| Rank | Name | Score |
+------+--------------+-----------+
| 1 | ImNotACoward | 8940444.0 |
| 2 | TrapBot | 257328.0 |
| 3 | HunterBot | 218382.0 |
+------+--------------+-----------+
ルールの一部が不明確な場合、またはチャットルームのコントローラーでエラーを見つけた場合はお知らせください。