Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class TicTacToe {
- private GameField gf;
- private User user1, user2;
- private User currentUser;
- public static void main(String[] args) {
- TicTacToe game = new TicTacToe();
- game.startGame();
- }
- TicTacToe() {
- gf = new GameField();
- user1 = new User("first");
- user2 = new User("second");
- currentUser = user1;
- }
- void startGame() {
- boolean win = false;
- System.out.println("Начинаем игру.");
- do {
- currentUser.step(gf);
- gf.show();
- pause();
- if (gf.isWin()) {
- System.out.printf("Победил игрок %s%n", currentUser.getType());
- win = true;
- break;
- }
- changeUser();
- } while (gf.hasNextStep());
- if (!win) {
- System.out.println("Игра закончена. Больше ходов нет.");
- }
- }
- void pause() {
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- void changeUser() {
- currentUser = currentUser == user1 ? user2 : user1;
- }
- }
- class GameField {
- private char[][] fields;
- private int free;
- GameField() {
- initialize();
- }
- void initialize() {
- fields = new char[3][3];
- free = 9;
- for (int i = 0; i < fields.length; i++) {
- for (int j = 0; j < fields[i].length; j++) {
- fields[i][j] = '.';
- }
- }
- }
- void show() {
- for (int i = 0; i < fields.length; i++) {
- for (int j = 0; j < fields[i].length; j++) {
- char field = fields[i][j];
- System.out.print(field);
- }
- System.out.println();
- }
- System.out.println();
- }
- boolean setX(int x, int y) {
- if ((x < 0 || x > 2) || (y < 0 || y > 2)) throw new IllegalArgumentException();
- char field = fields[y][x];
- if (free > 0 && field == '.') {
- fields[y][x] = 'x';
- free--;
- return true;
- }
- return false;
- }
- boolean setO(int x, int y) {
- if ((x < 0 || x > 2) || (y < 0 || y > 2)) throw new IllegalArgumentException();
- char field = fields[y][x];
- if (free > 0 && field == '.') {
- fields[y][x] = 'o';
- free--;
- return true;
- }
- return false;
- }
- boolean hasNextStep() {
- return free > 0;
- }
- boolean isWin() {
- if (free <= 4) {
- int sumX = 'x' * 3;
- int sumO = 'o' * 3;
- int sum;
- for (int i = 0; i < 3; i++) {
- sum = fields[i][0] + fields[i][1] + fields[i][2];
- if (sum == sumX || sum == sumO) return true;
- }
- for (int i = 0; i < 3; i++) {
- sum = fields[0][i] + fields[1][i] + fields[2][i];
- if (sum == sumX || sum == sumO) return true;
- }
- sum = fields[0][0] + fields[1][1] + fields[2][2];
- if (sum == sumX || sum == sumO) return true;
- sum = fields[0][2] + fields[1][1] + fields[2][0];
- if (sum == sumX || sum == sumO) return true;
- }
- return false;
- }
- }
- class User {
- private String userType;
- User(String userType) {
- this.userType = userType;
- }
- void step(GameField gf) {
- boolean result;
- if (userType.equals("first")) {
- do {
- int x = (int) (Math.random() * 3);
- int y = (int) (Math.random() * 3);
- result = gf.setX(x, y);
- } while (!result);
- } else {
- do {
- int x = (int) (Math.random() * 3);
- int y = (int) (Math.random() * 3);
- result = gf.setO(x, y);
- } while (!result);
- }
- }
- String getType() {
- return userType;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement