|
|
|
|
@ -205,6 +205,17 @@ void getNewPosition(Position* pos, int dx, int dy, Position* newPos) {
|
|
|
|
|
newPos->row = pos->row + dx;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Beschreibung:
|
|
|
|
|
* Diese Funktion deckt rekursiv alle leeren Zellen und ihre benachbarten leeren Zellen auf.
|
|
|
|
|
*
|
|
|
|
|
* Parameter:
|
|
|
|
|
* gameBoard: Das Spielfeld, auf dem die Operation ausgeführt wird.
|
|
|
|
|
* hiddenGameBoard: Das verdeckte Spielfeld, das aktualisiert wird.
|
|
|
|
|
* size: Die Größe des Spielfelds.
|
|
|
|
|
* pos: Die Position der aktuellen Zelle, die aufgedeckt wird.
|
|
|
|
|
*/
|
|
|
|
|
void revealEmptyCells(int** gameBoard, int** hiddenGameBoard, int size, Position pos) {
|
|
|
|
|
// Aufdecken der leeren Zelle
|
|
|
|
|
hiddenGameBoard[pos.row][pos.col] = gameBoard[pos.row][pos.col];
|
|
|
|
|
@ -227,7 +238,21 @@ void revealEmptyCells(int** gameBoard, int** hiddenGameBoard, int size, Position
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Beschreibung:
|
|
|
|
|
* Diese Funktion deckt eine bestimmte Zelle auf dem Spielfeld auf und aktualisiert das verdeckte Spielfeld entsprechend.
|
|
|
|
|
*
|
|
|
|
|
* Parameter:
|
|
|
|
|
* gameBoard: Das Spielfeld, auf dem die Operation ausgeführt wird.
|
|
|
|
|
* hiddenGameBoard: Das verdeckte Spielfeld, das aktualisiert wird.
|
|
|
|
|
* size: Die Größe des Spielfelds.
|
|
|
|
|
* row: Die Zeilennummer der aufzudeckenden Zelle.
|
|
|
|
|
* col: Die Spaltennummer der aufzudeckenden Zelle.
|
|
|
|
|
*
|
|
|
|
|
* Rückgabewert:
|
|
|
|
|
* 1, wenn die Zelle erfolgreich aufgedeckt wurde.
|
|
|
|
|
* 0, wenn die Zelle eine Bombe war und das Spiel dadurch verloren wurde.
|
|
|
|
|
*/
|
|
|
|
|
int revealCell(int** gameBoard, int** hiddenGameBoard, int size, int row, int col) {
|
|
|
|
|
Position pos;
|
|
|
|
|
pos.row = row;
|
|
|
|
|
@ -266,6 +291,16 @@ int revealCell(int** gameBoard, int** hiddenGameBoard, int size, int row, int co
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Beschreibung:
|
|
|
|
|
* Diese Funktion platziert oder entfernt eine Flagge auf einer bestimmten Zelle des verdeckten Spielfelds.
|
|
|
|
|
*
|
|
|
|
|
* Parameter:
|
|
|
|
|
* hiddenGameBoard: Das verdeckte Spielfeld, auf dem die Operation ausgeführt wird.
|
|
|
|
|
* row: Die Zeilennummer der Zelle, auf der die Flagge platziert/entfernt werden soll.
|
|
|
|
|
* col: Die Spaltennummer der Zelle, auf der die Flagge platziert/entfernt werden soll.
|
|
|
|
|
* numFlags: Ein Zeiger auf die Anzahl der Flaggen auf dem Spielfeld.
|
|
|
|
|
*/
|
|
|
|
|
void setFlag(int** hiddenGameBoard, int row, int col, int* numFlags) {
|
|
|
|
|
if (hiddenGameBoard[row][col] == FLAG_CELL)
|
|
|
|
|
{
|
|
|
|
|
@ -279,6 +314,21 @@ void setFlag(int** hiddenGameBoard, int row, int col, int* numFlags) {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Beschreibung:
|
|
|
|
|
* Diese Funktion überprüft, ob das Spiel gewonnen wurde, indem sie prüft, ob alle Bomben markiert wurden und alle nicht-Bomben-Zellen aufgedeckt sind.
|
|
|
|
|
*
|
|
|
|
|
* Parameter:
|
|
|
|
|
* gameBoard: Das Spielfeld mit den Bomben.
|
|
|
|
|
* hiddenGameBoard: Das verdeckte Spielfeld.
|
|
|
|
|
* size: Die Größe des Spielfelds.
|
|
|
|
|
* numBombs: Die Anzahl der Bomben auf dem Spielfeld.
|
|
|
|
|
* numFlags: Die Anzahl der Flaggen auf dem Spielfeld.
|
|
|
|
|
*
|
|
|
|
|
* Rückgabewert:
|
|
|
|
|
* 1, wenn das Spiel gewonnen wurde.
|
|
|
|
|
* 0, wenn das Spiel noch nicht gewonnen wurde.
|
|
|
|
|
*/
|
|
|
|
|
int checkWin(int** gameBoard, int** hiddenGameBoard, int size, int numBombs, int numFlags) {
|
|
|
|
|
// Überprüfen, ob alle Bombenpositionen mit einer Flagge markiert wurden
|
|
|
|
|
for (int i = 0; i < size; i++) {
|
|
|
|
|
@ -308,6 +358,10 @@ int checkWin(int** gameBoard, int** hiddenGameBoard, int size, int numBombs, int
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Beschreibung:
|
|
|
|
|
* Diese Funktion gibt eine Meldung aus, dass das Spiel verloren wurde, da eine Bombe explodiert ist. *
|
|
|
|
|
*/
|
|
|
|
|
void handleBombExploded() {
|
|
|
|
|
char message[] = "Spiel Verloren! Du hast eine Bombe getroffen!\r\nStarte neu mit der ON Taste. \r\n";
|
|
|
|
|
HAL_UART_Transmit(&huart2, (uint8_t*)message, sizeof(message), 100);
|
|
|
|
|
|