Java GUI MasterMind

1

Я собираюсь сделать игру на Java, которая является Number Mastermind.

Теперь AI генерирует 4 числа от 1 до 6, и тогда пользователь должен угадать его.

Теперь у меня есть 20 минут интерфейса GUI, и я изо всех сил стараюсь, как наилучшим образом подойти к этому и использовать макеты.

Но мой вопрос таков:

Если случайное число равно 1122, как сравнить его с значениями угадывания и вывода в соответствии с вводом пользователей.

Например, 1122, а пользователь угадывает 1133, как я могу выводить RRWW r, означает правильное число и местоположение, а W означает неправильное?

Я слишком долго не делал java, так любопытно для меня.

  • 0
    Вы действительно должны сделать некоторые исследования самостоятельно. stackoverflow.com/help/how-to-ask
  • 0
    Что ты имеешь в виду?
Теги:

2 ответа

0

Не знаете, насколько вы знакомы с Mastermind, но, как правило, результатом для вашего примера будет только RR. Совершенно неправильные цифры технически не нужно обсуждать. Вместо этого W может представлять числа, которые находятся в коде, но не в том месте. Поэтому, если мы немного изменим ваш пример (сгенерированный код все равно может быть 1122, но теперь у пользователя теперь 1234), он будет генерировать результат R W. (1 правый и 1 в неправильном месте). Для достижения этого выглядит что-то вроде это:

public String compareGuessToCode(String guess,String code) {
    //Variable to store result to show the user
    String result = "";
    //Necessary variables for code comparison
    //These xxxCharCount variables are used to keep track of how many of each possible
    // character are used in the guess and the code.
    int[] guessCharCount = new int[6];
    int[] codeCharCount  = new int[6];
    //These variables are used for bookkeeping during the evaluation process
    int   guessCharVal   = 0;
    int   guessValPos    = 0;
    int   codeCharVal    = 0;
    int   codeValPos     = 0;
    //Variables to keep track of perfectly correct and wrong position characters
    int   r              = 0;
    int   w              = 0;
    //Set all positions in xxxCharCount to 0
    for (int i = 0; i < 6; i++) {
        guessCharCount[i] = 0;
        codeCharCount[i]  = 0;
    }
    //Analyze the code
    for (int i = 0; i < code.length(); i++) {
        codeCharVal = (int) code.charAt(i);
        codeValPos  = codeCharVal - 1;
        codeCharCount[codeValPos] += 1;
    }
    //Analyze the guess
    for (int i = 0; i < guess.length(); i++) {
        guessCharVal = (int) guess.charAt(i);
        guessValPos  = guessCharVal - 1;
        //Compare guess characters to code characters
        if (guess.charAt(i) == code.charAt(i)) {
            //Show the position as correct
            r++;
            //Increment the appropriate slot in the character counter
            guessCharCount[guessValPos]++;
        }
    }
    //We want to check if the any guess characters are in the code, but we also want
    //to ensure that we haven't already accounted for all occurrences of the
    //guessed character in the code.
    for (int i = 0; i < guess.length(); i++) {
        guessCharVal = (int) guess.charAt(i);
        if (code.contains(String.valueOf(guess.charAt(i))) && guessCharCount[guessValPos] < codeCharCount[guessValPos]) {
            //Show the character as present, but in the wrong spot
            w++;
            //Increment the appropriate slot in the character counter
            guessCharCount[guessValPos]++;
        }
    }
    //Build the result string...perfect first...
    for (int i = 1; i <= p; i++) {
        if (result.isEmpty()) {
            result += "P";
        } else {
            result += " P";
        }
    }
    //...wrong spot last
    for (int i = 1; i <= p; i++) {
        if (result.isEmpty()) {
            result += "X";
        } else {
            result += " X";
        }
    }
    return result;
}
0

Вы можете сделать int в String, затем в char[] и сравнить каждое из значений и поместить их в массив boolean[] который сообщает, правильно ли они получили правильное или неправильное значение. Например:

boolean[] howManyRight(int number, int guess, int length){
    char[] n = String.valueOf(number).toCharArray();
    char[] g = String.valueOf(guess).toCharArray();
    boolean[] rightAnswers = new boolean[length];        

    for(int i = 0; i < length; i++){
        boolean[i] = n[i] == g[i];
    }

    return rightAnswers;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню