-
Notifications
You must be signed in to change notification settings - Fork 2
Tictactoe #144
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Tictactoe #144
Changes from all commits
baf3e0d
d6575ff
6a8f458
451a57c
c4bcfbb
388ce49
9d8a092
8c0a966
14d948f
6339326
ecf2a8c
6b7e69f
a489b35
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,124 @@ | ||
#include <iostream> | ||
#include <array> | ||
|
||
static std::string fts(int feld) { | ||
switch (feld) { | ||
case 0: | ||
return " "; | ||
case 1: | ||
return "X"; | ||
case 2: | ||
return "O"; | ||
default: | ||
return "?"; | ||
} | ||
} | ||
|
||
int frage_feld_nummer(std::array<int, 9> feld){ | ||
int in = -1; | ||
while (true) { | ||
std::cout << "Gib ein Feld ein (0-8): "; | ||
std::cin >> in; | ||
if (in < 0 || in > 8) { | ||
std::cout << "Ungültige Feldnummer!" << std::endl; | ||
continue; | ||
} | ||
if (feld[in] != 0) { | ||
std::cout << "Feld ist besetzt!" << std::endl; | ||
continue; | ||
} | ||
break; | ||
} | ||
return in; | ||
} | ||
|
||
void gebe_feld_aus(std::array<int, 9> feld){ | ||
std::cout << " | | " << std::endl; | ||
std::cout << " " << fts(feld[0]) << " | " << fts(feld[1]) << " | " << fts(feld[2]) << " " << std::endl; | ||
std::cout << " | | " << std::endl; | ||
std::cout << "---+---+---" << std::endl; | ||
std::cout << " | | " << std::endl; | ||
std::cout << " " << fts(feld[3]) << " | " << fts(feld[4]) << " | " << fts(feld[5]) << " " << std::endl; | ||
std::cout << " | | " << std::endl; | ||
std::cout << "---+---+---" << std::endl; | ||
std::cout << " | | " << std::endl; | ||
std::cout << " " << fts(feld[6]) << " | " << fts(feld[7]) << " | " << fts(feld[8]) << " " << std::endl; | ||
std::cout << " | | " << std::endl; | ||
} | ||
|
||
int gewinnerin(std::array<int, 9> feld){ | ||
// Prüfe Reihen und Spalten | ||
for (int i = 0; i < 3; i++) { | ||
int a = feld[3*i] & feld[3*i+1] & feld[3*i+2]; | ||
int b = feld[3*i] | feld[3*i+1] | feld[3*i+2]; | ||
if (a == b && a != 0) { | ||
return feld[3*i]; | ||
} | ||
a = feld[i] & feld[i+3] & feld[i+6]; | ||
b = feld[i] | feld[i+3] | feld[i+6]; | ||
if (a == b && a != 0) { | ||
return feld[i]; | ||
} | ||
} | ||
// Prüfe Diagonale 1 | ||
int a = feld[0] & feld[4] & feld[8]; | ||
int b = feld[0] | feld[4] | feld[8]; | ||
if (a == b && a != 0) { | ||
return feld[0]; | ||
} | ||
|
||
// Prüfe Diagonale 2 | ||
a = feld[2] & feld[4] & feld[6]; | ||
b = feld[2] | feld[4] | feld[6]; | ||
if (a == b && a != 0) { | ||
return feld[2]; | ||
} | ||
|
||
for (int i = 0; i < 9; i++) { | ||
if (feld[i] == 0) { | ||
return 0; | ||
} | ||
} | ||
return 3; | ||
} | ||
|
||
|
||
|
||
int main() { | ||
// Setup | ||
restart: | ||
std::array<int, 9> spielfeld{0}; | ||
int current_player = 1; | ||
int input_player; | ||
|
||
while (true) { | ||
// Input | ||
input_player = frage_feld_nummer(spielfeld); | ||
|
||
// Update | ||
spielfeld[input_player] = current_player; | ||
int gewinner = gewinnerin(spielfeld); | ||
switch (gewinner) { | ||
case 1: | ||
std::cout << "Spieler 1 ist der Gewinner." << std::endl; | ||
goto restart; | ||
|
||
case 2: | ||
std::cout << "Spieler 2 ist der Gewinner." << std::endl; | ||
goto restart; | ||
|
||
case 3: | ||
std::cout << "Das Spiel endet unentschieden." << std::endl; | ||
goto restart; | ||
|
||
default: | ||
current_player = (current_player == 2) ? 1 : 2; | ||
break; | ||
} | ||
|
||
|
||
// Display | ||
gebe_feld_aus(spielfeld); | ||
} | ||
return 0; | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,133 @@ | ||
#include <iostream> | ||
#include <array> | ||
|
||
std::string fts(int feld) { | ||
|
||
if (feld == 0) { | ||
return " "; | ||
} else if (feld == 1) { | ||
return "X"; | ||
} else if (feld == 2) { | ||
return "O"; | ||
} else { | ||
return "?"; | ||
} | ||
} | ||
|
||
int frage_feld_nummer(std::array<int, 9> feld){ | ||
int in = -1; | ||
bool valid = false; | ||
while (!valid) { | ||
std::cout << "Gib ein Feld ein (0-8): "; | ||
std::cin >> in; | ||
if (in < 0 || in > 8) { | ||
std::cout << "Ungültige Feldnummer!" << std::endl; | ||
} | ||
if (feld[in] != 0) { | ||
std::cout << "Feld ist besetzt!" << std::endl; | ||
} | ||
else { | ||
valid = true; // Markiert die Eingabe als gültig wenn keine Fehler aufgetauch sind | ||
} | ||
} | ||
return in; | ||
} | ||
|
||
void gebe_feld_aus(std::array<int, 9> feld){ | ||
std::cout << " | | " << std::endl; | ||
std::cout << " " << fts(feld[0]) << " | " << fts(feld[1]) << " | " << fts(feld[2]) << " " << std::endl; | ||
std::cout << " | | " << std::endl; | ||
std::cout << "---+---+---" << std::endl; | ||
std::cout << " | | " << std::endl; | ||
std::cout << " " << fts(feld[3]) << " | " << fts(feld[4]) << " | " << fts(feld[5]) << " " << std::endl; | ||
std::cout << " | | " << std::endl; | ||
std::cout << "---+---+---" << std::endl; | ||
std::cout << " | | " << std::endl; | ||
std::cout << " " << fts(feld[6]) << " | " << fts(feld[7]) << " | " << fts(feld[8]) << " " << std::endl; | ||
std::cout << " | | " << std::endl; | ||
} | ||
|
||
int gewinnerin(std::array<int, 9> feld){ | ||
// Prüfe Reihen und Spalten | ||
for (int i = 0; i < 3; i++) { | ||
int a = feld[3*i] & feld[3*i+1] & feld[3*i+2]; | ||
int b = feld[3*i] | feld[3*i+1] | feld[3*i+2]; | ||
if (a == b && a != 0) { | ||
return feld[3*i]; | ||
} | ||
a = feld[i] & feld[i+3] & feld[i+6]; | ||
b = feld[i] | feld[i+3] | feld[i+6]; | ||
if (a == b && a != 0) { | ||
return feld[i]; | ||
} | ||
} | ||
// Prüfe Diagonale 1 | ||
int a = feld[0] & feld[4] & feld[8]; | ||
int b = feld[0] | feld[4] | feld[8]; | ||
if (a == b && a != 0) { | ||
return feld[0]; | ||
} | ||
|
||
// Prüfe Diagonale 2 | ||
a = feld[2] & feld[4] & feld[6]; | ||
b = feld[2] | feld[4] | feld[6]; | ||
if (a == b && a != 0) { | ||
return feld[2]; | ||
} | ||
|
||
for (int i = 0; i < 9; i++) { | ||
if (feld[i] == 0) { | ||
return 0; | ||
} | ||
} | ||
return 3; | ||
} | ||
|
||
|
||
|
||
int main() { | ||
// Setup | ||
std::array<int, 9> spielfeld{0}; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This does currently not compile on Apple LLVM/Clang as they have not yet fully implemented the C++ 20 Standard. As normal LLVM-Clang has implemented aggregate Initialisation as far back as 2022 and g++ supports this as well, I have decided to ignore this issue. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'd open an Issue for this and wait how far the homebrew clang got next year |
||
int current_player = 1; | ||
int input_player; | ||
|
||
while (true) { | ||
// Input | ||
input_player = frage_feld_nummer(spielfeld); | ||
|
||
// Update | ||
spielfeld[input_player] = current_player; | ||
int gewinner = gewinnerin(spielfeld); | ||
bool reset = false; | ||
|
||
if (gewinner == 1 || gewinner == 2 || gewinner == 3) { // Prüft ob das Spiel beendet ist | ||
reset = true; | ||
if (gewinner == 1) { | ||
std::cout << "Spieler 1 ist der Gewinner." << std::endl; | ||
} else if (gewinner == 2) { | ||
std::cout << "Spieler 2 ist der Gewinner." << std::endl; | ||
} else { | ||
std::cout << "Das Spiel endet unentschieden." << std::endl; | ||
} | ||
} | ||
|
||
if (current_player == 1) { // Wechselt den Spieler | ||
current_player = 2; | ||
} else { | ||
current_player = 1; | ||
} | ||
|
||
// Display | ||
gebe_feld_aus(spielfeld); | ||
|
||
if (reset) // Setzt das Spiel zurück falls es geendet hat | ||
{ | ||
current_player = 1; | ||
for (int i = 0; i < 9; i++) { | ||
spielfeld[i] = 0; | ||
} | ||
reset = false; | ||
} | ||
} | ||
return 0; | ||
} |
fschledorn marked this conversation as resolved.
Show resolved
Hide resolved
|
This file was deleted.
This file was deleted.
This file was deleted.
This file was deleted.
Uh oh!
There was an error while loading. Please reload this page.