void check_balance(int dir, int max) { int i; struct field line[max]; for (i=0; i<max; i++) { make_line(i, dir, line); countline(dir, line); restore_line(i, dir, line); } }
int game_t::stonify(struct cell_t *cell) { int i; int len = 0; int x = cell->x; int y = cell->y; int left = countline(cell, -1, 0); int right = countline(cell, +1, 0); int up = countline(cell, 0, -1); int down = countline(cell, 0, +1); int topleft = countline(cell, -1, -1); int topright = countline(cell, +1, -1); int botleft = countline(cell, -1, +1); int botright = countline(cell, +1, +1); if (left + right + 1 >= 5) { for (i = 0; i < left; i++) { set_piece(x - (i + 1), y, BOARD_STONE, DROP_FLOATER); len++; } for (i = 0; i < right; i++) { set_piece(x + (i + 1), y, BOARD_STONE, DROP_FLOATER); len++; } } if (up + down + 1 >= 5) { for (i = 0; i < up; i++) { set_piece(x, y - (i + 1), BOARD_STONE, DROP_FLOATER); len++; } for (i = 0; i < down; i++) { set_piece(x, y + (i + 1), BOARD_STONE, DROP_FLOATER); len++; } } if (topleft + botright + 1 >= 5) { for (i = 0; i < topleft; i++) { set_piece(x - (i + 1), y - (i + 1), BOARD_STONE, DROP_FLOATER); len++; } for (i = 0; i < botright; i++) { set_piece(x + (i + 1), y + (i + 1), BOARD_STONE, DROP_FLOATER); len++; } } if (topright + botleft + 1 >= 5) { for (i = 0; i < topright; i++) { set_piece(x + (i + 1), y - (i + 1), BOARD_STONE, DROP_FLOATER); len++; } for (i = 0; i < botleft; i++) { set_piece(x - (i + 1), y + (i + 1), BOARD_STONE, DROP_FLOATER); len++; } } if (len > 0) { set_piece(x, y, BOARD_STONE, DROP_FLOATER); len++; } return len; }