Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <array>
- using namespace std;
- struct spieler
- {
- string name;
- char zeichen;
- int gewonnen = 0;
- };
- void ausgabe(array<array<char, 7>, 7> feld)//spielfeld ausgeben()
- {
- for (auto i : feld)
- {
- for (auto j : i)
- {
- cout<< j;
- }
- cout << endl;
- }
- }
- array<array<char, 7>, 7> initFeld()
- {
- array<array<char, 7>, 7> feld
- {
- {
- {(char)218, (char)196, (char)194, (char)196, (char)194, (char)196, (char)191},
- {(char)179, (char)49, (char)179, (char)50, (char)179, (char)51, (char)179},
- {(char)195, (char)196, (char)197, (char)196, (char)197, (char)196, (char)180},
- {(char)179, (char)52, (char)179, (char)53, (char)179, (char)54, (char)179},
- {(char)195, (char)196, (char)197, (char)196, (char)197, (char)196, (char)180},
- {(char)179, (char)55, (char)179, (char)56, (char)179, (char)57, (char)179},
- {(char)192, (char)196, (char)193, (char)196, (char)193, (char)196, (char)217}
- }
- };
- return feld;
- }
- bool fgewonnen(array<array<char, 7>, 7> feld, char spieler)//überprüfung gewinner
- {
- array<bool, 3> win {false};
- for (int i = 0; i < feld.size(); i++)//überprüfung 1
- {
- if (i % 2 == 1)
- {
- for (int j = 0; j < feld.at(i).size(); j++)
- {
- if (j % 2 == 1)
- win.at(floor(j / 2)) = feld.at(i).at(j) == spieler;
- }
- }
- if ((win.at(0) && win.at(1)) && (win.at(2) && win.at(0)))
- {
- return true;
- }
- }
- for (int i = 0; i < feld.at(0).size(); i++) //überprüfung 2
- {
- if (i % 2 == 1)
- {
- for (int j = 0; j < feld.size(); j++)
- {
- if (j % 2 == 1)
- win.at(floor(j / 2)) = feld.at(j).at(i) == spieler;
- }
- }
- if ((win.at(0) && win.at(1)) && (win.at(2) && win.at(0)))
- {
- return true;
- }
- }
- if (feld.at(1).at(1) == spieler) //diagonal
- {
- if (feld.at(3).at(3) == spieler)
- {
- if (feld.at(5).at(5) == spieler)
- {
- return true;
- }
- }
- }
- if (feld.at(5).at(1) == spieler) //diagonal
- {
- if (feld.at(3).at(3) == spieler)
- {
- if (feld.at(1).at(5) == spieler)
- {
- return true;
- }
- }
- }
- return false;
- }
- void eingeben(array<spieler, 2> &sp)
- {
- cout << "Bitte geben Sie den Namen des ersten Spielers ein: ";
- cin >> sp.at(0).name;
- cout << "Bitte geben Sie das Zeichen des ersten Spielers ein: ";
- cin >> sp.at(0).zeichen;
- cout << "Bitte geben Sie den Namen des zweiten Spielers ein: ";
- cin >> sp.at(1).name;
- cout << "Bitte geben Sie das Zeichen des zweiten Spielers ein: ";
- cin >> sp.at(1).zeichen;
- }
- void setzen(array<array<char, 7>, 7> &feld, int pos, char zeichen)
- {
- feld.at(floor((pos - 1) / 3) * 2 + 1).at(((pos - 1) % 3) * 2 + 1) = zeichen;
- }
- bool isBelegt(array<array<char, 7>, 7> feld, char sp1, char sp2, int pos)
- {
- 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;
- }
- void spiel(array<array<char, 7>, 7> spielfeld, array<spieler,2> &sp)
- {
- int pos;
- int gewonnen = 0;
- int runde = 0;
- ausgabe(spielfeld);
- do//schleife
- {
- do//schleife
- { //spieler x eingabe
- cout << sp.at(runde % 2).name << ": geben Sie die Position (1 - 9) ein: ";
- cin >> pos;
- } while (pos <= 0 || pos > 9 || isBelegt(spielfeld, sp.at(0).zeichen, sp.at(1).zeichen, pos));//schleife gültige eingabe
- setzen(spielfeld, pos, sp.at(runde % 2).zeichen);
- ausgabe(spielfeld);//spielfeld ausgeben
- if (fgewonnen(spielfeld, sp.at(runde % 2).zeichen))//überprüfen ob gewonnen
- break;
- runde++;
- } while (runde <= 9);//end schleife
- if (fgewonnen(spielfeld, sp.at(runde % 2).zeichen))
- {
- cout << sp.at(runde % 2).name << " hat gewonnen!" << endl;//ausgabe gewinner
- sp.at(runde % 2).gewonnen++;
- }
- else
- {
- cout << "Unentschieden!" << endl;
- }
- }
- int main()
- {
- array<array<char, 7>, 7> spielfeld = initFeld();//spielfeld init
- array<spieler, 2> sp;
- char nochmal;
- eingeben(sp);
- do
- {
- spiel(spielfeld, sp);
- do
- {
- cout << "Wollen Sie noch ein weiteres Spiel machen? (j/n)";
- cin >> nochmal;
- } while (nochmal != 'j' && nochmal != 'n');
- } while (nochmal == 'j');
- cout << sp.at(0).name << " hat " << sp.at(0).gewonnen << " mal gewonnen." << endl;
- cout << sp.at(1).name << " hat " << sp.at(1).gewonnen << " mal gewonnen." << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement