Advertisement
markyrocks

halfassed tic-tac-toe

Dec 11th, 2021
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.75 KB | None | 0 0
  1. #include<Windows.h>
  2. #include<iostream>
  3. #include<vector>
  4.  
  5.  
  6. struct ttt {
  7.  
  8.     int board[3][3];
  9.     int X, O;
  10.     bool player1, player2;
  11.     ttt() : player1{}, player2{}, board{}, X(1), O(-1) {}
  12.  
  13.     void play() {
  14.         int numberPlayers = 2;
  15.         //how many players?
  16.         display();
  17.         int turns = 0;
  18.         bool flip = false;
  19.         while (checkwin() == ' ' && turns < 9) {
  20.             int move = 0;
  21.             if (numberPlayers == 2) {
  22.                 while (move == 0) {
  23.                     std::cout << "Player " << flip + 1 << " Enter A Move \n";
  24.                     scanf_s("%d", &move);
  25.                     if (checkmove(move)) {
  26.                         updateboard(move, flip + 1);
  27.                         display();
  28.                     }
  29.                     else {
  30.                         std::cout << "Incorrect input or square is already occupied Please Try again\n";
  31.                         move = 0;
  32.                     }
  33.                 }
  34.             }
  35.             else if (numberPlayers == 1) {
  36.  
  37.                 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  38.  
  39.  
  40.             }
  41.             flip = !flip;
  42.             turns++;
  43.         }
  44.  
  45.         if (checkwin() == ' ') {
  46.             std::cout << " ITS A TIE\n";
  47.         }
  48.         else {
  49.             std::cout << checkwin() << " WINS!!\n";
  50.         }
  51.         std::cout << "Game Over\n";
  52.  
  53.     }
  54.  
  55.     std::vector<int> copyboard() {
  56.         std::vector<int> cc(9);
  57.         for (int i = 0; i < 9; i++) {
  58.             cc[i] = board[(int)floor(i / 3)][i % 3];
  59.         }
  60.         return cc;
  61.     }
  62.  
  63.     int aimove() {
  64.        
  65.         std::vector<int> cc = copyboard();
  66.         std::vector<int> pms = potentialmoves(cc);
  67.         if (pms.size() == 9) { return 5; }
  68.         std::vector<std::vector<int>> scorelist(pms.size());
  69.  
  70.         int move = 0;
  71.  
  72.  
  73.  
  74.         return move;
  75.     }
  76.     void aimove_recur(std::vector<int> cc, int* move,bool is_max) {
  77.  
  78.     }
  79.  
  80.     std::vector<int> potentialmoves(std::vector<int> cc) {
  81.         //basically empty squares
  82.         std::vector<int> v{};
  83.         for (int i = 0; i < 9; i++) {
  84.             if (cc[i] == 0) {
  85.                 v.push_back(i);
  86.             }
  87.         }
  88.         return v;
  89.     }
  90.  
  91.     //int checktwos(std::vector<int> cc,int opponent) {
  92.     //  int xscore = 0;
  93.     //  int yscore = 0;
  94.     //  int dscore = 0;
  95.     //  int xdscore = 0;
  96.     //  for (int i = 0; i < 3; i++) {
  97.     //      for (int j = 0; j < 3; j++) {
  98.     //          xscore += cc[ i * 3 + j ];
  99.     //          yscore += cc[ j * 3 + i];
  100.     //          if (i == j) {
  101.     //              dscore += cc[ (j + i) * 2];
  102.     //              xdscore += cc[j + i + 2];
  103.     //          }
  104.  
  105.     //      }
  106.     //      if (xscore == 2 || yscore == 2 || dscore == 2 || xdscore==2) {
  107.     //          return 'X';
  108.     //      }
  109.     //      xscore = 0;
  110.     //      yscore = 0;
  111.     //  }
  112.  
  113.     //}
  114.  
  115.  
  116.     void updateboard(int move, byte player) {
  117.         board[(int)floor((move - 1) / 3)][(move - 1) % 3] = player == 1 ? X : O;
  118.     }
  119.  
  120.     bool checkmove(int move) {
  121.         auto b = board[(int)floor((move-1) / 3)][(move - 1) % 3];
  122.         if (b == 0) { return true; }
  123.         return false;
  124.     }
  125.  
  126.     void display() {
  127.         std::cout << "\n\n\n";
  128.         for (int i = 0; i < 9; i++) {
  129.             auto b = board[(int)floor(i / 3)][i % 3];
  130.             if (b == X) {
  131.                 std::cout << "X ";
  132.             }
  133.             else if (b == O) {
  134.                 std::cout << "O ";
  135.             }
  136.             else {
  137.                 std::cout << i + 1 << " ";
  138.             }
  139.            
  140.             if (!((i + 1) % 3)) {
  141.                 std::cout << '\n';
  142.             }
  143.         }
  144.         std::cout << "\n\n\n";
  145.     }
  146.  
  147.     void reset() {
  148.         for (int i = 0; i < 3;i++) {
  149.             for (int j = 0; j < 3; j++) {
  150.                 board[i][j] = 0;
  151.             }
  152.         }
  153.     }
  154.  
  155.     char checkwin() {
  156.         int xscore = 0;
  157.         int yscore = 0;
  158.         int dscore = 0;
  159.         int ddscore = 0;
  160.    
  161.         for (int i = 0; i < 3; i++) {
  162.             for (int j = 0; j < 3; j++) {
  163.                 xscore +=board[i][j];
  164.                 yscore += board[j][i];
  165.                 if (i == j) {
  166.                     dscore += board[i][j];
  167.                     if (i == 0) {
  168.                         ddscore += board[i + 2][j];
  169.                     }
  170.                     else if (i == 1) {
  171.                         ddscore += board[i][j];
  172.                     }
  173.                     else if (i == 2) {
  174.                         ddscore += board[i][j - 2];
  175.                     }
  176.                 }
  177.  
  178.             }
  179.             if (xscore == 3 || yscore==3 || dscore==3 || ddscore == 3) {
  180.                 return 'X';
  181.             }
  182.             else if (xscore == -3 || yscore == -3 || dscore == -3 || ddscore == -3) {
  183.             return 'O';
  184.             }
  185.             xscore = 0;
  186.             yscore = 0;
  187.         }
  188.    
  189.         return ' ';
  190.     }
  191.  
  192. };
  193.  
  194.  
  195. int main() {
  196.    
  197.     ttt a;
  198.  
  199.     a.reset();
  200.     a.play();
  201.  
  202. }
  203.  
  204.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement