You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
177 lines
5.4 KiB
177 lines
5.4 KiB
#include <stdio.h>
|
|
#include <stdbool.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
#define ANSI_COLOR_BRIGHT_RED "\x1b[91m"
|
|
#define ANSI_COLOR_BRIGHT_CYAN "\x1b[96m"
|
|
#define ANSI_COLOR_BRIGHT_YELLOW "\x1b[93m"
|
|
#define ANSI_COLOR_RESET "\x1b[0m"
|
|
|
|
int Runde = 1;
|
|
// Funktion, um das Spielboard zu initialisieren
|
|
void initializeBoard(char board[3][3]) {
|
|
for (int i = 0; i < 3; i++) {
|
|
for (int j = 0; j < 3; j++) {
|
|
board[i][j] = '_';
|
|
}
|
|
}
|
|
}
|
|
void displayBoard(char board[3][3]) {
|
|
#ifdef _WIN32
|
|
system("cls");
|
|
#else
|
|
system("clear");
|
|
#endif
|
|
for (int i = 0; i < 3; i++) {
|
|
for (int j = 0; j < 3; j++) {
|
|
if (board[i][j] == '_') {
|
|
printf(ANSI_COLOR_BRIGHT_YELLOW"%c "ANSI_COLOR_RESET, board[i][j]);
|
|
}
|
|
else if (board[i][j] == 'X') {
|
|
printf(ANSI_COLOR_BRIGHT_CYAN"%c "ANSI_COLOR_RESET, board[i][j]);
|
|
}
|
|
else {
|
|
printf(ANSI_COLOR_BRIGHT_RED"%c "ANSI_COLOR_RESET, board[i][j]);
|
|
}
|
|
}
|
|
printf("\n");
|
|
}
|
|
}
|
|
|
|
int Winner(char board[3][3]) {
|
|
// Überprüfen Sieg
|
|
// Überprüfen Reihen
|
|
for (int i = 0; i < 3; i++) {
|
|
if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != '_') {
|
|
if (board[i][0] == 'X') {
|
|
return 1;
|
|
}
|
|
else return 2;
|
|
}
|
|
}
|
|
// Überprüfen Spalten
|
|
for (int j = 0; j < 3; j++) {
|
|
if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[0][j] != '_') {
|
|
if (board[0][j] == 'X') {
|
|
return 1;
|
|
}
|
|
else return 2;
|
|
}
|
|
}
|
|
// Überprüfen Diagonalen
|
|
if ((board[0][0] == board[1][1] && board[1][1] == board[2][2]) || (board[0][2] == board[1][1] && board[1][1] == board[2][0])) {
|
|
if (board[1][1] != '_') {
|
|
if (board[1][1] == 'X') {
|
|
return 1;
|
|
}
|
|
else return 2;
|
|
}
|
|
}
|
|
//Überprüfe Runde
|
|
for (int k = 0; k < 3; k++) {
|
|
for (int l = 0; l < 3; l++) {
|
|
if (board[k][l] == '_') {
|
|
return 9;
|
|
}
|
|
}
|
|
}
|
|
//Bestätige Unendschieden
|
|
printf("Es ist ein Unendschieden\n");
|
|
return 0;
|
|
}
|
|
void makeMove(char board[3][3], int row, int column) {
|
|
if (Runde < 10) {
|
|
if (Runde % 2 == 0) {
|
|
if (board[row][column] == '_') {
|
|
board[row][column] = 'O';
|
|
}
|
|
else {
|
|
printf("Das Feld ist schon besetzt. Gib ein anderes Feld ein:\n");
|
|
printf("Reihe:");
|
|
scanf("%d", &row);
|
|
printf("Spalte:");
|
|
scanf("%d", &column);
|
|
row -= 1;
|
|
column -= 1;
|
|
makeMove(board, row, column);
|
|
}
|
|
}
|
|
else {
|
|
if (board[row][column] == '_') {
|
|
board[row][column] = 'X';
|
|
}
|
|
else {
|
|
printf("Das Feld ist schon besetzt. Gib ein anderes Feld ein:\n");
|
|
printf("Reihe:");
|
|
scanf("%d", &row);
|
|
printf("Spalte:");
|
|
scanf("%d", &column);
|
|
row -= 1;
|
|
column -= 1;
|
|
makeMove(board, row, column);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// Hauptfunktion zum Spielen des Tic Tac Toe-Spiels
|
|
int TicTacToe_ausfuehren() {
|
|
int row;
|
|
int column;
|
|
char board[3][3];
|
|
char Spieler1[50], Spieler2[50];
|
|
int Punkte1 = 0, Punkte2 = 0;
|
|
char Name1[50], Name2[50];
|
|
char Ende[50] = { "Weiter" };
|
|
printf("Name Spieler 1:");
|
|
scanf("%s", Name1);
|
|
printf("Name Spieler 2:");
|
|
scanf("%s", Name2);
|
|
while (Ende[0] == 'W' || Ende[0] == 'w') {
|
|
Runde = 1;
|
|
initializeBoard(board);
|
|
printf("%s, Was willst du sein?\n[X/O]\n", Name1);
|
|
scanf("%s", Spieler1);
|
|
if (Spieler1[0] != 'X' && Spieler1[0] != 'O') {
|
|
printf("Ungültige Auswahl. Das Spiel wird beendet.\n");
|
|
break;
|
|
}
|
|
strcpy(Spieler2, (Spieler1[0] == 'X') ? Name2 : Name1);
|
|
strcpy(Spieler1, (Spieler1[0] == 'X') ? Name1 : Name2);
|
|
printf("\nWillkommen %s und %s. Eure Runde Beginnt jetzt.", Spieler1, Spieler2);
|
|
while (Winner(board) == 9) {
|
|
displayBoard(board);
|
|
if (Runde % 2 != 0) {
|
|
printf("Spieler 1 gebe das Feld an wo du dein X setzen willst.\n");
|
|
}
|
|
else printf("Spieler 2 gebe das Feld an wo du dein O setzen willst.\n");
|
|
printf("Reihe:");
|
|
scanf("%d", &row);
|
|
printf("Spalte:");
|
|
scanf("%d", &column);
|
|
row -= 1;
|
|
column -= 1;
|
|
if (row > 3 || column > 3) {
|
|
printf("Das ist nicht mehr im Feld. Versuch es nochmal:");
|
|
scanf("%d %d", &row, &column);
|
|
row -= 1; //Für Index eins kleiner
|
|
column -= 1;
|
|
}
|
|
makeMove(board, row, column);
|
|
Runde++;
|
|
}
|
|
displayBoard(board);
|
|
if (Winner(board) == 1) {
|
|
printf("Der Sieger ist %s", Spieler1);
|
|
Punkte1++;
|
|
}
|
|
else if (Winner(board) == 2) {
|
|
printf("Der Sieger ist %s", Spieler2);
|
|
Punkte2++;
|
|
}
|
|
printf("%s - %d, %s - %d\n", Spieler1, Punkte1, Spieler2, Punkte2);
|
|
printf("Wollt ihr weiter spielen?\n[Weiter]\n[Ende]\n");
|
|
scanf("%s", Ende);
|
|
}
|
|
return 0;
|
|
}
|