diff options
Diffstat (limited to 'voerbak/voerbak.c')
-rw-r--r-- | voerbak/voerbak.c | 64 |
1 files changed, 6 insertions, 58 deletions
diff --git a/voerbak/voerbak.c b/voerbak/voerbak.c index ebd32eb..1ac74b6 100644 --- a/voerbak/voerbak.c +++ b/voerbak/voerbak.c @@ -3,75 +3,23 @@ #include <memory.h> #include <stdbool.h> -struct Board { - int width; - int height; - int length; - int* board; -}; +#include "voerbak.h" +#include "win.h" -void printBoard(struct Board *b) { +void printBoard(Board *b) { for (int i = 0; i < b->length; i++) printf("%d", b->board[i]); printf("\n"); fflush(stdout); } -int recursiveSolve(struct Board *b, int pos, int direction, int d_index, int currentLength) { - int newPos = pos + direction; - if (newPos > b->length - 1 || newPos < 0) return currentLength; - int row = pos % b->width; - if (row == b->width && d_index >= 1 && d_index <= 3) return currentLength; - if (row == 0 && d_index >= 5 && d_index <= 7) return currentLength; - if (b->board[newPos] != b->board[pos]) return currentLength; - return recursiveSolve(b, newPos, direction, d_index, currentLength + 1); -} - -bool checkWin(struct Board *b, int pos) { - int directions[8] = { - b->width, // north - b->width + 1, // northeast - 1, // east - -b->width + 1, // southeast - -b->width, // south - -b->width -1, // southwest - -1, // west - b->width -1 // northwest - }; - - int values[8]; - for (int i = 0; i < 8; i++) - values[i] = recursiveSolve(b, pos, directions[i], i, 0); - - int joinedValues[4] = { - values[0] + values[4], - values[1] + values[5], - values[2] + values[6], - values[3] + values[7] - }; - - bool won = false; - for (int i = 0; i < 4; i++) { - if (joinedValues[i] >= 3) { - won = won || true; - - int start_pos = pos + directions[i+0] * values[i+0]; - int end_pos = pos + directions[i+4] * values[i+4]; - printf("w:%d-%d\n", start_pos, end_pos); - fflush(stdout); - } - } - - return won; -} - -bool boardFull(struct Board *b) { +bool boardFull(Board *b) { for (int i = 0; i < b->length; i++) if (b->board[i] == 0) return false; return true; } -bool dropFisje(struct Board *b, int column, int disc) { +bool dropFisje(Board *b, int column, int disc) { for (int row = 0; row < b->height; row++) { int pos = column + row * b->width; if (b->board[pos] == 0) { @@ -89,7 +37,7 @@ int main() { int width, height; scanf("%d %d", &width, &height); - struct Board *gameBoard = malloc(sizeof(struct Board)); + Board *gameBoard = malloc(sizeof(Board)); gameBoard->board = malloc(sizeof(int) * (width * height - 1)); gameBoard->width = width; gameBoard->height = height; |