ゲームヤッツィーでは、プレイヤーはターンごとに5面のサイコロを5回転させ、1ターンにつき3回までダイスを振って、ロール間でダイスを節約し、次にロールに使用するカテゴリを選択します。これは、カテゴリがなくなるまで続きます(13ターン後に発生します)。次に、プレイヤーのスコアが集計され、最高スコアのプレイヤーが勝ちます。
カテゴリは次のとおりです(「サイコロの合計」は、指定されたサイコロのピップ数を合計することを意味します)。
- 上段
- エース:1ピップを示すサイコロの合計
- Twos:2ピップを示すサイコロの合計
- Threes:3ピップを示すサイコロの合計
- Fours:4ピップを示すサイコロの合計
- ファイブ:5ピップを示すサイコロの合計
- Sixes:6ピップを示すサイコロの合計
- 下段
- スリーオブカインド:同じ値を持つ3つのサイコロ、スコアはすべてのサイコロの合計
- フォーオブカインド:同じ値を持つ4つのサイコロ、スコアはすべてのサイコロの合計
- フルハウス:1つの値を持つ3つのサイコロと別の値を持つ2つのサイコロ、スコアは25
- スモールストレート:4つの連続したサイコロ、スコアは30
- ラージストレート:5連続ダイス、スコアは40
- ヤッツィー:同じ値を持つ5つのサイコロすべて、スコアは50
- チャンス:サイコロの任意の組み合わせ、スコアはすべてのサイコロの合計
カテゴリの選択に関するいくつかのルールがあります。
- プレイヤーがロールと一致しないカテゴリーを選択した場合、そのカテゴリーのスコアは0になります。
- プレイヤーが上部セクションで少なくとも63のスコアを獲得した場合、35ボーナスポイントを受け取ります。
- プレイヤーがヤッツィーを振ったが、ヤッツィーのカテゴリーがすでに取られている場合(別のヤッツィーが-ミスで0を入力してもカウントされません)、100ポイントのボーナスを受け取ります。このボーナスは、最初の後にすべてのヤッツィーに対して授与されます。
- さらに、プレーヤーはカテゴリの入力を選択する必要があります。ロールに対応する上部セクションのカテゴリーを選択する必要があります(たとえば、5 6のロールをSixesカテゴリーに配置する必要があります)。対応する上部セクションカテゴリが既に使用されている場合、下部セクションカテゴリにYahtzeeを使用できます(この場合、フルハウス、スモールストレート、またはラージストレートを選択すると、0ではなく通常のポイントが付与されます)。下位セクションのカテゴリがすべて使用された場合、ヤッツィーはスコア0の未使用の上位セクションカテゴリに適用されます。
チャレンジ
このチャレンジでは、競技者はヤッツィーの1000ゲームをプレイします。各ゲームの終了時に、最高得点の提出物は1ポイントを受け取ります。すべてのゲームが終了した後、最も多くのポイントを持つ提出が勝ちます。同点がある場合、同点が壊れるまで、同点提出物のみで追加のゲームがプレイされます。
コントローラ
完全なコントローラコードは、このGitHubリポジトリにあります。プレイヤーが対話するパブリックインターフェイスは次のとおりです。
public interface ScorecardInterface {
// returns an array of unused categories
Category[] getFreeCategories();
// returns the current total score
int getScore();
// returns the current Yahtzee bonus
int getYahtzeeBonus();
// returns the current Upper Section bonus
int getUpperBonus();
// returns the current Upper Section total
int getUpperScore();
}
public interface ControllerInterface {
// returns the player's scorecard (cloned copy, so don't try any funny business)
ScorecardInterface getScoreCard(Player p);
// returns the current scores for all players, in no particular order
// this allows players to compare themselves with the competition,
// without allowing them to know exactly who has what score (besides their own score),
// which (hopefully) eliminates any avenues for collusion or sabotage
int[] getScores();
}
public enum Category {
ACES,
TWOS,
THREES,
FOURS,
FIVES,
SIXES,
THREE_OF_A_KIND,
FOUR_OF_A_KIND,
FULL_HOUSE,
SMALL_STRAIGHT,
LARGE_STRAIGHT,
YAHTZEE,
CHANCE;
// determines if the category is part of the upper section
public boolean isUpper() {
// implementation
}
// determines if the category is part of the lower section
public boolean isLower() {
// implementation
}
// determines if a given set of dice fits for the category
public boolean matches(int[] dice) {
// implementation
}
// calculates the score of a set of dice for the category
public int getScore(int[] dice) {
// implementation
}
// returns all categories that fit the given dice
public static Category[] getMatchingCategories(int[] dice) {
// implementation
}
}
public class TurnChoice {
// save the dice with the specified indexes (0-4 inclusive)
public TurnChoice(int[] diceIndexes) {
// implementation
}
// use the current dice for specified category
public TurnChoice(Category categoryChosen) {
// implementation
}
}
public abstract class Player {
protected ControllerInterface game;
public Player(ControllerInterface game) {
this.game = game;
}
public String getName() {
return this.getClass().getSimpleName();
}
// to be implemented by players
// dice is the current roll (an array of 5 integers in 1-6 inclusive)
// stage is the current roll stage in the turn (0-2 inclusive)
public abstract TurnChoice turn(int[] dice, int stage);
}
さらに、にはいくつかのユーティリティメソッドがありUtil.java
ます。これらは主にコントローラーのコードを単純化するためにありますが、必要に応じてプレイヤーが使用できます。
ルール
- プレイヤーは、
Scorecard.getScores
メソッドを使用してすべてのプレイヤーの現在のスコアを見る以外の方法で相互作用することはできません。これには、他のプレイヤーと共謀したり、パブリックインターフェイスの一部ではないシステムの一部を操作して他のプレイヤーを妨害したりすることが含まれます。 - プレーヤーが違法な動きをした場合、トーナメントに参加することはできません。違法な動きを引き起こす問題は、トーナメントの実行前に解決する必要があります。
- トーナメントの実行後に追加の提出が行われた場合、新しいトーナメントは新しい提出で実行され、勝った提出はそれに応じて更新されます。ただし、私は新しいトーナメントの実行を迅速に行うことを保証しません。
- 提出は、実際のゲームルールから逸脱する原因となるコントローラーコードのバグを悪用することはできません。バグを(コメントやGitHubの問題で)指摘してください。修正します。
- Javaのリフレクションツールの使用は禁止されています。
- JVMとのインターフェースに必要な追加コードを提供する限り、JVM上で実行される言語、またはJavaまたはJVMバイトコード(ScalaやJythonなど)にコンパイルできる言語を使用できます。
最終コメント
コントローラーに追加したいユーティリティメソッドがある場合は、コメントを入力するか、GitHubで問題を作成します。ルール違反や情報の公開が許可されていない場合は追加します。プレイヤーは誰でもありません。自分で作成して、GitHubでプルリクエストを作成する場合は、さらに良い方法です!
ACES
?もしかしてONES
ですか?これらはサイコロであり、カードではありません。