我的任务是在Java程序上制作“Yahtzee”游戏。 除了Small Straight方法,我差不多完成了。 (无法弄清楚。)
小直是当骰子得到4连胜数。 (例如,12334,23345,34556等)
这是我的isSmallStraight方法代码(此代码未完成!):
public static boolean isSmallStraight(List<Die> dice) {
boolean result = false;
List<Die> copy = new ArrayList<Die>(dice);
Collections.sort(copy);
List<Die> testCase1 = new ArrayList<Die>();
testCase1.add(new Die(1));
testCase1.add(new Die(2));
testCase1.add(new Die(3));
if(copy.containsAll(testCase1)) {
result = true;
System.out.println(result);
}
return result;
}
我想在这里做的是从主方法(List dice)传递5个随机数的骰子并将它们放入“复制”对象中。 由于我需要使用java.util.List.containsAll()方法(要求),我想我需要将另一个对象“testCase1”与“copy”进行比较。 (如果你有其他方法来解决这个问题,至少你使用java.util.containsAll()方法就好了。)
然而,我现在还不知道的是,如果我使用dice.add(new Die(3)),这意味着程序从1,2和3中选择随机数。(不会死3) - 另外,它给了我编译时错误。
所以,我想知道如何将“testCase1”,2,3,4和5的骰子特定数量1,2,3和4存储为“testCase2”和3,4,5,以及6为“testCase3”并使用copy.containsAll(testCase1)成为真。
请尽快帮助我!
PS。模特班已经由我的教授编程。 (所以,不能在Die类中改变任何东西)。
答案 0 :(得分:5)
答案 1 :(得分:1)
我喜欢使用的方法(对于大型和小型直道以及所有其他评分)是从包含骰子值的int数组创建一个新的int数组。像这样:
int[] numDice = new int[6];
for (int i: diceValues)
numDice[i-1] += 1;
这会计算所有骰子并按顺序将每个骰子的数量放在一个新数组中。例如,如果您掷出的5个骰子分别为3,4,3,1和6,则您的新数组将为{1,0,2,1,0,1},并且所有4的yahtzee将变为{ 0,0,0,5,0,0}。从这个新阵列中确定所有分数是相当微不足道的。对于直道:
int straightCount = 0;
for (int i: numDice) {
if (i > 0)
straightCount++;
else
straightCount = 0;
if (straightCount > 3)
smallStraight = true;
if (straightCount > 4)
largeStraight = true;
}
如果您愿意,可以使用此数组轻松确定一个简短方法中的所有有效分数,并将布尔值存储在一个数组中。