simple-go.c
Raw
1#include "simple-go.h"
2
3go_board* create_board(size_t size)
4{
5 go_board* board = malloc(sizeof(*board));
6 board->field_array = malloc(size*size*sizeof(*board->field_array));
7 for(size_t i = 0; i < size; i++)
8 {
9 board->field_array[i] = EMPTY;
10 }
11 board->size = size;
12
13 return board;
14}
15
16void print_board(go_board* board)
17{
18 for(size_t y = 0; y < board->size; y++)
19 {
20 for(size_t x = 0; x < board->size; x++)
21 {
22 putchar(get_board_at(board,y,x));
23 }
24 putchar('\n');
25 }
26}
27
28char get_board_at(go_board* board, size_t y, size_t x)
29{
30 if(y >= 0 && x >= 0 && y < board->size && x < board->size)
31 return board->field_array[y*board->size+x];
32 else
33 return INVALID_FIELD;
34}
35
36void set_board_at(go_board* board, size_t y, size_t x, char item)
37{
38 if(y >= 0 && x >= 0 && y < board->size && x < board->size)
39 board->field_array[y*board->size+x] = item;
40}
41
42void find_group(go_board* board, go_board* overlay, size_t y, size_t x)
43{
44 set_board_at(overlay, y-1, x, GROUP);
45 char field = get_board_at(board,y,x);
46
47 if(get_board_at(board,y-1,x) == field && get_board_at(overlay,y-1,x) == EMPTY)
48 find_group(board, overlay, y-1, x);
49
50 if(get_board_at(board,y,x-1) == field && get_board_at(overlay,y,x-1) == EMPTY)
51 find_group(board, overlay, y, x-1);
52
53 if(get_board_at(board,y+1,x) == field && get_board_at(overlay,y+1,x) == EMPTY)
54 find_group(board, overlay, y+1, x);
55
56 if(get_board_at(board,y,x+1) == field && get_board_at(overlay,y,x+1) == EMPTY)
57 find_group(board, overlay, y, x+1);
58}
59
60
61