Main.java 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. public class Main {
  2. public static void main(String[] args) {
  3. PlayField field = new PlayField();
  4. try(ConsoleReader cr = new ConsoleReader()) {
  5. do {
  6. doGame(cr, field);
  7. } while(askPlayAgain(cr, field));
  8. }
  9. }
  10. public static void doGame(ConsoleReader cr, PlayField field) {
  11. while(true) {
  12. int nextPos = getPlayerTurn(cr, field);
  13. field.setPos(nextPos, 1);
  14. field.print();
  15. if(hasGameEnded(field, 1)) {
  16. break;
  17. }
  18. // Opponent's turn
  19. System.out.println("Opponents turn:");
  20. field.oppMove();
  21. field.print();
  22. if(hasGameEnded(field, 2)) {
  23. break;
  24. }
  25. }
  26. }
  27. public static boolean hasGameEnded(PlayField field, int player) {
  28. if(field.hasWon(player)) {
  29. printWinner(player);
  30. return true;
  31. }
  32. if(field.isDraw()) {
  33. System.out.println("Draw.");
  34. return true;
  35. }
  36. return false;
  37. }
  38. public static int getPlayerTurn(ConsoleReader cr, PlayField field) {
  39. String s = "Where do you want to set your 'x'? (1-9)";
  40. while(true) {
  41. System.out.println(s);
  42. int nextPos = cr.readInt(s) - 1;
  43. if(nextPos >= 0 && nextPos <= 8 && field.isFree(nextPos)) {
  44. return nextPos;
  45. }
  46. }
  47. }
  48. public static void printWinner(int player) {
  49. if(player == 1) {
  50. System.out.println("Player 'x' has won.");
  51. } else {
  52. System.out.println("Player 'o' has won.");
  53. }
  54. }
  55. private static boolean askPlayAgain(ConsoleReader cr, PlayField field) {
  56. while(true) {
  57. System.out.println("New game? Y/N");
  58. String s = cr.readLine();
  59. if(s.equals("Y")) {
  60. field.reset();
  61. return true;
  62. } else if(s.equals("N")) {
  63. System.out.println("Game closed.");
  64. return false;
  65. }
  66. }
  67. }
  68. }