“Yahtzee”游戏Java编程

时间:2013-09-23 19:28:30

标签: java

我的任务是在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类中改变任何东西)。

2 个答案:

答案 0 :(得分:5)

将数字放入TreeSet以删除重复项并免费排序。

如果出现以下情况,您将有4个骰子:

  1. 该集合恰好包含4个数字
  2. 最大和最小之间的差异是3

答案 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;
}

如果您愿意,可以使用此数组轻松确定一个简短方法中的所有有效分数,并将布尔值存储在一个数组中。