Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package tictactoe;
- import java.util.Arrays;
- import java.util.Scanner;
- public class TicTacToe {
- private final String PLAYER_CHARACTER = "X";
- private final String COMPUTER_CHARACTER = "O";
- private final String[] grid = new String[9];
- public TicTacToe() {
- gameLoop();
- }
- private void gameLoop() {
- Scanner input = new Scanner(System.in);
- gridInitialization();
- while (hasWinner()) {
- humanPlayer(input);
- if (isDraw()) return;
- computerPlayer();
- displayGrid();
- }
- }
- private void gridInitialization() {
- for (int i = 0; i < grid.length; i++) {
- grid[i] = String.valueOf(i + 1);
- }
- }
- private void humanPlayer(Scanner input) {
- int player;
- System.out.println("Pick a number from 1 - 9 ");
- player = input.nextInt();
- while (isTileTaken(grid[index(player)])) {
- System.out.println("Try again that tile is taken");
- player = input.nextInt();
- }
- grid[index(player)] = PLAYER_CHARACTER;
- }
- private void computerPlayer() {
- int computer;
- computer = (int) (Math.random() * 9 + 1);
- while (isTileTaken(grid[index(computer)])) {
- computer = (int) (Math.random() * 9 + 1);
- }
- grid[index(computer)] = COMPUTER_CHARACTER;
- }
- private boolean isDraw() {
- if (Arrays.stream(grid).distinct().count() == 2 && hasWinner()) {
- System.out.println("DRAW");
- return true;
- }
- return false;
- }
- private boolean isTileTaken(String tile) {
- return tile.equals("X") || tile.equals("O");
- }
- private void displayGrid() {
- /*
- WHAT is the question
- */
- int LAST_ROW_INDEX = 3;
- for (int i = 1; i < grid.length + 1; i++) {
- if(i % LAST_ROW_INDEX == 0) {
- System.out.print(grid[index(i)] + "\n");
- }else {
- System.out.print(grid[index(i)] + "|");
- }
- }
- }
- private int index(int i) {
- return i - 1;
- }
- private boolean hasWinner() {
- if (isWinner(PLAYER_CHARACTER)) {
- System.out.println("Player Won\nGame Over");
- return false;
- } else if (isWinner(COMPUTER_CHARACTER)) {
- System.out.println("Computer Won\nGame Over");
- return false;
- }
- return true;
- }
- private boolean isWinner(String userCharacter) {
- return hasWonHorizontally(userCharacter)
- || hasWonVertically(userCharacter)
- || hasWonDiagonally(userCharacter);
- }
- private boolean hasWonDiagonally(String userCharacter) {
- return grid[0].equals(userCharacter) && grid[4].equals(userCharacter) && grid[8].equals(userCharacter)
- || grid[2].equals(userCharacter) && grid[4].equals(userCharacter) && grid[6].equals(userCharacter);
- }
- private boolean hasWonVertically(String userCharacter) {
- return grid[0].equals(userCharacter) && grid[3].equals(userCharacter) && grid[6].equals(userCharacter)
- || grid[1].equals(userCharacter) && grid[4].equals(userCharacter) && grid[7].equals(userCharacter)
- || grid[2].equals(userCharacter) && grid[5].equals(userCharacter) && grid[8].equals(userCharacter);
- }
- private boolean hasWonHorizontally(String userCharacter) {
- return grid[0].equals(userCharacter) && grid[1].equals(userCharacter) && grid[2].equals(userCharacter)
- || grid[3].equals(userCharacter) && grid[4].equals(userCharacter) && grid[5].equals(userCharacter)
- || grid[6].equals(userCharacter) && grid[7].equals(userCharacter) && grid[8].equals(userCharacter);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement