123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- public class Main {
- public static void main(String[] args) {
- PlayField field = new PlayField();
- try(ConsoleReader cr = new ConsoleReader()) {
- do {
- doGame(cr, field);
- } while(askPlayAgain(cr, field));
- }
- }
- public static void doGame(ConsoleReader cr, PlayField field) {
- while(true) {
- int nextPos = getPlayerTurn(cr, field);
- field.setPos(nextPos, 1);
- field.print();
- if(hasGameEnded(field, 1)) {
- break;
- }
- // Opponent's turn
- System.out.println("Opponents turn:");
- field.oppMove();
- field.print();
- if(hasGameEnded(field, 2)) {
- break;
- }
- }
- }
- public static boolean hasGameEnded(PlayField field, int player) {
- if(field.hasWon(player)) {
- printWinner(player);
- return true;
- }
- if(field.isDraw()) {
- System.out.println("Draw.");
- return true;
- }
- return false;
- }
- public static int getPlayerTurn(ConsoleReader cr, PlayField field) {
- String s = "Where do you want to set your 'x'? (1-9)";
- while(true) {
- System.out.println(s);
- int nextPos = cr.readInt(s) - 1;
- if(nextPos >= 0 && nextPos <= 8 && field.isFree(nextPos)) {
- return nextPos;
- }
- }
- }
- public static void printWinner(int player) {
- if(player == 1) {
- System.out.println("Player 'x' has won.");
- } else {
- System.out.println("Player 'o' has won.");
- }
- }
- private static boolean askPlayAgain(ConsoleReader cr, PlayField field) {
- while(true) {
- System.out.println("New game? Y/N");
- String s = cr.readLine();
- if(s.equals("Y")) {
- field.reset();
- return true;
- } else if(s.equals("N")) {
- System.out.println("Game closed.");
- return false;
- }
- }
- }
- }
|