Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ///////HEADER/////////////
- #ifndef TTT_H
- #define TTT_H
- namespace ttt
- {
- class Player{
- char symbol;
- public:
- void setPiece(char c);
- char getPiece() const;
- };
- void printInfo();
- void drawBoard(char cArr[][3]);
- void quadBoard();
- int getQuad();
- bool quadFree(int i, bool status[]);
- void placePiece(char cArr[][3], Player& piece, int quad);
- bool checkWinner(char cArr[][3], bool status[]);
- void resetGame(char cArr[][3], bool status[], bool& win);
- }
- #endif
- //////////////////////CPP FILE//////////////////////////
- #include "ttt.h"
- #include <iostream>
- using namespace std;
- namespace ttt{
- void Player::setPiece(char c){ symbol = c; }
- char Player::getPiece() const { return symbol;}
- void printInfo()
- {
- cout << "\t\t\t***********************************\n";
- cout << "\t\t\t***********************************\n";
- cout << "\t\t\t********** TIC-TAC-TOE ************\n";
- cout << "\t\t\t***********************************\n";
- cout << "\t\t\t***********************************\n";
- cout << "Player 1 is 'x' and Player 2 is 'o'!\n";
- }
- void drawBoard(char cArr[][3])
- {
- for (int i = 0; i < 3; i++)
- {
- for(int j = 0; j < 3; j++)
- {
- cout << " " << cArr[i][j] << " ";
- if(j == 0 || j == 1)
- cout << "|";
- }
- if(i == 0 || i == 1)
- cout << "\n===========\n";
- else
- cout << endl;
- }
- }
- void quadBoard()
- {
- int arr[3][3] = { { 1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
- for (int i = 0; i < 3; i++)
- {
- for (int j = 0; j < 3; j++)
- {
- cout << " " << arr[i][j] << " ";
- if(j == 0 || j == 1)
- cout << "|";
- }
- if(i == 0 || i == 1)
- cout << "\n===========\n";
- else
- cout << endl;
- }
- }
- int getQuad()
- {
- int quad;
- cout << "Player, pick a quadrant: ";
- cin >> quad;
- while(cin.fail() || quad < 1 || quad > 9)
- {
- cout << "That isn't a number between 1 and 9. Try again.\n";
- cin.clear();
- cin.ignore(100, '\n');
- cout << "Player, pick a quadrant: ";
- cin >> quad;
- }
- return quad;
- }
- bool quadFree(int i, bool status[])
- {
- i = i - 1;
- if(status[i] == true)
- {
- status[i] = false;
- return true;
- }
- else
- return false;
- }
- void placePiece(char cArr[][3], Player& piece, int quad)
- {
- switch(quad)
- {
- case 1:
- cArr[0][0] = piece.getPiece();
- break;
- case 2:
- cArr[0][1] = piece.getPiece();
- break;
- case 3:
- cArr[0][2] = piece.getPiece();
- break;
- case 4:
- cArr[1][0] = piece.getPiece();
- break;
- case 5:
- cArr[1][1] = piece.getPiece();
- break;
- case 6:
- cArr[1][2] = piece.getPiece();
- break;
- case 7:
- cArr[2][0] = piece.getPiece();
- break;
- case 8:
- cArr[2][1] = piece.getPiece();
- break;
- case 9:
- cArr[2][2] = piece.getPiece();
- break;
- default:
- cout << "Something happened. No pieces were placed.\n";
- break;
- }
- }
- bool checkWinner(char cArr[][3], bool status[])
- {
- bool win = false;
- if(cArr[0][0] == 'x' && cArr[0][1] == 'x' && cArr[0][2] == 'x')
- {
- win = true;
- cout << "Player 1 Wins\n";
- return true;
- }
- if(cArr[0][0] == 'o' && cArr[0][1] == 'o' && cArr[0][2] == 'o')
- {
- win = true;
- cout << "Player 2 Wins\n";
- return true;
- } // end of row 1 checks
- if(cArr[1][0] == 'x' && cArr[1][1] == 'x' && cArr[1][2] == 'x')
- {
- win = true;
- cout << "Player 1 Wins\n";
- return true;
- }
- if(cArr[1][0] == 'o' && cArr[1][1] == 'o' && cArr[1][2] == 'o')
- {
- win = true;
- cout << "Player 2 Wins\n";
- return true;
- }// end of row two checks
- if(cArr[2][0] == 'x' && cArr[2][1] == 'x' && cArr[2][2] == 'x')
- {
- win = true;
- cout << "Player 1 Wins\n";
- return true;
- }
- if(cArr[2][0] == 'o' && cArr[2][1] == 'o' && cArr[2][2] == 'o')
- {
- win = true;
- cout << "Player 2 Wins\n";
- return true;
- }// end of row three checks
- if(cArr[0][0] == 'x' && cArr[1][1] == 'x' && cArr[2][2] == 'x')
- {
- win = true;
- cout << "Player 1 Wins\n";
- return true;
- }
- if(cArr[0][0] == 'o' && cArr[1][1] == 'o' && cArr[2][2] == 'o')
- {
- win = true;
- cout << "Player 2 Wins\n";
- return true;
- }// end of diagonal checks
- if(cArr[2][0] == 'x' && cArr[1][1] == 'x' && cArr[0][2] == 'x')
- {
- win = true;
- cout << "Player 1 Wins\n";
- return true;
- }
- if(cArr[2][0] == 'o' && cArr[1][1] == 'o' && cArr[0][2] == 'o')
- {
- win = true;
- cout << "Player 2 Wins\n";
- return true;
- }// end of second diagonal
- // check status
- if(status[0] == false && status[1] == false && status[2] == false && status[3] == false && status[4] == false && status[5] == false && status[6] == false && status[7] == false && status[8] == false && win == false)
- {
- cout << "Draw!\n";
- return true;
- }
- }
- void resetGame(char cArr[][3], bool status[], bool& win)
- {
- for (int i = 0; i < 3; i++)
- {
- for (int j = 0; j < 3; j++)
- {
- cArr[i][j] = '\0';
- }
- }
- for (int k = 0; k < 9; k++)
- {
- status[k] = true;
- }
- win = false;
- }
- }
- ///////////////MAIN FILE/////////////////////
- #include <iostream>
- #include "ttt.h"
- using namespace std;
- using namespace ttt;
- int main()
- {
- Player crosses;
- crosses.setPiece('x');
- Player naughts;
- naughts.setPiece('o');
- char board[3][3] = {"\0"};
- bool flags[9] = {true, true, true, true, true, true, true, true, true};
- bool answer, winner;
- int quad, num;
- bool done = false;
- char fin;
- printInfo(); // print game rules and who is player one and who is player two
- while (!done)
- {
- quadBoard(); // draw the board showing the 9 quadrants
- quad = getQuad(); // get the quadrant to place pieces
- answer = quadFree(quad, flags); // is quadrant empty?
- if (answer == true)
- {
- cout << "Which player (1 or 2): ";
- cin >> num;
- while(cin.fail() || num < 1 || num > 2)
- {
- cout << "That isn't Player 1 or 2. Try again.\n";
- cin.clear();
- cin.ignore(100, '\n');
- cout << "Which player (1 or 2): ";
- cin >> num;
- }
- if (num == 1)
- {
- placePiece(board, crosses, quad);
- }
- if (num == 2)
- {
- placePiece(board, naughts, quad);
- }
- }
- else
- cout << "Quadrant taken. Pick a new one.\n";
- cout << '\n';
- drawBoard(board);
- winner = checkWinner(board, flags);
- if(winner == true)
- {
- cout << "Do you want to quit? (y/n): ";
- cin >> fin;
- switch(fin)
- {
- case 'y':
- case 'Y':
- done = true;
- break;
- case 'n':
- case 'N':
- done = false;
- resetGame(board, flags, winner);
- printInfo();
- break;
- default:
- cout << "That isn't y or n. Try again.\n";
- break;
- }
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement