Java Netbeans 6.5 Mastermind计算白钉

时间:2013-01-26 06:25:50

标签: java netbeans

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

“正确位置的正确位数是__”(黑色桩/两个右) “错误位置的正确位数是__”(白钉/数字右)

对于提交的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谢谢。

1 个答案:

答案 0 :(得分:0)

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

所以,让我们从逻辑上考虑一下......你可以通过计算一种颜色的数量来解决这个问题。

举个例子,假设玩家猜到了2个蓝调,2个绿色,答案有1个蓝色,1个红色和2个绿色。

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

那么,要找到“正确颜色”的数量,你应该检查每种颜色(很有可能进行循环?)并将玩家猜测的每种颜色的数量与解决方案所具有的每种颜色的数量进行比较。

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

然后,你通过这个pesudo代码得到“白钉”: 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