vlatkovski

tac tac toe v1.2

Aug 20th, 2016
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.79 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdio.h>
  3.  
  4. int Array[3][3] = {{0,0,0},{0,0,0},{0,0,0}};
  5.  
  6. char getSymbolFromNum(int x) {
  7.     switch (x) {
  8.         case 1: return 'X';
  9.         case 2: return 'O';
  10.     }
  11.     return ' ';
  12. }
  13.  
  14. void drawTable() {
  15.     printf(" --- --- --- \n| %c | %c | %c |\n --- --- --- \n| %c | %c | %c |\n --- --- --- \n| %c | %c | %c |\n --- --- ---\n",
  16.            getSymbolFromNum(Array[0][0]), getSymbolFromNum(Array[0][1]), getSymbolFromNum(Array[0][2]),
  17.            getSymbolFromNum(Array[1][0]), getSymbolFromNum(Array[1][1]), getSymbolFromNum(Array[1][2]),
  18.            getSymbolFromNum(Array[2][0]), getSymbolFromNum(Array[2][1]), getSymbolFromNum(Array[2][2]));
  19. }
  20.  
  21. void clearTable() {
  22.     for (int a = 0; a < 3; a++) {
  23.         for (int b = 0; b < 3; b++) {
  24.             Array[a][b] = 0;
  25.         }
  26.     }
  27. }
  28.  
  29. int hasCombination(int x) {
  30.     return
  31.        ((Array[0][0] == x && Array[0][1] == x && Array[0][2] == x) || // xxx ??? ???
  32.         (Array[1][0] == x && Array[1][1] == x && Array[1][2] == x) || // ??? xxx ???
  33.         (Array[2][0] == x && Array[2][1] == x && Array[2][2] == x) || // ??? ??? xxx
  34.         (Array[0][0] == x && Array[1][0] == x && Array[2][0] == x) || // x?? x?? x??
  35.         (Array[0][1] == x && Array[1][1] == x && Array[2][1] == x) || // ?x? ?x? ?x?
  36.         (Array[0][2] == x && Array[1][2] == x && Array[2][2] == x) || // ??x ??x ??x
  37.         (Array[0][0] == x && Array[1][1] == x && Array[2][2] == x) || // x?? ?x? ??x
  38.         (Array[2][2] == x && Array[1][1] == x && Array[0][0] == x));  // ??x ?x? x??
  39. }
  40.  
  41. int place(int a, int b, int x) {
  42.     if (Array[a][b] == 0) {
  43.         Array[a][b] = x;
  44.         return 1;
  45.     }
  46.     return 0;
  47. }
  48.  
  49. void newTurn(int x) {
  50.     int a, b;
  51.     char player = getSymbolFromNum(x);
  52.  
  53.     printf("%c's turn to enter a row (1, 2, or 3) and column (1, 2, or 3)\n> ", player);
  54.     std::cin >> a >> b;
  55.  
  56.     int successful = place(a - 1, b - 1, x);
  57.     if (!successful) {
  58.         printf("That space is already taken, try again.\n");
  59.         newTurn(x);
  60.     }
  61. }
  62.  
  63. int hasWinner() {
  64.     if (hasCombination(1)) {
  65.         return 1;
  66.     } else if (hasCombination(2)) {
  67.         return 2;
  68.     }
  69.     return 0;
  70. }
  71.  
  72. void newCycle(int x);
  73.  
  74. void newGame(int x = 1) {
  75.     printf("\nStarting new game.\n");
  76.     clearTable();
  77.     newCycle(x);
  78. }
  79.  
  80. void newCycle(int x) {
  81.     drawTable();
  82.     char player = getSymbolFromNum(x);
  83.     newTurn(x);
  84.     int winner = hasWinner();
  85.     if (winner != 0) {
  86.         printf("\n%c wins! Bravo!\n", player);
  87.         drawTable();
  88.  
  89.         printf("New game? (y/n)\n");
  90.         char option;
  91.         std::cin >> option;
  92.  
  93.         if (tolower(option) == 'y') {
  94.             newGame(x == 1 ? 2 : 1);
  95.         }
  96.     } else {
  97.         newCycle(x == 1 ? 2 : 1);
  98.     }
  99. }
  100.  
  101. int main() {
  102.     newGame();
  103. }
Add Comment
Please, Sign In to add comment