#java
#java
Вопрос:
Я написал код, который является основной игрой разума на Java. Я смог написать код для запуска игры. Этот код удалось запустить, но игра не завершилась, даже если пользователь уже ввел правильный ответ или они уже достигли максимального игрового времени. Я думал, как это исправить, и попытался исправить, чтобы работать хорошо, но я не смог исправить. и теперь я понятия не имею, как это исправить. Кроме того, я хочу создать файл для записи того, как пользователь играл и запускал эту программу. Я знаю, что мне нужно использовать метод FileWriter, но я понятия не имею, как записать процесс.
Это мой код
import java.util.Scanner;
public class MasterMind{
public static void main(String[] args){
int[] number = makeArray(10);
for(int i = number.length - 1; i > 0; i--){
int r = (int)(Math.random() * (i 1));
int tmp = number[i];
number[i] = number[r];
number[r] = tmp;
}
int playNumber = 4; // digits
int[] answer = new int[playNumber];
if(number[0] == 0){
for (int i = 0; i < answer.length; i ){
answer[i] = number[i 1];
}
}else{
for(int i = 0; i < answer.length; i ){
answer[i] = number[i];
}
}
ystem.out.println();
runGame(number, answer, 4);
}
private static int[] makeArray(int size){
int[] numbers = new int[size];
for(int i = 0; i < size; i )
numbers[i] = generateNumber();
return numbers;
}
private static int generateNumber(){
return (int)(Math.random() * 10) 1; // make secret number
}
private static void runGame(int[] number, int[] answer, int playNumber){
int hit = 0;
int blow = 0;
int count = 0;
int maxPlay = 5;
boolean gameEnd = false;
while(!gameEnd){
hit = 0;
blow = 0;
int[] userGuess = new int[playNumber];
boolean checkValid = false;
while(!checkValid){
System.out.println("enter your guess"); //ask user to get guess number
Scanner keyboard = new Scanner(System.in);
int[] inNum = new int[playNumber];
String guess = keyboard.nextLine();
int n = Integer.parseInt(guess);
String putNumber = guess.substring(0, 1); //set 1st
int digits = Integer.toString(n).length();
creatArray(inNum,n);
digits = Integer.toString(n).length();
if(putNumber.equals("0")){
System.out.println("you cannot enter 0 first");
}else if(digits != playNumber){
if(digits < playNumber || n < Math.pow(10, playNumber - 1))
System.out.println(digits);
System.out.println("It is not enough digits");
}else if(digits > playNumber){
System.out.println("It is too much");
}else{
gameEnd = true;
userGuess = inNum;
}
}
for(int i = 0; i < playNumber; i ){ //check hit
if(answer[i] == userGuess[i]){
hit ;
}
}
for(int i = 0; i < playNumber; i ){ //check blow
for(int k = 0; k < playNumber; k ){
if(answer[i] == userGuess[k]){
blow ;
}
}
}
if(hit == playNumber){
System.out.println("It is correct");
System.out.println("you enter " count);
gameEnd = true;
}else{
System.out.println(hit "hit" (blow - hit) "Blow");
count ;
}
if(count == maxPlay){
System.out.println("You reach" maxPlay "Game Over");
gameEnd = true;
}
}
}
private static void creatArray(int[] inNum, int n){
for(int j = inNum.length - 1; j >= 0; j--){
int d = n / 10;
int k = n - d * 10;
n = d;
inNum[j] = k;
}
}
}
Комментарии:
1. Я предполагаю, что это задание в процессе изучения Java, поэтому предоставление нового реструктурированного кода — это не способ достичь вашей цели. Некоторый код, на который вы, возможно, захотите взглянуть: 1) вы также добавляете число 10, возможно, захотите остановиться на 9. 2) Вы, похоже, никогда не покидаете цикл checkValid while , что делает невозможным проверку значения while(!gameEnd). Удачи с вашей головоломкой 🙂
2. @Wkrem Спасибо, что посоветовали мне, я не заметил, что забыл сделать checkValid истинным… Я постараюсь это исправить!
3. @Wkrem Я смог остановить запуск игры! Я признателен вам. Большое вам спасибо!