Я собираюсь сделать игру на Java, которая является Number Mastermind.
Теперь AI генерирует 4 числа от 1 до 6, и тогда пользователь должен угадать его.
Теперь у меня есть 20 минут интерфейса GUI, и я изо всех сил стараюсь, как наилучшим образом подойти к этому и использовать макеты.
Но мой вопрос таков:
Если случайное число равно 1122, как сравнить его с значениями угадывания и вывода в соответствии с вводом пользователей.
Например, 1122, а пользователь угадывает 1133, как я могу выводить RRWW r, означает правильное число и местоположение, а W означает неправильное?
Я слишком долго не делал java, так любопытно для меня.
Не знаете, насколько вы знакомы с 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;
}
Вы можете сделать 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;
}