Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // MakingGamesWithBen Game Challenge 2: Tic Tac Toe!
- // https://www.youtube.com/watch?v=gm2yPC65X78&list=PLSPw4ASQYyynKPY0I-QFHK0iJTjnvNUys&index=21
- // main.cpp - https://pastebin.com/M292p0K6
- // Board.h - https://pastebin.com/aHtLP1S9
- #include "Board.h"
- Board::Board(){
- initBoard();
- }
- void Board::initBoard(){
- for(int y = 0; y < 3; y++){
- for(int x = 0; x < 3; x++){
- _board[y][x] = ' ';
- }
- }
- }
- void Board::printBoard(){
- cout << "\n\n\n | 1 | 2 | 3 | \n";
- cout << "-+---+---+---+-\n";
- for(int y = 0; y < 3; y++){
- cout << y+1 << "| ";
- for(int x = 0; x < 3; x++){
- cout << _board[y][x] << " | ";
- }
- cout << "\n-+---+---+---+-\n";
- }
- }
- int Board::getResult(){
- bool rows[2][3] = {
- {
- _board[0][0] == 'x' && _board[0][1] == 'x' && _board[0][2] == 'x',
- _board[1][0] == 'x' && _board[1][1] == 'x' && _board[1][2] == 'x',
- _board[2][0] == 'x' && _board[2][1] == 'x' && _board[2][2] == 'x'
- },
- {
- _board[0][0] == 'o' && _board[0][1] == 'o' && _board[0][2] == 'o',
- _board[1][0] == 'o' && _board[1][1] == 'o' && _board[1][2] == 'o',
- _board[2][0] == 'o' && _board[2][1] == 'o' && _board[2][2] == 'o'
- }
- };
- bool cols[2][3] = {
- {
- _board[0][0] == 'x' && _board[1][0] == 'x' && _board[2][0] == 'x',
- _board[0][1] == 'x' && _board[1][1] == 'x' && _board[2][1] == 'x',
- _board[0][2] == 'x' && _board[1][2] == 'x' && _board[2][2] == 'x'
- },
- {
- _board[0][0] == 'o' && _board[1][0] == 'o' && _board[2][0] == 'o',
- _board[0][1] == 'o' && _board[1][1] == 'o' && _board[2][1] == 'o',
- _board[0][2] == 'o' && _board[1][2] == 'o' && _board[2][2] == 'o'
- }
- };
- bool diag[2][2] = {
- {
- _board[0][0] == 'x' && _board[1][1] == 'x' && _board[2][2] == 'x',
- _board[2][0] == 'x' && _board[1][1] == 'x' && _board[0][2] == 'x'
- },
- {
- _board[0][0] == 'o' && _board[1][1] == 'o' && _board[2][2] == 'o',
- _board[2][0] == 'o' && _board[1][1] == 'o' && _board[0][2] == 'o'
- }
- };
- bool winner[2] = {
- rows[0][0] || rows[0][1] || rows[0][2] || cols[0][0] || cols[0][1] || cols[0][2] || diag[0][0] || diag[0][1],
- rows[1][0] || rows[1][1] || rows[1][2] || cols[1][0] || cols[1][1] || cols[1][2] || diag[1][0] || diag[1][1]
- };
- bool boardFilled = true;
- for(int y = 0; y < 3; y++){
- for(int x = 0; x < 3; x++){
- if(_board[y][x] == ' '){
- boardFilled = false;
- }
- }
- }
- if(winner[0]){ return 1; }
- else if(winner[1]){ return 2; }
- else if(boardFilled){ return 3; }
- else{ return 0; }
- }
- void Board::playGame(){
- string player1;
- string player2;
- bool playing = true;
- bool gameOver = false;
- bool validTurn;
- int turn = 1;
- int row;
- int col;
- int winner;
- char playAgain;
- while(playing){
- cout << "Player x: What is your name? ";
- cin >> player1;
- cout << "Player o: What is your name? ";
- cin >> player2;
- while(!gameOver){
- validTurn = true;
- printBoard();
- if(turn == 1){ cout << player1 << "'s turn. (x)\n"; }
- else{ cout << player2 << "'s turn. (o)\n"; }
- while(validTurn){
- cout << "Enter row number (1-3): ";
- cin >> row;
- cout << "Enter column number (1-3): ";
- cin >> col;
- row--;
- col--;
- if(!(row > -1 && row < 3 && col > -1 && col < 3) ||_board[row][col] == 'o' || _board[row][col] == 'x'){
- cout << "Invalid input, try again.\n";
- }else{ validTurn = false; }
- }
- if(turn == 1){
- _board[row][col] = 'x';
- turn = 2;
- }else{
- _board[row][col] = 'o';
- turn = 1;
- }
- winner = getResult();
- if(winner > 0){ gameOver = true; }
- }
- printBoard();
- if(winner == 1){ cout << player1 << " is the winner!\n"; }
- else if(winner == 2){ cout << player2 << " is the winner!\n"; }
- else{ cout << "It was a draw!\n"; }
- validTurn = true;
- while(validTurn){
- cout << "Would you like to play again? (y/n) ";
- cin >> playAgain;
- if(playAgain == 'y'){
- gameOver = false;
- validTurn = false;
- initBoard();
- }else if(playAgain == 'n'){
- playing = false;
- validTurn = false;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement