From 2fe4352955042ef5415f6830d8c9d05d39159b7e Mon Sep 17 00:00:00 2001 From: lonkaars Date: Wed, 24 Feb 2021 09:50:58 +0100 Subject: added diewertje cpu solver --- voerbak/diewertje.c | 8 ++++++++ voerbak/diewertje.h | 11 +++++++++++ voerbak/solvers.c | 12 ++++++++++++ voerbak/solvers.h | 3 +++ voerbak/voerbak.c | 11 ++++++++++- voerbak/voerbak.h | 4 +--- 6 files changed, 45 insertions(+), 4 deletions(-) create mode 100644 voerbak/diewertje.c create mode 100644 voerbak/diewertje.h create mode 100644 voerbak/solvers.c create mode 100644 voerbak/solvers.h diff --git a/voerbak/diewertje.c b/voerbak/diewertje.c new file mode 100644 index 0000000..93a8596 --- /dev/null +++ b/voerbak/diewertje.c @@ -0,0 +1,8 @@ +#include + +#include "board.h" + +int diewertje(Board *b) { + printf("Got a diewertje request, from a board that's %dx%d\n", b->width, b->height); + return 2; +} diff --git a/voerbak/diewertje.h b/voerbak/diewertje.h new file mode 100644 index 0000000..617a6f4 --- /dev/null +++ b/voerbak/diewertje.h @@ -0,0 +1,11 @@ +#include "board.h" + +/** + * @brief Diewertje game solver + * + * @param Board* game board to decide next move for + * + * @return int Column to place disc in + */ +int diewertje(Board*); + diff --git a/voerbak/solvers.c b/voerbak/solvers.c new file mode 100644 index 0000000..e3aab12 --- /dev/null +++ b/voerbak/solvers.c @@ -0,0 +1,12 @@ +#include +#include + +#include "board.h" + +#include "diewertje.h" + +int cpuMove(Board* b, char* solver) { + if (strcmp(solver, "diewertje") == 0) return diewertje(b); + + return 0; +} diff --git a/voerbak/solvers.h b/voerbak/solvers.h new file mode 100644 index 0000000..295edf8 --- /dev/null +++ b/voerbak/solvers.h @@ -0,0 +1,3 @@ +#include "board.h" + +int cpuMove(Board*, char*); diff --git a/voerbak/voerbak.c b/voerbak/voerbak.c index d1982fa..2782163 100644 --- a/voerbak/voerbak.c +++ b/voerbak/voerbak.c @@ -6,6 +6,7 @@ #include "board.h" #include "messages.h" #include "argparse.h" +#include "solvers.h" #define EMPTY "" @@ -14,6 +15,7 @@ int main(int argc, char* argv[]) { Board *gameBoard = createBoard(arguments.width, arguments.height); + bool cpu_2 = strlen(arguments.solver) > 0; bool player_1 = true; int move = 0; char* message = malloc(1); // this is weird and i don't understand it but it prevents a segmentation fault or something @@ -26,13 +28,15 @@ int main(int argc, char* argv[]) { continue; } + move: + if (move == 0) break; if (move < 1 || move > gameBoard->width) continue; bool dropSuccess = dropFisje(gameBoard, move - 1, player_1 + 1); player_1 = player_1 ^ dropSuccess; // only flip turns on successful drop - printf("m:%s\n", player_1 ? "true" : "false"); + !cpu_2 && printf("m:%s\n", player_1 ? "true" : "false"); fflush(stdout); if (boardFull(gameBoard)) { @@ -41,6 +45,11 @@ int main(int argc, char* argv[]) { } printBoard(gameBoard); + + if (cpu_2 && !player_1) { + move = cpuMove(gameBoard, arguments.solver); + goto move; + } } return 0; diff --git a/voerbak/voerbak.h b/voerbak/voerbak.h index d44f382..a828d02 100644 --- a/voerbak/voerbak.h +++ b/voerbak/voerbak.h @@ -2,7 +2,5 @@ #include #include -/** - * @brief Main function - */ +/** @brief Main function */ int main(); -- cgit v1.2.3