Java骰子游戏中的得分有问题吗?

时间:2016-02-23 18:52:54

标签: java logic nested-loops

对于我的计算机科学课,我们正在制作一个骰子游戏,你可以每次掷5个骰子,目标是尽可能多地匹配骰子。点数用2 ^(n-1)计算,其中n是匹配的骰子数。例如如果你的骰子是2,3,3,4,4,你将获得2 ^ 1 + 2 ^ 1分,或4分。如果所有5个骰子匹配,你得到16分(2 ^(5-1)),如果你有3,3,2,3,2,你得到6分(我花了一段时间来弄清楚得分如何工作,这就是我给出这么多例子的原因)。所以我对游戏的机制没有任何问题,我做到了这样你就可以掷骰子3次和一切,但我真的很难在最后计算得分。这是我到目前为止的代码,它计算分数的部分(die1等是卷的值,例如die1 = 3):

    int matchCount =0;
    int diceArray[]= {die1,die2,die3,die4,die5};
    System.out.println("Your dice are "+die1+", "+die2+", "+die3+", "+die4+", "+die5);
    for (int i =0;i <diceArray.length;i++){
        for (int j=0;j<diceArray.length;j++){
            if (diceArray[j]==diceArray[i]&&j!=i){
                matchCount +=1;
            }//if 
        }//for j
    }//for i
    matchCount /=2;
    System.out.println("You scored "+Math.pow(2, matchCount-1)+" points!");

上面的代码有效,但它没有计算出正确的分数。我认为我需要做的是有两个matchCount变量,所以我可以分别处理每对匹配的骰子,因为如果它是一个2-Dice匹配,我可以做类似matchCount +=1的事情,但是如果这是匹配的3,我必须matchCount +=1然后matchCount /= 2。然后在最后添加这两个(当我试图解决这个问题时,我正在使用3,3,2,3,2作为我的例子)。我真的不知道如何实现这一目标。

我认为这个问题是类似的,但我不知道那是什么语言,但它可能会帮助任何试图帮助我的人:Need help on figuring out dice game scoring logic

4 个答案:

答案 0 :(得分:1)

使用单独的数组来计算每个滚动数字的出现次数。

int diceArray[]= {die1,die2,die3,die4,die5};
System.out.println("Your dice are "+die1+", "+die2+", "+die3+", "+die4+", "+die5);
int[] rolls = new int[]{0,0,0,0,0,0}; //1 - 6 respectively
for (int i: diceArray){
    rolls[i-1] ++;
}
int score = 0;
for(int j: rolls){
    if(j>1){
        score += Math.pow(2,j-1);
    }
}
System.out.println("You scored "+score+" points!");

答案 1 :(得分:0)

长度为array / Hashmap并将所有元素初始化为0.在每次掷骰子时,递增数组中的相应索引。例如。如果滚动4,则将数组[3]递增1.最后,遍历数组并获取大于1的值。将这些值用作n值并计算最终得分。

答案 2 :(得分:0)

使matchCount成为一个数组,它计算一个数字出现的次数:

int[] matchCount = {0,0,0,0,0,0};
for (int i=0;i<diceArray.length;i++)
{
    matchCount[diceArray[i]]++;
}

int total = 0;
for (int i=0;i<matchCount.length;i++)
{
    if (matchCount[i]>1)    //Like in examples, ignore matchCounts of 1
        total += Math.pow(2, matchCount[i]-1);
}

总计将是得分。

答案 3 :(得分:0)

通过在每次迭代后连续添加分数,我的路线略有不同。试试这个:

int matchCount = 0;
double score = 0.0;
int diceArray[]= {die1,die2,die3,die4,die5};
for (int i=0; i<diceArray.length; i++){
    int checkAgainst = diceArray[i];
    for (int j=0; j<diceArray.length; j++){
        if (checkAgainst == diceArray[j]){
            matchCount++;
        }
    }
    if (matchCount > 1){
        score += Math.pow(2,matchCount-2);
    }
    matchCount = 0;
}
System.out.println(score);