0

私のマスターマインドゲームでは、6色ではなく6つの数字を使用しています。また、白黒のペグを表示する代わりに、2つの文だけが出力されます。1つは読む:

"正しい位置の正しい桁数は__"(黒いペグ/両方右) "間違った位置の正しい桁数は__"(白いペグ/ numberRight)

送信される4桁の推測には、4つの入力ボックスから4つの値を受け入れるguessArrという配列を使用しています。

    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

まず、前もって言いますが、これは学習演習であるため、言語を学ぶことができるか、クラスの問題であるため、コードは提供しません。

それで、これを論理的に考えてみましょう...これを解決できる1つの方法は、色の種類の数を数えることです。

例として、プレーヤーが2つの青と2つの緑を推測し、答えに1つの青、1つの赤、2つの緑があるとします。

プレーヤーは適切な色を3つ推測したので、適切な場所にいくつかある場合を除いて、3つの白いペグを与えます。ここで、適切な場所でこれらのブルーの1つを取得したとします。つまり、白いペグの代わりに1つの黒いペグがあります。したがって、総計は2つの白いペグと1つの黒いペグです。

したがって、「正しい色」の数を見つけるには、各色をチェックし(ループの可能性が高いですか?)、プレーヤーが推測した各色の数を、ソリューションの各色の数と比較する必要があります。

言い換えれば、推測と答えを比較したくないということです。推測での各色の数を、ソリューションでの各色の数と比較する必要があります。

次に、次の疑似コードで「ホワイトペグ」を取得します。intwhitePegs =correctColors-blackPegs;

編集1:一度に1色ずつ答えを比較する

各色のカウントを保持する場合は、2つの配列を使用する必要があります。1つは推測用で、もう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 に答える