CCCPaste

Untitled

#include 
#include 
using namespace std;
const int ROWS = 3;
const int COLS = 3;
/*
 X | O | X
___|___|___
 O | X | O
---|---|--
 O | X | O

 
 **/

void print_board(vector> xo_board) {
    for(int i = 0; i < ROWS; i++) {
        for(int j = 0; j < COLS; j++) {
            if(j == COLS / 2) {
                cout << "|";
            }
            if(xo_board[i][j] == '.') {
                cout << "   ";
            }
            else {
                cout << " " << xo_board[i][j] << " ";
            }
            if(j == COLS / 2) {
                cout << "|";
            }
            
        }
        cout << endl;
        if(i == 0) {
            cout << "___|___|___" << endl;
        }
        else if(i == 1) {
            cout << "---|---|---" << endl;
        }
    }
}
bool valid_move(int pi, int pj, vector> xo_board) {
    pi--;
    pj--;
    if(pi >= 0 and pi < ROWS and pj >= 0 and pj < COLS and xo_board[pi][pj] == '.') {
        return true;
    }
    return false;
}
void set_board(int pi, int pj, char current_player, vector> & xo_board) {
    xo_board[pi - 1][pj - 1] = current_player;
}
bool has_anyone_won(vector> xo_board, char current_player) {
    bool main_diagonal_win = true;
    bool anti_diagonal_win = true;

    for(int i = 0; i < ROWS; i++) {
        if(xo_board[i][i] != current_player) {
            main_diagonal_win = false;
        }
        if(xo_board[i][ROWS - i - 1] != current_player) {
            anti_diagonal_win = false;
        }
    }
    if(main_diagonal_win or anti_diagonal_win) {
        return true;
    }
    for(int i = 0; i < ROWS; i++) {
        bool column_win = true;
        for(int j = 0; j < COLS; j++) {
            if(xo_board[i][j] != current_player) {
                column_win = false;
            }
        }
        if(column_win) {
            return true;
        }
    }
    for(int j = 0; j < COLS; j++) {
        bool row_win = true;
        for(int i = 0; i < ROWS; i++) {
            if(xo_board[i][j] != current_player) {
                row_win = false;
            }
        }
        if(row_win) {
            return true;
        }
    }
    return false;
}
bool is_draw(vector> xo_board) {
    for(int i = 0; i < ROWS; i++) {
        for(int j = 0; j < COLS; j++) {
            if(xo_board[i][j] == '.') {
                return false;
            }
        }
    }
    return true;
}
int main() {
    vector > xo_board(ROWS, vector(COLS, '.'));
    char current_player = 'X';
    bool game_over = false;
    
    while(!game_over) {
        print_board(xo_board);
        cout << current_player << "'s turn!" << endl;
        cout << "Where do you want to place " << current_player  <<"?" << endl;
        
        int pi, pj;
        cin >> pi >> pj;
        
        while(!valid_move(pi, pj, xo_board)) {
            cout << "Not a valid move! Please play again!" << endl;
            cin >> pi >> pj;
        }
        set_board(pi, pj, current_player, xo_board);
        
        if(has_anyone_won(xo_board, current_player)) {
            print_board(xo_board);
            cout << current_player << " has won!" << endl << "CONGRATULATIONS!!!" << endl;
            break;
        }
        if(is_draw(xo_board)) {
            cout << "It's a draw! Try again!" << endl;
            break;
        }
        if(current_player == 'X') {
            current_player = 'O';
        }
        else {
            current_player = 'X';
        }
    }
    return 0;
}