Advertisement
Guest User

Untitled

a guest
Sep 20th, 2019
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.94 KB | None | 0 0
  1. public class TicTacToe {
  2.  
  3. private GameField gf;
  4. private User user1, user2;
  5. private User currentUser;
  6.  
  7.  
  8. public static void main(String[] args) {
  9. TicTacToe game = new TicTacToe();
  10. game.startGame();
  11. }
  12.  
  13. TicTacToe() {
  14. gf = new GameField();
  15. user1 = new User("first");
  16. user2 = new User("second");
  17. currentUser = user1;
  18. }
  19.  
  20. void startGame() {
  21. boolean win = false;
  22. System.out.println("Начинаем игру.");
  23. do {
  24. currentUser.step(gf);
  25. gf.show();
  26. pause();
  27. if (gf.isWin()) {
  28. System.out.printf("Победил игрок %s%n", currentUser.getType());
  29. win = true;
  30. break;
  31. }
  32. changeUser();
  33. } while (gf.hasNextStep());
  34. if (!win) {
  35. System.out.println("Игра закончена. Больше ходов нет.");
  36. }
  37. }
  38.  
  39.  
  40. void pause() {
  41. try {
  42. Thread.sleep(1000);
  43. } catch (InterruptedException e) {
  44. e.printStackTrace();
  45. }
  46. }
  47.  
  48. void changeUser() {
  49. currentUser = currentUser == user1 ? user2 : user1;
  50. }
  51.  
  52. }
  53.  
  54. class GameField {
  55. private char[][] fields;
  56. private int free;
  57.  
  58. GameField() {
  59. initialize();
  60. }
  61.  
  62. void initialize() {
  63. fields = new char[3][3];
  64. free = 9;
  65. for (int i = 0; i < fields.length; i++) {
  66. for (int j = 0; j < fields[i].length; j++) {
  67. fields[i][j] = '.';
  68. }
  69. }
  70. }
  71.  
  72. void show() {
  73. for (int i = 0; i < fields.length; i++) {
  74. for (int j = 0; j < fields[i].length; j++) {
  75. char field = fields[i][j];
  76. System.out.print(field);
  77. }
  78. System.out.println();
  79. }
  80. System.out.println();
  81. }
  82.  
  83. boolean setX(int x, int y) {
  84. if ((x < 0 || x > 2) || (y < 0 || y > 2)) throw new IllegalArgumentException();
  85. char field = fields[y][x];
  86. if (free > 0 && field == '.') {
  87. fields[y][x] = 'x';
  88. free--;
  89. return true;
  90. }
  91. return false;
  92.  
  93. }
  94.  
  95. boolean setO(int x, int y) {
  96. if ((x < 0 || x > 2) || (y < 0 || y > 2)) throw new IllegalArgumentException();
  97. char field = fields[y][x];
  98. if (free > 0 && field == '.') {
  99. fields[y][x] = 'o';
  100. free--;
  101. return true;
  102. }
  103. return false;
  104. }
  105.  
  106. boolean hasNextStep() {
  107. return free > 0;
  108. }
  109.  
  110. boolean isWin() {
  111. if (free <= 4) {
  112. int sumX = 'x' * 3;
  113. int sumO = 'o' * 3;
  114. int sum;
  115. for (int i = 0; i < 3; i++) {
  116. sum = fields[i][0] + fields[i][1] + fields[i][2];
  117. if (sum == sumX || sum == sumO) return true;
  118. }
  119. for (int i = 0; i < 3; i++) {
  120. sum = fields[0][i] + fields[1][i] + fields[2][i];
  121. if (sum == sumX || sum == sumO) return true;
  122. }
  123. sum = fields[0][0] + fields[1][1] + fields[2][2];
  124. if (sum == sumX || sum == sumO) return true;
  125. sum = fields[0][2] + fields[1][1] + fields[2][0];
  126. if (sum == sumX || sum == sumO) return true;
  127. }
  128. return false;
  129. }
  130. }
  131.  
  132. class User {
  133. private String userType;
  134.  
  135. User(String userType) {
  136. this.userType = userType;
  137. }
  138.  
  139. void step(GameField gf) {
  140. boolean result;
  141.  
  142. if (userType.equals("first")) {
  143. do {
  144. int x = (int) (Math.random() * 3);
  145. int y = (int) (Math.random() * 3);
  146. result = gf.setX(x, y);
  147. } while (!result);
  148. } else {
  149. do {
  150. int x = (int) (Math.random() * 3);
  151. int y = (int) (Math.random() * 3);
  152. result = gf.setO(x, y);
  153. } while (!result);
  154. }
  155. }
  156.  
  157. String getType() {
  158. return userType;
  159. }
  160. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement