Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <ctime>
- #include <cstdlib>
- #include <vector>
- using namespace std;
- enum xo
- {
- NONE = 0,
- O = 1,
- X = 2,
- DRAW = -1
- };
- struct sq
- {
- xo val;
- int num;
- };
- class Board
- {
- public:
- Board(int size);
- void prtVal(xo val);
- void setTo(int x, int y, xo that);
- void draw();
- xo whoWin();
- xo getTurn();
- xo getFrom(int x, int y);
- void nextTurn();
- int search1D(int num, int &i2);
- private:
- void prt(int x, int y);
- int getNum(int x, int y);
- vector< vector<sq> > lvl;
- //sq lvl[3][3];
- xo turn;
- int size = 3;
- };
- Board::Board(int whatSize)
- {
- size = whatSize;
- lvl.resize(size);
- for (int i = 0; i < size; i++)
- {
- lvl[i].resize(size);
- }
- if (rand() % 2 == 0)
- {
- turn = O;
- }
- else
- {
- turn = X;
- }
- for (int i = 0; i < size; i++)
- {
- for (int i2 = 0; i2 < size; i2++)
- {
- lvl[i2][i].val = NONE;
- }
- }
- int temp = 0;
- for (int i = 0; i < size; i++)
- {
- for (int i2 = 0; i2 < size; i2++)
- {
- lvl[i2][i].num = temp;
- temp++;
- }
- }
- }
- //Public:
- void Board::prtVal(xo val)
- {
- if (val != NONE)
- {
- if (val == X)
- {
- cout << 'X';
- }
- else
- {
- cout << 'O';
- }
- }
- }
- void Board::draw()
- {
- //Clear screen
- for (int i = 0; i < size; i++)
- {
- for (int i2 = 0; i2 < size; i2++)
- {
- prt(i2, i);
- cout << ' ';
- }
- cout << '\n';
- }
- }
- xo Board::whoWin()
- {
- int inRow = 3;
- int counter = 0;
- //-X-X-X-
- for (int i = 0; i < size; i++)
- {
- for (int i2 = 0; i2 < 1 + size - 3; i2++)
- {
- for (int i3 = i; i3 < inRow; i3++)
- {
- counter = 0;
- if (getFrom(i3, i) == getFrom(i3 + 1, i))
- {
- counter++;
- }
- if (counter == 2 && !getFrom(i3, i) == NONE)
- {
- return getFrom(i3, i);
- }
- }
- }
- }
- /*
- -X-
- -X-
- -X-
- */
- for (int i = 0; i < size; i++)
- {
- for (int i2 = 0; i2 < size - 1; i2++)
- {
- counter = 0;
- if (getFrom(i, i2) == getFrom(i, i2 + 1))
- {
- counter++;
- }
- if (counter == 2 && !getFrom(i, i2) == NONE)
- {
- return getFrom(i, i2);
- }
- }
- /*
- -X-
- -X-
- -X-
- */
- counter = 0;
- for (int i = 0; i < size - 1; i++)
- {
- if (getFrom(i, i) == getFrom(i + 1, i + 1))
- {
- counter++;
- }
- if (counter == 2 && !getFrom(i, i) == NONE)
- {
- return getFrom(i, i);
- }
- }
- /*
- counter = 0;
- for (int i = 0; i < 3; i++)
- {
- if (getFrom(i, i) == getFrom(0, 0))
- {
- counter++;
- }
- }
- if (counter == 3)
- {
- return getFrom(0, 0);
- }
- /*
- -X-
- -X-
- -X-
- */
- counter = 0;
- for (int i = 0; i < size - 1; i++)
- {
- if (getFrom(i, 2 - i) == getFrom(i + 1, 2 - i + 1))
- {
- counter++;
- }
- if (counter == 2 && !getFrom(i, 2 - i) == NONE)
- {
- return getFrom(i, 2 - i);
- }
- }
- /*
- counter = 0;
- for (int i = 0; i < 3; i++)
- {
- for (int i2 = 2; i >= 0; i--)
- {
- if (getFrom(i2, i) == getFrom(2, 0))
- {
- counter++;
- }
- }
- }
- if (counter == 3)
- {
- return getFrom(0, 2);
- }
- /*
- -X-O-X-
- -X-O-X-
- -O-X-O-
- */
- counter = 0;
- for (int i = 0; i < size; i++)
- {
- for (int i2 = 0; i2 < size; i2++)
- {
- if (getFrom(i2, i) != NONE)
- {
- counter++;
- }
- }
- }
- if (counter == size * size)
- {
- return DRAW;
- }
- //Other
- return NONE;
- }
- }
- xo Board::getTurn()
- {
- return turn;
- }
- xo Board::getFrom(int x, int y)
- {
- return lvl[x][y].val;
- }
- void Board::nextTurn()
- {
- if (getTurn() == X)
- {
- turn = O;
- }
- else
- {
- turn = X;
- }
- }
- int Board::search1D(int num, int &i2)
- {
- for (int i = 0; i < size; i++)
- {
- for (i2 = 0; i2 < size; i2++)
- {
- if (getNum(i, i2) == num)
- {
- return i;
- }
- }
- }
- return -1;
- }
- void Board::setTo(int x, int y, xo that)
- {
- lvl[x][y].val = that;
- }
- //Private:
- void Board::prt(int x, int y)
- {
- if (lvl[x][y].val != NONE)
- {
- prtVal(lvl[x][y].val);
- }
- else
- {
- cout << lvl[x][y].num;
- }
- }
- int Board::getNum(int x, int y)
- {
- return lvl[x][y].num;
- }
- //Normal:
- void game()
- {
- int choice;
- Board board(3);
- while (1)
- {
- board.draw();
- if (board.whoWin() != NONE)
- {
- if (board.whoWin() != DRAW)
- {
- board.prtVal(board.whoWin());
- cout << " win!\n";
- }
- else
- {
- cout << "Draw!\n";
- }
- cin.ignore();
- cin.get();
- break;
- }
- board.prtVal(board.getTurn());
- cout << " turn...\n";
- cout << "Enter square number:\n";
- cin >> choice;
- int y = 0;
- int x = board.search1D(choice, y);
- if (x != -1)
- {
- if (board.getFrom(x, y) == NONE)
- {
- board.setTo(x, y, board.getTurn());
- board.nextTurn();
- }
- else
- {
- cout << "Square isn't empty!\n";
- }
- }
- else
- {
- cout << "Square don't exist!\n";
- }
- }
- }
- int main()
- {
- srand(time(NULL));
- int choice;
- while (1)
- {
- //Clear screen
- cout << "TicTacToe v1.0 (C) Grzesiek11\n";
- cout << "[1] Play\n";
- cout << "[0] Exit\n";
- cin >> choice;
- switch (choice)
- {
- case 1:
- game();
- break;
- case 0:
- return 0;
- break;
- default:
- cout << "Bad choice!\n";
- break;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment