Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdio.h>
- int Array[3][3] = {{0,0,0},{0,0,0},{0,0,0}};
- char getSymbolFromNum(int x) {
- switch (x) {
- case 1: return 'X';
- case 2: return 'O';
- }
- return ' ';
- }
- void drawTable() {
- printf(" --- --- --- \n| %c | %c | %c |\n --- --- --- \n| %c | %c | %c |\n --- --- --- \n| %c | %c | %c |\n --- --- ---\n",
- getSymbolFromNum(Array[0][0]), getSymbolFromNum(Array[0][1]), getSymbolFromNum(Array[0][2]),
- getSymbolFromNum(Array[1][0]), getSymbolFromNum(Array[1][1]), getSymbolFromNum(Array[1][2]),
- getSymbolFromNum(Array[2][0]), getSymbolFromNum(Array[2][1]), getSymbolFromNum(Array[2][2]));
- }
- void clearTable() {
- for (int a = 0; a < 3; a++) {
- for (int b = 0; b < 3; b++) {
- Array[a][b] = 0;
- }
- }
- }
- int hasCombination(int x) {
- return
- ((Array[0][0] == x && Array[0][1] == x && Array[0][2] == x) || // xxx ??? ???
- (Array[1][0] == x && Array[1][1] == x && Array[1][2] == x) || // ??? xxx ???
- (Array[2][0] == x && Array[2][1] == x && Array[2][2] == x) || // ??? ??? xxx
- (Array[0][0] == x && Array[1][0] == x && Array[2][0] == x) || // x?? x?? x??
- (Array[0][1] == x && Array[1][1] == x && Array[2][1] == x) || // ?x? ?x? ?x?
- (Array[0][2] == x && Array[1][2] == x && Array[2][2] == x) || // ??x ??x ??x
- (Array[0][0] == x && Array[1][1] == x && Array[2][2] == x) || // x?? ?x? ??x
- (Array[2][2] == x && Array[1][1] == x && Array[0][0] == x)); // ??x ?x? x??
- }
- int place(int a, int b, int x) {
- if (Array[a][b] == 0) {
- Array[a][b] = x;
- return 1;
- }
- return 0;
- }
- void newTurn(int x) {
- int a, b;
- char player = getSymbolFromNum(x);
- printf("%c's turn to enter a row (1, 2, or 3) and column (1, 2, or 3)\n> ", player);
- std::cin >> a >> b;
- int successful = place(a - 1, b - 1, x);
- if (!successful) {
- printf("That space is already taken, try again.\n");
- newTurn(x);
- }
- }
- int hasWinner() {
- if (hasCombination(1)) {
- return 1;
- } else if (hasCombination(2)) {
- return 2;
- }
- return 0;
- }
- void newCycle(int x);
- void newGame(int x = 1) {
- printf("\nStarting new game.\n");
- clearTable();
- newCycle(x);
- }
- void newCycle(int x) {
- drawTable();
- char player = getSymbolFromNum(x);
- newTurn(x);
- int winner = hasWinner();
- if (winner != 0) {
- printf("\n%c wins! Bravo!\n", player);
- drawTable();
- printf("New game? (y/n)\n");
- char option;
- std::cin >> option;
- if (tolower(option) == 'y') {
- newGame(x == 1 ? 2 : 1);
- }
- } else {
- newCycle(x == 1 ? 2 : 1);
- }
- }
- int main() {
- newGame();
- }
Add Comment
Please, Sign In to add comment