Ejemplo n.º 1
0
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);
    }
}
Ejemplo n.º 2
0
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;
}