Guest User

Untitled

a guest
Oct 20th, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.01 KB | None | 0 0
  1. /*
  2. Krizic Kruzic 4.0 by Krofna
  3. 100% Zavrseno, radi
  4. */
  5. #include <iostream>
  6. #include <cctype>
  7. #include <time.h>
  8. #include <cstdlib>
  9. using namespace std;
  10.  
  11. void PrintBoard(char board[]);
  12. void Reset(char board[], bool *isover, int *counter);
  13. void CheckWinCondition(char board[], bool *isover, int *counter);
  14. void moveSP(char board[], int *counter, int *input, bool *forever);
  15. void moveMP(char board[], int *counter, int *input, bool *forever, int *potez);
  16. void AI(char board[], int *counter, int *input, bool *forever);
  17.  
  18. int main()
  19. {
  20.     srand(time(NULL));
  21.  
  22.     char board[11];
  23.     bool isover;
  24.     bool forever = false; //Samo za kontroliranje while loopa
  25.     int input;
  26.     int counter;
  27.     int potez = 1;
  28.     int opcija;
  29. // Dodati do while dok ne upises 1-3
  30.     cout << "Dobrodosao u Krizic Kruzic v3.3 by Krofna" << endl;
  31.     cout << "Izaberi jednu od opcija: " << endl;
  32.     cout << "1. Multiplayer " << endl;
  33.     cout << "2. Singleplayer " << endl;
  34.     cout << "3. Izlaz " << endl;
  35.  
  36.     cin >> opcija;
  37.  
  38.     switch(opcija){
  39.         case 1:
  40.             while(!forever)
  41.             {
  42.                 Reset(board, &isover, &counter);
  43.                 for(potez=1; ;potez++)
  44.                 {
  45.                     PrintBoard(board);
  46.                     moveMP(board, &counter, &input, &forever, &potez);
  47.                     CheckWinCondition(board, &isover, &counter);
  48.                     if(isover) break;
  49.                 }
  50.                 cout << "Zelis li opet igrati?(1=da/0=ne)" << endl;
  51.                 cin >> forever;
  52.                 if(forever){
  53.                     forever = false;
  54.                     continue;
  55.                 }
  56.                 else return 0;
  57.             }
  58.             break;
  59.         case 2:
  60.             while(!forever)
  61.             {
  62.                 Reset(board, &isover, &counter);
  63.                 while(!forever)
  64.                 {
  65.                     //Potez igraca
  66.                     PrintBoard(board);
  67.                     moveSP(board, &counter, &input, &forever);
  68.                     counter++;
  69.                     CheckWinCondition(board, &isover, &counter);
  70.                     if(isover) break;
  71.  
  72.                     //Potez racunala
  73.                     PrintBoard(board);
  74.                     AI(board, &counter, &input, &forever);
  75.                     counter++;
  76.                     board[input] = 'O';
  77.                     CheckWinCondition(board, &isover, &counter);
  78.                     if(isover) break;
  79.                 }
  80.                 cout << "Zelis li opet igrati?(1=da/0=ne)" << endl;
  81.                 cin >> forever;
  82.                 if(forever){
  83.                     forever = false;
  84.                     continue;
  85.                 }
  86.                 else return 0;
  87.             }
  88.             break;
  89.         case 3:
  90.             return 0;
  91.             break;
  92.     }
  93.  
  94.     return 0;
  95. }
  96.  
  97. void Reset(char board[], bool *isover, int *counter)
  98. {
  99.     strcpy(board, "0123456789");
  100.     *isover = false;
  101.     *counter = 0;
  102. }
  103.  
  104. void PrintBoard(char board[])
  105. {
  106.     system("cls");
  107.     cout << " " << board[1] << " | " << board[2] << " | " << board[3] <<  endl;
  108.     cout << "---" << "+" << "---" << "+" << "---" << endl;
  109.     cout << " " << board[4] << " | " << board[5] << " | " << board[6] << endl;
  110.     cout << "---" << "+" << "---" << "+" << "---" << endl;
  111.     cout << " " << board[7] << " | " << board[8] << " | " << board[9] << endl;
  112.  
  113. }
  114.  
  115. void moveSP(char board[], int *counter, int *input, bool *forever)
  116. {
  117.     forever = false;
  118.     while(!forever)
  119.     {
  120.         cin >> *input;
  121.         if(!isalpha(board[*input])) break;
  122.     }
  123.     board[*input] = 'X';
  124. }
  125.  
  126. void moveMP(char board[], int *counter, int *input, bool *forever, int *potez)
  127. {
  128.     forever = false;
  129.     while(!forever)
  130.     {
  131.         cin >> *input;
  132.         if(!isalpha(board[*input])) break;
  133.     }
  134.     if(*potez % 2)
  135.         board[*input] = 'X';
  136.     else
  137.         board[*input] = 'O';
  138.     *counter += 1;
  139. }
  140.  
  141. void CheckWinCondition(char board[], bool *isover, int *counter)
  142. {
  143.     //  ---
  144.     //  ---
  145.     //  ---
  146.  
  147.     if((board[1] == 'X' && board[2] == 'X' && board[3] == 'X') || (board[1] == 'O' && board[2] == 'O' && board[3] == 'O'))
  148.     {
  149.         PrintBoard(board);
  150.         cout << board[1] << " je pobjedio!" << endl;
  151.         *isover = true;
  152.     }
  153.     else if((board[4] == 'X' && board[5] == 'X' && board[6] == 'X') || (board[4] == 'O' && board[5] == 'O' && board[6] == 'O'))
  154.     {
  155.         PrintBoard(board);
  156.         cout << board[4] << " je pobjedio!" << endl;
  157.         *isover = true;
  158.     }
  159.     else if((board[7] == 'X' && board[8] == 'X' && board[9] == 'X') || (board[7] == 'O' && board[8] == 'O' && board[9] == 'O'))
  160.     {
  161.         PrintBoard(board);
  162.         cout << board[7] << " je pobjedio!" << endl;
  163.         *isover = true;
  164.     }
  165.  
  166.     //  |||
  167.     //  |||
  168.     //  |||
  169.  
  170.     else if((board[1] == 'X' && board[4] == 'X' && board[7] == 'X') || (board[1] == 'O' && board[4] == 'O' && board[7] == 'O'))
  171.     {
  172.         PrintBoard(board);
  173.         cout << board[1] << " je pobjedio!" << endl;
  174.         *isover = true;
  175.     }
  176.     else if((board[2] == 'X' && board[5] == 'X' && board[8] == 'X') || (board[2] == 'O' && board[5] == 'O' && board[8] == 'O'))
  177.     {
  178.         PrintBoard(board);
  179.         cout << board[2] << " je pobjedio!" << endl;
  180.         *isover = true;
  181.     }
  182.     else if((board[3] == 'X' && board[6] == 'X' && board[9] == 'X') || (board[3] == 'O' && board[6] == 'O' && board[9] == 'O'))
  183.     {
  184.         PrintBoard(board);
  185.         cout << board[3] << " je pobjedio!" << endl;
  186.         *isover = true;
  187.     }
  188.  
  189.     //  \   /
  190.     //    X
  191.     //  /   \
  192.    
  193.     else if((board[1] == 'X' && board[5] == 'X' && board[9] == 'X') || (board[1] == 'O' && board[5] == 'O' && board[9] == 'O'))
  194.     {
  195.         PrintBoard(board);
  196.         cout << board[1] << " je pobjedio!" << endl;
  197.         *isover = true;
  198.     }
  199.     else if((board[3] == 'X' && board[5] == 'X' && board[7] == 'X') || (board[3] == 'O' && board[5] == 'O' && board[7] == 'O'))
  200.     {
  201.         PrintBoard(board);
  202.         cout << board[3] << " je pobjedio!" << endl;
  203.         *isover = true;
  204.     }
  205.  
  206.     //9 poteza, a niko nije pobjedio
  207.     else if(*counter == 9)
  208.     {
  209.         PrintBoard(board);
  210.         cout << "Niko nije pobjedio..." << endl;
  211.         *isover = true;
  212.     }
  213. }
  214.  
  215. void AI(char board[], int *counter, int *input, bool *forever)
  216. {
  217.     forever = false;
  218.     //Polje 1
  219.     if(((board[2] == 'X' && board[3] == 'X') || (board[2] == 'O' && board[3] == 'O')) && (!isalpha(board[1])))
  220.     {
  221.         *input = 1;
  222.         return;
  223.     }
  224.     else if(((board[5] == 'X' && board[9] == 'X') || (board[5] == 'O' && board[9] == 'O')) && (!isalpha(board[1])))
  225.     {
  226.         *input = 1;
  227.         return;
  228.     }
  229.     else if(((board[4] == 'X' && board[7] == 'X') || (board[4] == 'O' && board[7] == 'O')) && (!isalpha(board[1])))
  230.     {
  231.         *input = 1;
  232.         return;
  233.     }
  234.  
  235.     //Polje 2
  236.     else if(((board[1] == 'X' && board[3] == 'X') || (board[1] == 'O' && board[3] == 'O')) && (!isalpha(board[2])))
  237.     {
  238.         *input = 2;
  239.         return;
  240.     }
  241.     else if(((board[5] == 'X' && board[8] == 'X') || (board[5] == 'O' && board[8] == 'O')) && (!isalpha(board[2])))
  242.     {
  243.         *input = 2;
  244.         return;
  245.     }
  246.  
  247.     //Polje 3
  248.     else if(((board[1] == 'X' && board[2] == 'X') || (board[1] == 'O' && board[2] == 'O')) && (!isalpha(board[3])))
  249.     {
  250.         *input = 3;
  251.         return;
  252.     }
  253.     else if(((board[7] == 'X' && board[5] == 'X') || (board[7] == 'O' && board[5] == 'O')) && (!isalpha(board[3])))
  254.     {
  255.         *input = 3;
  256.         return;
  257.     }
  258.     else if(((board[6] == 'X' && board[9] == 'X') || (board[6] == 'O' && board[9] == 'O')) && (!isalpha(board[3])))
  259.     {
  260.         *input = 3;
  261.         return;
  262.     }
  263.  
  264.     //Polje 4
  265.     else if(((board[1] == 'X' && board[7] == 'X') || (board[1] == 'O' && board[7] == 'O')) && (!isalpha(board[4])))
  266.     {
  267.         *input = 4;
  268.         return;
  269.     }
  270.     else if(((board[5] == 'X' && board[6] == 'X') || (board[5] == 'O' && board[6] == 'O')) && (!isalpha(board[4])))
  271.     {
  272.         *input = 4;
  273.         return;
  274.     }
  275.  
  276.     //Polje 5
  277.     else if(((board[1] == 'X' && board[9] == 'X') || (board[1] == 'O' && board[9] == 'O')) && (!isalpha(board[5])))
  278.     {
  279.         *input = 5;
  280.         return;
  281.     }
  282.     else if(((board[3] == 'X' && board[7] == 'X') || (board[3] == 'O' && board[7] == 'O')) && (!isalpha(board[5])))
  283.     {
  284.         *input = 5;
  285.         return;
  286.     }
  287.     else if(((board[4] == 'X' && board[6] == 'X') || (board[4] == 'O' && board[6] == 'O')) && (!isalpha(board[5])))
  288.     {
  289.         *input = 5;
  290.         return;
  291.     }
  292.     else if(((board[2] == 'X' && board[8] == 'X') || (board[2] == 'O' && board[8] == 'O')) && (!isalpha(board[5])))
  293.     {
  294.         *input = 5;
  295.         return;
  296.     }
  297.     //Polje 6
  298.     else if(((board[3] == 'X' && board[9] == 'X') || (board[3] == 'O' && board[9] == 'O')) && (!isalpha(board[6])))
  299.     {
  300.         *input = 6;
  301.         return;
  302.     }
  303.     else if(((board[4] == 'X' && board[5] == 'X') || (board[4] == 'O' && board[5] == 'O')) && (!isalpha(board[6])))
  304.     {
  305.         *input = 6;
  306.         return;
  307.     }
  308.  
  309.     //Polje 7
  310.     else if(((board[1] == 'X' && board[4] == 'X') || (board[1] == 'O' && board[4] == 'O')) && (!isalpha(board[7])))
  311.     {
  312.         *input = 7;
  313.         return;
  314.     }
  315.     else if(((board[5] == 'X' && board[3] == 'X') || (board[5] == 'O' && board[3] == 'O')) && (!isalpha(board[7])))
  316.     {
  317.         *input = 7;
  318.         return;
  319.     }
  320.     else if(((board[8] == 'X' && board[9] == 'X') || (board[2] == 'O' && board[8] == 'O')) && (!isalpha(board[7])))
  321.     {
  322.         *input = 7;
  323.         return;
  324.     }
  325.  
  326.     //Polje 8
  327.     else if(((board[2] == 'X' && board[5] == 'X') || (board[2] == 'O' && board[5] == 'O')) && (!isalpha(board[8])))
  328.     {
  329.         *input = 8;
  330.         return;
  331.     }
  332.     else if(((board[7] == 'X' && board[9] == 'X') || (board[7] == 'O' && board[9] == 'O')) && (!isalpha(board[8])))
  333.     {
  334.         *input = 8;
  335.         return;
  336.     }
  337.  
  338.     //Polje 9
  339.     else if(((board[3] == 'X' && board[6] == 'X') || (board[3] == 'O' && board[6] == 'O')) && (!isalpha(board[9])))
  340.     {
  341.         *input = 9;
  342.         return;
  343.     }
  344.     else if(((board[1] == 'X' && board[5] == 'X') || (board[1] == 'O' && board[5] == 'O')) && (!isalpha(board[9])))
  345.     {
  346.         *input = 9;
  347.         return;
  348.     }
  349.     else if(((board[7] == 'X' && board[8] == 'X') || (board[7] == 'O' && board[8] == 'O')) && (!isalpha(board[9])))
  350.     {
  351.         *input = 9;
  352.         return;
  353.     }
  354.  
  355.     //Nasumicni potez
  356.     else{
  357.         while(!forever)
  358.         {
  359.             *input = rand() % 10;
  360.             if(!isalpha(board[*input])) break;
  361.         }
  362.     }
  363. }
Add Comment
Please, Sign In to add comment