Browse Source

Merge branch 'homan' into 'main'

Homan Funktionen tic_tac_toe

See merge request fdai7745/duellist-spielesammlung-projekt!3
remotes/origin/homan
fdai7892 11 months ago
parent
commit
b3084a7a4d
  1. 116
      src/main/duellist-spielesammlung-projekt.c

116
src/main/duellist-spielesammlung-projekt.c

@ -7,9 +7,109 @@
#define unknown_character 'x'
#define mine_character '@'
int calculate_mines(int height, int width) {
int num_mines;
if (height <= 1 || width <= 1) {
GameResult initializeGame(TicTacToeGame* game) {
// Initialisiere das Spielfeld
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
game->board[i][j] = EMPTY;
}
}
// Wir setzen den Seed für die Zufallszahlgenerierung basierend auf der aktuellen Zeit
srand(time(NULL));
// Münzwurf, um den Startspieler zu bestimmen
game->currentPlayer = (rand() % 2 == 0) ? PLAYER_X : PLAYER_O;
// Rückgabe des Ergebnisses
return SUCCESS;
}
GameResult makeMove(TicTacToeGame* game, int row, int col) {
if (row < 0 || row >= 3 || col < 0 || col >= 3 || game->board[row][col] != EMPTY) {
return INVALID_MOVE;
}
game->board[row][col] = game->currentPlayer;
GameResult result = checkGameResult(game);
if (result == SUCCESS) {
// Spielerwechsel, wenn der Zug gültig ist und das Spiel noch läuft
game->currentPlayer = (game->currentPlayer == PLAYER_X) ? PLAYER_O : PLAYER_X;
}
return result;
}
Player getCurrentPlayer(const TicTacToeGame * game) {
return game->currentPlayer;
}
int getNumberOfMoves(const TicTacToeGame* game) {
int moves = 0;
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
if (game->board[i][j] != EMPTY) {
moves++;
}
}
}
return moves;
}
int isBoardFull(const TicTacToeGame* game) {
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
if (game->board[i][j] == EMPTY) {
return 0; // Das Spielfeld ist nicht vollständig gefüllt
}
}
}
return 1; // Das Spielfeld ist vollständig gefüllt
}
int isFieldEmpty(const TicTacToeGame* game, int row, int col) {
// Überprüfe, ob die angegebenen Zeilen- und Spaltenindizes innerhalb des Spielfelds liegen
if (row < 0 || row >= 3 || col < 0 || col >= 3) {
return 0; // Ungültige Indizes, das Feld ist nicht leer
}
// Überprüfe, ob das Feld leer ist
return game->board[row][col] == EMPTY;
}
GameResult checkGameResult(const TicTacToeGame* game) {
// Prüfen, ob ein Sieg oder ein Unentschieden vorliegt und das entsprechende Ergebnis zurückgeben
for (int i = 0; i < 3; ++i) {
//Zeilen und Spalten auf einen Gewinn prüfen
if ((game->board[i][0] == game->board[i][1] && game->board[i][1] == game->board[i][2] && game->board[i][0] != EMPTY) ||
(game->board[0][i] == game->board[1][i] && game->board[1][i] == game->board[2][i] && game->board[0][i] != EMPTY)) {
return GAME_WIN;
}
}
// Unentschieden Prüfen
int draw = 1;
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
if (game->board[i][j] == EMPTY) {
draw = 0;
break;
}
}
if (!draw) {
break;
}
}
return draw ? GAME_DRAW : SUCCESS;
}
int berechneMinen(int hoehe, int breite) {
int anzahl_minen;
if (hoehe <= 1 || breite <= 1) {
return 0;
}
else {
@ -48,6 +148,16 @@ void distribute_mines(char** mines, int height, int width, int num_mines) {
}
}
// Diagonalen Sieg prüfen
if ((game->board[0][0] == game->board[1][1] && game->board[1][1] == game->board[2][2] && game->board[0][0] != EMPTY) ||
(game->board[0][2] == game->board[1][1] && game->board[1][1] == game->board[2][0] && game->board[0][2] != EMPTY)) {
return GAME_WIN;
}
int minesweeper() {
int height, width, row, column;

Loading…
Cancel
Save