You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

67 lines
2.6 KiB
C

/*
* spielfeld.h
*
* Created on: Mar 5, 2024
* Author: nicon
*/
#ifndef INC_SPIELFELD_H_
#define INC_SPIELFELD_H_
/*
* Enthaltene Dateien:
* main.h: Enthält die Deklarationen und Definitionen, die vom Hauptprogramm und den Modulen gemeinsam genutzt werden.
* uart.h: Enthält die Deklarationen für Funktionen zur Steuerung der UART-Schnittstelle.
* stdio.h: Enthält Prototypen für Standard-Ein-/Ausgabefunktionen.
* stdlib.h: Enthält Prototypen für Speicherverwaltungsfunktionen.
* time.h: Enthält Prototypen für Zeitfunktionen.
* ctype.h: Enthält Prototypen für Zeichentest- und -manipulationsfunktionen.
*
* Externe Variablen:
* huart2: Eine externe Variable vom Typ UART_HandleTypeDef, die von der HAL-Bibliothek bereitgestellt wird. Sie repräsentiert die Handle-Struktur für die UART-Schnittstelle 2.
* hrng: Eine externe Variable vom Typ RNG_HandleTypeDef, die von der HAL-Bibliothek bereitgestellt wird. Sie repräsentiert die Handle-Struktur für den Random Number Generator.
*
* Struktur:
* Position: Eine Struktur zur Darstellung der Zeilen- und Spaltenindizes einer Zelle im Spielfeld.
*
* Makros:
* EMPTY_CELL: Ein Makro zur Darstellung einer leeren Zelle im Spielfeld.
* BOMB_CELL: Ein Makro zur Darstellung einer Zelle mit einer Bombe im Spielfeld.
* HIDDEN_CELL: Ein Makro zur Darstellung einer verdeckten Zelle im Spielfeld.
* NUMBER_CELL: Ein Makro zur Darstellung einer Zelle mit einer Zahl, die angibt, wie viele Bomben in der Nähe sind.
* FLAG_CELL: Ein Makro zur Darstellung einer Zelle mit einer Flagge, die auf eine vermutete Bombe hinweist.
*/
#include "main.h"
#include "uart.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>
extern UART_HandleTypeDef huart2;
extern RNG_HandleTypeDef hrng;
typedef struct {
int row;
int col;
} Position;
#define EMPTY_CELL 0
#define BOMB_CELL -1
#define HIDDEN_CELL -2
#define NUMBER_CELL -3
#define FLAG_CELL -4
int** generateGameBoard(int size);
void placeBombs(int** gameBoard, int size, int numBombs);
void displayGameBoardUART(int** gameBoard, int size, int numBombs, int numFlags);
void freeGameBoard(int** gameBoard, int size);
int** createHiddenGameBoard(int** gameBoard, int size);
int revealCell(int** gameBoard, int** hiddenGameBoard, int size, int row, int col);
void getPositionIndices(int row, int col, Position* pos);
void getNewPosition(Position* pos, int dx, int dy, Position* newPos);
void setFlag(int** hiddenGameBoard, int row, int col, int* numFlags);
int checkWin(int** gameBoard, int** hiddenGameBoard, int size, int numBombs, int numFlags);
void handleBombExploded();
#endif /* INC_SPIELFELD_H_ */