0

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;
    }
}

1 Answers1

0

Change your

PrintStream.print method

to JOptionPane.showMessageDialog, or even better put a GUI element like a textbox or label and change the text.

bns
  • 392
  • 2
  • 9