|
|
|
@ -7,7 +7,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
#include "spielfeld.h"
|
|
|
|
#include "spielfeld.h"
|
|
|
|
#include "main.h"
|
|
|
|
#include "main.h"
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|
|
|
* Beschreibung:
|
|
|
|
|
|
|
|
* Diese Funktion generiert ein Spielfeld mit der angegebenen Größe und initialisiert alle Zellen als leere Zellen.
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* Parameter:
|
|
|
|
|
|
|
|
* size: Die Größe des Spielfelds (Anzahl der Zeilen/Spalten).
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* Rückgabewert:
|
|
|
|
|
|
|
|
* Zeiger auf das erstellte Spielfeld (int**).
|
|
|
|
|
|
|
|
*/
|
|
|
|
int** generateGameBoard(int size) {
|
|
|
|
int** generateGameBoard(int size) {
|
|
|
|
// Speicher für das Spielfeld reservieren
|
|
|
|
// Speicher für das Spielfeld reservieren
|
|
|
|
int** gameBoard = (int**)malloc(size * sizeof(int*));
|
|
|
|
int** gameBoard = (int**)malloc(size * sizeof(int*));
|
|
|
|
@ -25,12 +34,28 @@ int** generateGameBoard(int size) {
|
|
|
|
return gameBoard;
|
|
|
|
return gameBoard;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|
|
|
* Beschreibung:
|
|
|
|
|
|
|
|
* Diese Funktion generiert eine zufällige ganze Zahl mithilfe des HAL-RNG-Moduls.
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* Rückgabewert:
|
|
|
|
|
|
|
|
* Eine zufällige ganze Zahl (uint32_t).
|
|
|
|
|
|
|
|
*/
|
|
|
|
uint32_t random_int(void) {
|
|
|
|
uint32_t random_int(void) {
|
|
|
|
uint32_t z;
|
|
|
|
uint32_t z;
|
|
|
|
HAL_RNG_GenerateRandomNumber(&hrng, &z);
|
|
|
|
HAL_RNG_GenerateRandomNumber(&hrng, &z);
|
|
|
|
return z;
|
|
|
|
return z;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|
|
|
* Beschreibung:
|
|
|
|
|
|
|
|
* Diese Funktion platziert die Bomben zufällig auf dem Spielfeld und berechnet dann die Anzahl der umliegenden Bomben für jede Zelle.
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* Parameter:
|
|
|
|
|
|
|
|
* gameBoard: Das Spielfeld, auf dem die Bomben platziert werden sollen.
|
|
|
|
|
|
|
|
* size: Die Größe des Spielfelds.
|
|
|
|
|
|
|
|
* numBombs: Die Anzahl der Bomben, die platziert werden sollen.
|
|
|
|
|
|
|
|
*/
|
|
|
|
void placeBombs(int** gameBoard, int size, int numBombs) {
|
|
|
|
void placeBombs(int** gameBoard, int size, int numBombs) {
|
|
|
|
// Zufälligen Seed initialisieren
|
|
|
|
// Zufälligen Seed initialisieren
|
|
|
|
srand(random_int());
|
|
|
|
srand(random_int());
|
|
|
|
@ -72,6 +97,16 @@ void placeBombs(int** gameBoard, int size, int numBombs) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|
|
|
* Beschreibung:
|
|
|
|
|
|
|
|
* Diese Funktion zeigt das Spielfeld auf der UART-Schnittstelle an.
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* Parameter:
|
|
|
|
|
|
|
|
* gameBoard: Das Spielfeld, das angezeigt werden soll.
|
|
|
|
|
|
|
|
* size: Die Größe des Spielfelds.
|
|
|
|
|
|
|
|
* numBombs: Die Gesamtanzahl der Bomben auf dem Spielfeld.
|
|
|
|
|
|
|
|
* numFlags: Die Anzahl der Flaggen, die auf dem Spielfeld platziert wurden.
|
|
|
|
|
|
|
|
*/
|
|
|
|
void displayGameBoardUART(int** gameBoard, int size, int numBombs, int numFlags) {
|
|
|
|
void displayGameBoardUART(int** gameBoard, int size, int numBombs, int numFlags) {
|
|
|
|
// Leere den Empfangspuffer der UART-Schnittstelle
|
|
|
|
// Leere den Empfangspuffer der UART-Schnittstelle
|
|
|
|
clearSerialBuffer(&huart2);
|
|
|
|
clearSerialBuffer(&huart2);
|
|
|
|
@ -115,6 +150,10 @@ void displayGameBoardUART(int** gameBoard, int size, int numBombs, int numFlags)
|
|
|
|
HAL_UART_Transmit(&huart2, (uint8_t*)buffer, offset, 100);
|
|
|
|
HAL_UART_Transmit(&huart2, (uint8_t*)buffer, offset, 100);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|
|
|
* Werden nicht benutzt
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
*/
|
|
|
|
void freeGameBoard(int** gameBoard, int size) {
|
|
|
|
void freeGameBoard(int** gameBoard, int size) {
|
|
|
|
for (int i = 0; i < size; i++) {
|
|
|
|
for (int i = 0; i < size; i++) {
|
|
|
|
free(gameBoard[i]);
|
|
|
|
free(gameBoard[i]);
|
|
|
|
@ -122,6 +161,10 @@ void freeGameBoard(int** gameBoard, int size) {
|
|
|
|
free(gameBoard);
|
|
|
|
free(gameBoard);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|
|
|
* Werden nicht benutzt
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
*/
|
|
|
|
void freeHiddenGameBoard(int** hiddenGameBoard, int size) {
|
|
|
|
void freeHiddenGameBoard(int** hiddenGameBoard, int size) {
|
|
|
|
for (int i = 0; i < size; i++) {
|
|
|
|
for (int i = 0; i < size; i++) {
|
|
|
|
free(hiddenGameBoard[i]);
|
|
|
|
free(hiddenGameBoard[i]);
|
|
|
|
@ -129,6 +172,17 @@ void freeHiddenGameBoard(int** hiddenGameBoard, int size) {
|
|
|
|
free(hiddenGameBoard);
|
|
|
|
free(hiddenGameBoard);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|
|
|
* Beschreibung:
|
|
|
|
|
|
|
|
* Diese Funktion erstellt ein verdecktes Spielfeld mit der angegebenen Größe.
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* Parameter:
|
|
|
|
|
|
|
|
* gameBoard: Das Spielfeld, für das ein verdecktes Spielfeld erstellt werden soll.
|
|
|
|
|
|
|
|
* size: Die Größe des Spielfelds.
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* Rückgabewert:
|
|
|
|
|
|
|
|
* Ein Zeiger auf das erstellte verdeckte Spielfeld (int**).
|
|
|
|
|
|
|
|
*/
|
|
|
|
int** createHiddenGameBoard(int** gameBoard, int size) {
|
|
|
|
int** createHiddenGameBoard(int** gameBoard, int size) {
|
|
|
|
int** hiddenGameBoard = (int**)malloc(size * sizeof(int*));
|
|
|
|
int** hiddenGameBoard = (int**)malloc(size * sizeof(int*));
|
|
|
|
for (int i = 0; i < size; i++) {
|
|
|
|
for (int i = 0; i < size; i++) {
|
|
|
|
|