对于我的计算机科学课,我们正在制作一个骰子游戏,你可以每次掷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
答案 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);