私はあなたが与えられた要件に対する解決策を提供しているとは思わない:
- 2人のプレイヤー(ただし、3人含まれている - ジョー、デイブとクルトが)。
- プレーヤーが2つ連続している場合、そのプレーヤーのスコアはリセットされます(たとえば、Daveが1つをロールし、次のターンに別のロールをロールすると、スコアは0にリセットされます)。
私の以前の答えでは、あなたのコードをきちんと整理しようとしていました。私は実際の要件を見ていませんでした。
プレイヤーがサイコロの1ポイントにつき1ポイントを獲得した場合、またはポイントした値がスコアに加算された場合は、あなたは言及していません。私はそれが後者であると仮定しよう。
「プレーヤー」という別のクラスを含める必要があります。 Playerクラスには、現在のロールの内容、前のロールのロール、プレーヤーの現在のスコアを格納する変数が含まれています。また、サイコロを振る方法、プレイヤーが100点に達しているかどうかをチェックし、プレイヤーが2つの連続したものをロールしたかどうかをチェックする方法も含まれていなければなりません。
はここで非常に単純な実装です(勝者がで勝ったことは、最後に勝ったプレイヤーを教えてくれますし、どのように多くのポイント):
import java.util.Random;
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
class PigGame
{
public static void main(String[] args)
{
Player player1 = new Player("Dave");
Player player2 = new Player("Joe");
int roll_count = 0;
while (!player1.reachedFinishingScore() && !player2.reachedFinishingScore())
{
int p1_roll = player1.roll();
int p2_roll = player2.roll();
System.out.println("-----------------------------------------------------");
System.out.println("Roll number: " + roll_count++);
System.out.println("-----------------------------------------------------");
System.out.println(player1.get_name() + " rolled: " + p1_roll + ". Total Score: " + player1.get_score());
System.out.println(player2.get_name() + " rolled: " + p2_roll + ". Total Score: " + player2.get_score());
System.out.println("");
}
if (player1.get_score() == player2.get_score())
System.out.println("It was a draw!");
else if (player1.get_score() > player2.get_score())
System.out.println(player1.get_name() + " wins by " + (player1.get_score() - player2.get_score()) + " points!");
else
System.out.println(player2.get_name() + " wins by " + (player2.get_score() - player1.get_score()) + " points!");
System.out.println("");
}
}
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
class Dice {
public int roll() { return new Random().nextInt(6) + 1; }
}
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
class Player
{
private String name; // Player's name.
private int prev_roll = 0; // Value of Player's previous roll.
private int curr_roll = 0; // Value of Player's current roll.
private int score = 0; // The Player's score.
public Player(String name) { this.name = name; }
public int roll()
{
int curr_roll = new Dice().roll();
this.prev_roll = this.curr_roll; // Make previous roll value of last current roll.
this.curr_roll = curr_roll; // Set value of current roll to what was just rolled.
this.score += curr_roll;
if (rolledTwoOnes()) this.score = 0;
return curr_roll;
}
private boolean rolledTwoOnes() { return (this.prev_roll == 1 && this.curr_roll == 1); }
public boolean reachedFinishingScore() { return this.score >= 100; }
public int get_score() { return score; }
public String get_name() { return this.name; }
}
上記の実装は、「ハードないことによって改善することができましたコーディング "player1とplayer2。代わりに、選手の数を制限することなく(つまり100人の選手を選ぶことができるように)選手の配列を使用することができます。
**あなたのループが始まる前に、サイコロを振るだけです**。そして、ループが実行されている間、彼らはずっと同じ値を持っています。 –
どうすればこの問題を解決できますか? – agradable
ループ内のダイスを再ロールします。 – Berger