Advertisement
theTANCO

Game Challenge 2: Tic Tac Toe - Board.cpp

Feb 14th, 2023
1,038
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.84 KB | None | 0 0
  1. // MakingGamesWithBen Game Challenge 2: Tic Tac Toe!
  2. // https://www.youtube.com/watch?v=gm2yPC65X78&list=PLSPw4ASQYyynKPY0I-QFHK0iJTjnvNUys&index=21
  3. // main.cpp - https://pastebin.com/M292p0K6
  4. // Board.h - https://pastebin.com/aHtLP1S9
  5.  
  6. #include "Board.h"
  7.  
  8. Board::Board(){
  9.     initBoard();
  10. }
  11.  
  12. void Board::initBoard(){
  13.     for(int y = 0; y < 3; y++){
  14.         for(int x = 0; x < 3; x++){
  15.             _board[y][x] = ' ';
  16.         }
  17.     }
  18. }
  19.  
  20. void Board::printBoard(){
  21.     cout << "\n\n\n | 1 | 2 | 3 | \n";
  22.     cout << "-+---+---+---+-\n";
  23.     for(int y = 0; y < 3; y++){
  24.         cout << y+1 << "| ";
  25.         for(int x = 0; x < 3; x++){
  26.             cout << _board[y][x] << " | ";
  27.         }
  28.         cout << "\n-+---+---+---+-\n";
  29.     }
  30. }
  31.  
  32. int Board::getResult(){
  33.     bool rows[2][3] = {
  34.         {
  35.             _board[0][0] == 'x' && _board[0][1] == 'x' && _board[0][2] == 'x',
  36.             _board[1][0] == 'x' && _board[1][1] == 'x' && _board[1][2] == 'x',
  37.             _board[2][0] == 'x' && _board[2][1] == 'x' && _board[2][2] == 'x'
  38.         },
  39.         {
  40.             _board[0][0] == 'o' && _board[0][1] == 'o' && _board[0][2] == 'o',
  41.             _board[1][0] == 'o' && _board[1][1] == 'o' && _board[1][2] == 'o',
  42.             _board[2][0] == 'o' && _board[2][1] == 'o' && _board[2][2] == 'o'
  43.         }
  44.     };
  45.     bool cols[2][3] = {
  46.         {
  47.             _board[0][0] == 'x' && _board[1][0] == 'x' && _board[2][0] == 'x',
  48.             _board[0][1] == 'x' && _board[1][1] == 'x' && _board[2][1] == 'x',
  49.             _board[0][2] == 'x' && _board[1][2] == 'x' && _board[2][2] == 'x'
  50.         },
  51.         {
  52.             _board[0][0] == 'o' && _board[1][0] == 'o' && _board[2][0] == 'o',
  53.             _board[0][1] == 'o' && _board[1][1] == 'o' && _board[2][1] == 'o',
  54.             _board[0][2] == 'o' && _board[1][2] == 'o' && _board[2][2] == 'o'
  55.         }
  56.     };
  57.     bool diag[2][2] = {
  58.         {
  59.             _board[0][0] == 'x' && _board[1][1] == 'x' && _board[2][2] == 'x',
  60.             _board[2][0] == 'x' && _board[1][1] == 'x' && _board[0][2] == 'x'
  61.         },
  62.         {
  63.             _board[0][0] == 'o' && _board[1][1] == 'o' && _board[2][2] == 'o',
  64.             _board[2][0] == 'o' && _board[1][1] == 'o' && _board[0][2] == 'o'
  65.         }
  66.     };
  67.     bool winner[2] = {
  68.         rows[0][0] || rows[0][1] || rows[0][2] || cols[0][0] || cols[0][1] || cols[0][2] || diag[0][0] || diag[0][1],
  69.         rows[1][0] || rows[1][1] || rows[1][2] || cols[1][0] || cols[1][1] || cols[1][2] || diag[1][0] || diag[1][1]
  70.     };
  71.     bool boardFilled = true;
  72.     for(int y = 0; y < 3; y++){
  73.         for(int x = 0; x < 3; x++){
  74.             if(_board[y][x] == ' '){
  75.                 boardFilled = false;
  76.             }
  77.         }
  78.     }
  79.  
  80.     if(winner[0]){ return 1; }
  81.     else if(winner[1]){ return 2; }
  82.     else if(boardFilled){ return 3; }
  83.     else{ return 0; }
  84. }
  85.  
  86. void Board::playGame(){
  87.     string player1;
  88.     string player2;
  89.     bool playing = true;
  90.     bool gameOver = false;
  91.     bool validTurn;
  92.     int turn = 1;
  93.     int row;
  94.     int col;
  95.     int winner;
  96.     char playAgain;
  97.  
  98.     while(playing){
  99.         cout << "Player x: What is your name? ";
  100.         cin >> player1;
  101.         cout << "Player o: What is your name? ";
  102.         cin >> player2;
  103.  
  104.         while(!gameOver){
  105.             validTurn = true;
  106.             printBoard();
  107.  
  108.             if(turn == 1){ cout << player1 << "'s turn. (x)\n"; }
  109.             else{ cout << player2 << "'s turn. (o)\n"; }
  110.  
  111.             while(validTurn){
  112.                 cout << "Enter row number (1-3): ";
  113.                 cin >> row;
  114.                 cout << "Enter column number (1-3): ";
  115.                 cin >> col;
  116.                 row--;
  117.                 col--;
  118.                 if(!(row > -1 && row < 3 && col > -1 && col < 3) ||_board[row][col] == 'o' || _board[row][col] == 'x'){
  119.                     cout << "Invalid input, try again.\n";
  120.                 }else{ validTurn = false; }
  121.             }
  122.  
  123.             if(turn == 1){
  124.                 _board[row][col] = 'x';
  125.                 turn = 2;
  126.             }else{
  127.                 _board[row][col] = 'o';
  128.                 turn = 1;
  129.             }
  130.  
  131.             winner = getResult();
  132.             if(winner > 0){ gameOver = true; }
  133.         }
  134.  
  135.         printBoard();
  136.         if(winner == 1){ cout << player1 << " is the winner!\n"; }
  137.         else if(winner == 2){ cout << player2 << " is the winner!\n"; }
  138.         else{ cout << "It was a draw!\n"; }
  139.  
  140.         validTurn = true;
  141.         while(validTurn){
  142.             cout << "Would you like to play again? (y/n) ";
  143.             cin >> playAgain;
  144.             if(playAgain == 'y'){
  145.                 gameOver = false;
  146.                 validTurn = false;
  147.                 initBoard();
  148.             }else if(playAgain == 'n'){
  149.                 playing = false;
  150.                 validTurn = false;
  151.             }
  152.         }
  153.     }
  154. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement