2023-05-15 11:59:18 +02:00
|
|
|
#include <stdio.h>
|
|
|
|
|
2023-05-16 11:39:09 +02:00
|
|
|
#include <structures.h>
|
|
|
|
|
2023-05-16 11:03:51 +02:00
|
|
|
static int col;
|
|
|
|
|
|
|
|
void setCollums(int collums) {
|
|
|
|
col = collums;
|
|
|
|
}
|
|
|
|
|
2023-05-16 11:39:09 +02:00
|
|
|
int getIndex(int r, int c) {
|
|
|
|
return r * col + c;
|
2023-05-16 11:03:51 +02:00
|
|
|
}
|
2023-05-15 11:59:18 +02:00
|
|
|
|
|
|
|
// checks board for a win
|
2023-05-16 11:39:09 +02:00
|
|
|
// returns player tile_t on win, otherwise 0
|
|
|
|
tile_t checkWin(tile_t *board, int pos, int rows, int collums) {
|
2023-05-16 11:03:51 +02:00
|
|
|
int i;
|
2023-05-15 11:59:18 +02:00
|
|
|
|
2023-05-16 11:39:09 +02:00
|
|
|
tile_t current = board[pos];
|
|
|
|
int r = pos / collums;
|
|
|
|
int c = pos % collums;
|
|
|
|
|
2023-05-15 11:59:18 +02:00
|
|
|
for (i=0; i<4; i++) {
|
2023-05-16 11:39:09 +02:00
|
|
|
|
|
|
|
// vertical
|
|
|
|
if (r + i - 3 >= 0 && r + i < rows) {
|
|
|
|
if (board[getIndex(r + i - 3, c)] == board[getIndex(r + i, c)] &&
|
|
|
|
board[getIndex(r + i - 2, c)] == board[getIndex(r + i, c)] &&
|
|
|
|
board[getIndex(r + i - 1, c)] == board[getIndex(r + i, c)]) {
|
2023-05-15 11:59:18 +02:00
|
|
|
|
|
|
|
return current;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-05-16 11:39:09 +02:00
|
|
|
// horizontal
|
|
|
|
if (c + i - 3 >= 0 && c + i < collums) {
|
|
|
|
if (board[getIndex(r, c + i - 3)] == board[getIndex(r, c + i)] &&
|
|
|
|
board[getIndex(r, c + i - 2)] == board[getIndex(r, c + i)] &&
|
|
|
|
board[getIndex(r, c + i - 1)] == board[getIndex(r, c + i)]) {
|
2023-05-15 11:59:18 +02:00
|
|
|
|
|
|
|
return current;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-05-16 11:39:09 +02:00
|
|
|
// diagonal1
|
|
|
|
if (c + i - 3 >= 0 && c + i < collums && r + i - 3 >= 0 && r + i < rows) {
|
|
|
|
if (board[getIndex(r + i - 3, c + i - 3)] == board[getIndex(r + i, c + i)] &&
|
|
|
|
board[getIndex(r + i - 2, c + i - 2)] == board[getIndex(r + i, c + i)] &&
|
|
|
|
board[getIndex(r + i - 1, c + i - 1)] == board[getIndex(r + i, c + i)]) {
|
2023-05-15 12:05:29 +02:00
|
|
|
|
|
|
|
return current;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-05-16 11:39:09 +02:00
|
|
|
// diagonal2
|
|
|
|
if (c + i + 3 >= 0 && c + i < collums && r - i + 3 < rows && r - i >= 0) {
|
|
|
|
if (board[getIndex(r - i + 3, c + i - 3)] == board[getIndex(r - i, c + i)] &&
|
|
|
|
board[getIndex(r - i + 2, c + i - 2)] == board[getIndex(r - i, c + i)] &&
|
|
|
|
board[getIndex(r - i + 1, c + i - 1)] == board[getIndex(r - i, c + i)]) {
|
2023-05-15 16:24:10 +02:00
|
|
|
|
|
|
|
return current;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2023-05-16 11:39:09 +02:00
|
|
|
|
|
|
|
return EMPTY;
|
2023-05-15 11:59:18 +02:00
|
|
|
}
|