0

对于我的策划游戏,我使用 6 个数字而不是 6 种颜色。也不是显示黑色和白色的钉子,而是只输出 2 个句子。一读:

"正确位置的正确位数是__"(黑色钉子/bothRight) "错误位置的正确位数是__"(白色钉子/numberRight)

对于提交的 4 位猜测,我使用了一个名为guessArr 的数组,它接受来自 4 个输入框的 4 个值。

    guess0 = Integer.parseInt(firstInput.getText());
    guess1 = Integer.parseInt(secondInput.getText());
    guess2 = Integer.parseInt(thirdInput.getText());
    guess3 = Integer.parseInt(fourthInput.getText());

    //New array to arrange guesses
    int[] guessArr = new int[] {guess0,guess1,guess2,guess3};

对于计算机生成的答案,

    //Create a 4 digit code made of random numbers between 1 and 6
    answerArr[0]=(int)(Math.random()*6+1);
    answerArr[1]=(int)(Math.random()*6+1);
    answerArr[2]=(int)(Math.random()*6+1);
    answerArr[3]=(int)(Math.random()*6+1);

找到黑色钉子的数量很容易:

 //Calculate number of correct digits in correct position


 for (int i = 0; i < 4; ++i)
{
    if (answerArr[i] == guessArr[i])
    {
    used[i] = true;
    bothRight++;
    }
}

编辑

我已经解决了!

    // Calculate number of correct numbers in wrong position

    //Declare variables for what digits are in the answer
    Integer digit1 = 0, digit2 = 0, digit3 = 0, digit4 = 0, digit5 = 0 , digit6 = 0;


    //Find what the answer digits are
    for (int k = 0; k < answerArr.length; ++k){


    if (answerArr [k] == 1)
    {
        digit1++;
    }


       if (answerArr [k] == 2)
    {
        digit2++;
    }

       if (answerArr [k] == 3)
    {
        digit3++;
    }

       if (answerArr [k] == 4)
    {
        digit4++;
    }

       if (answerArr [k] == 5)
    {
        digit5++;
    }

       if (answerArr [k] == 6)
    {
        digit6++;
    }

  }






    //Declare variables for what digits are in the answer
   Integer gDigit1 = 0, gDigit2 = 0, gDigit3 = 0, gDigit4 = 0, gDigit5 = 0 , gDigit6 = 0;

   //Find the guess numbers submitted

    for (int p = 0; p < guessArr.length; ++p){

    if (guessArr [p] == 1)
    {
        gDigit1++;

    }

    else if (guessArr [p] == 2)
    {
        gDigit2++;

    }


        else if (guessArr [p] == 3)
    {
        gDigit3++;

    }


        else if (guessArr [p] == 4)
    {
        gDigit4++;
    }


        else if (guessArr [p] == 5)
    {
        gDigit5++;
    }


        else if (guessArr [p] == 6)
    {
        gDigit6++;
       if (gDigit6 == 0)
       {
         gDigit6++;
       }
    }


       //Find the value of correct numbers submitted in the guess
       Integer correctNumbers = Math.min  (digit1, gDigit1) +  Math.min  (digit2, gDigit2) + Math.min  (digit3, gDigit3) +
                                            Math.min  (digit4, gDigit4) +  Math.min  (digit5, gDigit5) + Math.min  (digit6, gDigit6);


       //Calculate value of numberRight
       numberRight = (correctNumbers - bothRight);
  }

任何帮助将不胜感激。:D 谢谢。

4

1 回答 1

0

首先,我要提前说,我不会给你任何代码,因为这要么是一个学习练习,所以你可以学习语言,否则这是一个课堂问题。

所以,让我们从逻辑上考虑一下……解决这个问题的一种方法是计算一种颜色的数量。

例如,假设玩家猜出 2 个蓝色和 2 个绿色,答案是 1 个蓝色、1 个红色和两个绿色。

玩家猜对了 3 个颜色,所以你会给他们 3 个白色钉子,除非他们在正确的位置找到了一些。现在,假设他们在正确的位置获得了其中一个蓝色,这意味着他们有 1 个黑色钉子,它取代了一个白色钉子。因此,总计是 2 个白色钉子和 1 个黑色钉子。

因此,要找到“正确颜色”的数量,您应该检查每种颜色(循环的好机会?)并将玩家猜测的每种颜色的数量与解决方案具有的每种颜色的数量进行比较。

换句话说,您不想将猜测与答案进行比较。您想将猜测中每种颜色的计数与解决方案中每种颜色的计数进行比较。

然后,您通过这个伪代码得到“白色钉子”: int whitePegs=correctColors-blackPegs;

编辑 1:一次比较一种颜色的答案

如果您要保留每种颜色的计数,那么您将要使用两个数组,一个用于猜测,一个用于解决方案。数组中的每个元素都将保存颜色的计数,如下所示:

r=red, o=orange, y=yellow, etc.
         R  O  Y  G  B
Guess:  [0][2][1][1][0] (Total is 4, for 4 pegs
Actual: [1][1][2][0][0] (Total is 4) for 4 pegs
Matches:[0][1][1][0][0] (Total is 2) This is "correctColors" from above
于 2013-01-26T06:39:44.183 回答