Advertisement
Guest User

Untitled

a guest
Feb 26th, 2020
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.95 KB | None | 0 0
  1. #include <iostream>
  2. #include <array>
  3.  
  4. using namespace std;
  5.  
  6. struct spieler
  7. {
  8.     string name;
  9.     char zeichen;
  10.     int gewonnen = 0;
  11. };
  12.  
  13. void ausgabe(array<array<char, 7>, 7> feld)//spielfeld ausgeben()
  14. {
  15.     for (auto i : feld)
  16.     {
  17.         for (auto j : i)
  18.         {
  19.             cout<< j;
  20.         }
  21.         cout << endl;
  22.     }
  23. }
  24.  
  25. array<array<char, 7>, 7> initFeld()
  26. {
  27.     array<array<char, 7>, 7> feld
  28.     {
  29.         {
  30.             {(char)218, (char)196, (char)194, (char)196, (char)194, (char)196, (char)191},
  31.             {(char)179, (char)49, (char)179, (char)50, (char)179, (char)51, (char)179},
  32.             {(char)195, (char)196, (char)197, (char)196, (char)197, (char)196, (char)180},
  33.             {(char)179, (char)52, (char)179, (char)53, (char)179, (char)54, (char)179},
  34.             {(char)195, (char)196, (char)197, (char)196, (char)197, (char)196, (char)180},
  35.             {(char)179, (char)55, (char)179, (char)56, (char)179, (char)57, (char)179},
  36.             {(char)192, (char)196, (char)193, (char)196, (char)193, (char)196, (char)217}
  37.         }
  38.     };
  39.     return feld;
  40. }
  41.  
  42. bool fgewonnen(array<array<char, 7>, 7> feld, char spieler)//überprüfung gewinner
  43. {
  44.     array<bool, 3> win {false};
  45.     for (int i = 0; i < feld.size(); i++)//überprüfung 1
  46.     {
  47.         if (i % 2 == 1)
  48.         {
  49.             for (int j = 0; j < feld.at(i).size(); j++)
  50.             {
  51.                 if (j % 2 == 1)
  52.                     win.at(floor(j / 2)) = feld.at(i).at(j) == spieler;
  53.             }
  54.         }
  55.  
  56.         if ((win.at(0) && win.at(1)) && (win.at(2) && win.at(0)))
  57.         {
  58.             return true;
  59.         }
  60.     }
  61.  
  62.     for (int i = 0; i < feld.at(0).size(); i++) //überprüfung 2
  63.     {
  64.         if (i % 2 == 1)
  65.         {
  66.             for (int j = 0; j < feld.size(); j++)
  67.             {
  68.                 if (j % 2 == 1)
  69.                     win.at(floor(j / 2)) = feld.at(j).at(i) == spieler;
  70.             }
  71.         }
  72.  
  73.         if ((win.at(0) && win.at(1)) && (win.at(2) && win.at(0)))
  74.         {
  75.             return true;
  76.         }
  77.     }
  78.  
  79.     if (feld.at(1).at(1) == spieler) //diagonal
  80.     {
  81.         if (feld.at(3).at(3) == spieler)
  82.         {
  83.             if (feld.at(5).at(5) == spieler)
  84.             {
  85.                 return true;
  86.             }
  87.         }
  88.     }
  89.  
  90.     if (feld.at(5).at(1) == spieler) //diagonal
  91.     {
  92.         if (feld.at(3).at(3) == spieler)
  93.         {
  94.             if (feld.at(1).at(5) == spieler)
  95.             {
  96.                 return true;
  97.             }
  98.         }
  99.     }
  100.  
  101.     return false;
  102. }
  103.  
  104. void eingeben(array<spieler, 2> &sp)
  105. {
  106.     cout << "Bitte geben Sie den Namen des ersten Spielers ein: ";
  107.     cin >> sp.at(0).name;
  108.     cout << "Bitte geben Sie das Zeichen des ersten Spielers ein: ";
  109.     cin >> sp.at(0).zeichen;
  110.     cout << "Bitte geben Sie den Namen des zweiten Spielers ein: ";
  111.     cin >> sp.at(1).name;
  112.     cout << "Bitte geben Sie das Zeichen des zweiten Spielers ein: ";
  113.     cin >> sp.at(1).zeichen;
  114. }
  115.  
  116. void setzen(array<array<char, 7>, 7> &feld, int pos, char zeichen)
  117. {
  118.     feld.at(floor((pos - 1) / 3) * 2 + 1).at(((pos - 1) % 3) * 2 + 1) = zeichen;
  119. }
  120.  
  121. bool isBelegt(array<array<char, 7>, 7> feld, char sp1, char sp2, int pos)
  122. {
  123.     return feld.at(floor((pos - 1) / 3) * 2 + 1).at(((pos - 1) % 3) * 2 + 1) == sp1 || feld.at(floor((pos - 1) / 3) * 2 + 1).at(((pos - 1) % 3) * 2 + 1) == sp2;
  124. }
  125.  
  126. void spiel(array<array<char, 7>, 7> spielfeld, array<spieler,2> &sp)
  127. {
  128.     int pos;
  129.     int gewonnen = 0;
  130.     int runde = 0;
  131.  
  132.     ausgabe(spielfeld);
  133.     do//schleife
  134.     {
  135.         do//schleife
  136.         {    //spieler x eingabe
  137.             cout << sp.at(runde % 2).name << ": geben Sie die Position (1 - 9) ein: ";
  138.             cin >> pos;
  139.  
  140.         } while (pos <= 0 || pos > 9 || isBelegt(spielfeld, sp.at(0).zeichen, sp.at(1).zeichen, pos));//schleife gültige eingabe
  141.  
  142.         setzen(spielfeld, pos, sp.at(runde % 2).zeichen);
  143.  
  144.         ausgabe(spielfeld);//spielfeld ausgeben
  145.         if (fgewonnen(spielfeld, sp.at(runde % 2).zeichen))//überprüfen ob gewonnen
  146.             break;
  147.         runde++;
  148.     } while (runde <= 9);//end schleife
  149.  
  150.     if (fgewonnen(spielfeld, sp.at(runde % 2).zeichen))
  151.     {
  152.         cout << sp.at(runde % 2).name << " hat gewonnen!" << endl;//ausgabe gewinner
  153.         sp.at(runde % 2).gewonnen++;
  154.     }
  155.     else
  156.     {
  157.         cout << "Unentschieden!" << endl;
  158.     }
  159. }
  160.  
  161. int main()
  162. {
  163.     array<array<char, 7>, 7> spielfeld = initFeld();//spielfeld init
  164.     array<spieler, 2> sp;
  165.     char nochmal;
  166.  
  167.     eingeben(sp);
  168.  
  169.     do
  170.     {
  171.         spiel(spielfeld, sp);
  172.         do
  173.         {
  174.             cout << "Wollen Sie noch ein weiteres Spiel machen? (j/n)";
  175.             cin >> nochmal;
  176.         } while (nochmal != 'j' && nochmal != 'n');
  177.     } while (nochmal == 'j');
  178.     cout << sp.at(0).name << " hat " << sp.at(0).gewonnen << " mal gewonnen." << endl;
  179.     cout << sp.at(1).name << " hat " << sp.at(1).gewonnen << " mal gewonnen." << endl;
  180. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement