嘘つきのサイコロはかなりシンプルなサイコロゲームです。ルールにはいくつかの異なるバリエーションがありますが、最もよく知っているバージョンは次のとおりです。
- 各プレイヤーは5d6で始まります
- ラウンドの終わりにサイコロを集計する場合を除き、各プレイヤーは自分のサイコロを見ることができますが、どの敵のものも見ることはできません
- 任意のラウンドの開始時に、すべてのプレイヤーは現在持っているサイコロを転がします
- 次に、1人のプレーヤー(通常、これは前のラウンドの勝者または前回開始したプレーヤーの左側のプレーヤーのいずれかです。このKotHには前者を使用します。ランダムなプレーヤーが最初のラウンドを開始します)テーブルに特定の数字がいくつあるかを推測します(ONES ARE WILD)
- 入札は右側に続き、毎回高くなります(たとえば、3 5、3 6、4 2はすべて3 4よりも高くなりますが、3 3はそうではありません。4が高くなりますが、1に入札するとおそらく不利益); いずれかのプレイヤーがその前のプレイヤーを嘘つきと呼ぶまで
- この時点で、すべてのプレイヤーはサイコロを公開し、テーブルで最後に入札した数をすべてカウントします
- 合計が入札よりも低い場合、入札を行ったプレーヤーは、彼らを嘘つきと呼んだプレーヤーにダイスを与えなければなりません。そうでなければ、入札者を嘘つきと呼んだプレーヤーは、入札者にダイスを与えなければなりません彼らが少なくとも彼が入札した数と同じ数であれば、正確な数である必要はありません)
- あなたがサイコロを使い果たすと、あなたは失う
- 最後のプレイヤーが勝ちます
例えば:
プレイヤー1には1,1,2,4,6があります プレイヤー2には1,2,2,3,5があります プレイヤー3には1,3,3,4,6があります プレイヤー1:3つのシックス。 プレイヤー2:4 2。 プレイヤー3:フォースリー。 プレイヤー1:5 2。 プレイヤー2:6 2。 プレイヤー3:6人のスリー。 プレーヤー1:6人の4人。 プレイヤー2:うそつき! 彼らはサイコロを公開し、(サイコロがワイルドであるため)サイコロとフォーを数えます。 実際には、正確に6つのフォーがあります。 したがって、プレイヤー2はプレイヤー1にダイスを与えます。 彼らはリロールし、プレイヤー1は次のラウンドを開始します。
このゲームをプレイするにはボットを作成する必要があります。次の抽象Javaクラスを実装する必要があります。
public abstract class Player {
public Player() {}
public String toString() {
return this.getClass().getSimpleName();
}
public abstract String bid(int yourId, int[] diceEachPlayerHas, int[] yourDice, String[] bids);
}
- 入札方法を実装する必要があります
- 最初の引数はターン順でのボットの現在位置、2番目は各プレイヤー(自分を含む)が現在持っているサイコロの数を示す配列、3番目は自分のサイコロに現在表示されている値を示す配列、4番目は現在のラウンドの開始以降に行われたすべての入札の配列-ラウンドの最初の入札を行っている場合、長さ0になります
- 出力は、「number face」形式の文字列、または「Liar!」文字列のいずれかである必要があります。前の入札者を嘘つきと呼ぶ。
- 出力が不正にフォーマットされている場合、排除されます。
- toStringメソッドをオーバーライドできますが、必須ではありません。ただし、コントローラーの出力の可読性を妨げるような方法で編集することはできません。
- コントローラーの他のパブリックメソッドを呼び出すことは許可されていますが、メインメソッドを呼び出すことは許可されていません。
- ボット自身の名前のプレフィックスが付いた実行ディレクトリ内のファイルのみを読み取り、編集できます
- 他のソースからの入力を許可されていません
- インスタンス変数は各新しいゲームの開始時にリセットされますが、静的変数はリセットされません。
得点
- ボットが追加されるたびに(3つ以上のボットが送信されるとすぐに)、それぞれ3〜5人のプレイヤーで構成される1,000のゲームのセットがシミュレートされ、コントローラーソースに表示されたスコア(任意のゲームで、各ターンの開始時に1、ダイスを獲得するたびに10、獲得した場合は1,000のボーナスを獲得します。各ゲームで5,000ターン(ラウンドではなく)の制限を強制します。
- ボットは、最新のゲームセットのスコアによってスコアリングされます。プラスでない場合、投票スコアの10倍。(後者はスコアに大きな影響を与える可能性は低いです)
コントローラのソースはここにあります。
2015-06-19現在のスコア:
Badnomial: 434,924 + 6x10 = 424,984
Nobody: 282,329 + 6x10 = 282,389
StraightShooter: 265,205 + 5x10 = 265,255
MostlyHonestAbe: 158,958 + 4x10 = 158,998
The Pirate: 157,005 + 1x10 = 157,015
Statistician: 144,012 + 2x10 = 144,032
Fidelio: 49,973 + 2x10 = 49,993
Absurd Bot: 6,831
DrHouse: 2,638 + 3x10 = 2,668
diceEachPlayerHas[yourId]
、サイコロの数は=でbids[yourId]
あり、最初の入札(または最初のターンの場合はnull)です。あれは正しいですか?