I'm new in Java programming, Just made simple Guess a number game and now i need to make GUI. I Just start with some simple showMessage and other stuff but i have a problem. How can i define my Human player result, that it will accept it and game will keep playing. Game is between Human and Robot. Problem starts when i input my number answer and game just stops. I Know now the code is broken, but can you give me some advice or tips what to do ? Thanks
**public class Human extends Player {**
private Player guesser;
private final PrintStream printer;
private final Scanner scanner;
private final String name;
Human(String name, PrintStream printer, Scanner scanner) {
this.name = name;
this.printer = printer;
this.scanner = scanner;
}
@Override
public String getName() {
return name;
}
@Override
public int guess(int n) {
JOptionPane.showInputDialog(String.format ("What do you think about %d?"));
char result = scanner.nextLine().trim().charAt(0);
return result == '=' ? 0 : result == '<' ? -1 : 1;
}
@Override
public int play() {
JOptionPane.showMessageDialog(null, String.format("%s wants your guess:", guesser.getName()), null, JOptionPane.PLAIN_MESSAGE);
int n = Integer.parseInt(scanner.nextLine().trim());
return guesser.guess(n);
}
@Override
public void setGuesser(Player player) {
this.guesser = player;
}
}
**public class Robot extends Player {**
private static final Random RANDOM = new Random();
private final String name;
private Player guesser;
private final PrintStream printer;
private int min = 0;
private int max = Integer.MAX_VALUE;
private int last = 1 + RANDOM.nextInt(1);
private final int guessedNumber;
public Robot(String name, PrintStream printer, int min, int max) {
this.name = name;
this.printer = printer;
this.guessedNumber = min + RANDOM.nextInt(max - min);
}
@Override
public String getName() {
return name;
}
@Override
public int guess(int n) {
int result = Integer.compare(guessedNumber, n);
printer.printf("%s says that %d is %s.%n", getName(), n,
result < 0 ? "too much" : result > 0 ? "not enough" : "just fine"
);
return result;
}
@Override
public int play() {
JOptionPane.showMessageDialog(null,"Robot thinks that Human guessed " + last,"aaa", JOptionPane.PLAIN_MESSAGE);
int guessResult = guesser.guess(last);
if (guessResult != 0) {
if (max - min <= 0) {
throw new IllegalStateException("YOU BLOODY CHEATER! SCREW YOU.");
}
if (guessResult == -1) {
max = last - 1;
} else {
min = last + 1;
}
}
last = min + (max - min) / 2;
return guessResult;
}
@Override
public void setGuesser(Player player) {
this.guesser = player;
}
}