示例#1
0
void cleanBoard(struct tile **board, int size, int pos_rel) {

    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {
            if (board[i][j].value == 0) {
                cleanTile(board[i][j], i, j, pos_rel);
            }
        }
    }
}
示例#2
0
TileView::~TileView()
{
    cleanTile();

    if(scene)
        scene = 0;

    if(model){
        delete model;
        model = 0;
    }
}
示例#3
0
bool moveTileLeft(struct tile **board, int size, int pos_rel) {

    int current_row;
    int current_col;
    int new_col = 0;
    bool moved = false;
    struct tile node;


    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {

            if (board[i][j].value != 0 && j != 0) {
                current_row = i;
                current_col = j;
                //copy the current tile into node
                node = board[i][j];
                board[i][j].value = 0;

                //previous tile is not empty
                if (board[i][j - 1].value != 0) {
                    new_col = current_col;
                }

                //move left until meet the tile that is not empty or meet the Wall
                while (board[i][j - 1].value == 0) {
                    new_col = j - 1;
                    moved = true;
                    if (new_col != 0) {
                        j--;
                    } else {
                        break;
                    }
                }

                board[current_row][new_col] = node;
                cleanTile(node, current_row, current_col, pos_rel);
                printTile(node, current_row, new_col, pos_rel);
            }
        }
    }
    return moved;

}
示例#4
0
bool moveTileRight(struct tile **board, int size, int pos_rel) {

    bool moved = false;
    int current_row;
    int current_col;
    int new_col;
    struct tile node;

    //move tile
    for (int i = 0; i < size; i++) {
        for (int j = size - 1; j >= 0; j--) {
            //that tile is not empty and not at the end of the board
            if (board[i][j].value != 0 && j != size - 1) {
                current_row = i;
                current_col = j;
                //copy the current tile into node.
                node = board[i][j];
                board[i][j].value = 0;

                //not move
                if (board[i][j + 1].value != 0) {
                    new_col = current_col;
                }
                //check the next tile to be empty or not
                while (board[i][j + 1].value == 0) {
                    new_col = j + 1;
                    moved = true;
                    if (new_col != size - 1) {
                        j++;
                    } else {
                        break;
                    }
                }

                board[current_row][new_col] = node;
                //clean 4 corners of the old tile
                cleanTile(node, current_row, current_col, pos_rel);
                printTile(node, current_row, new_col, pos_rel);
            }
        }
    }

    return moved;
}
示例#5
0
bool moveTileUp(struct tile **board, int size, int pos_rel) {

    int current_col;
    int current_row;
    int new_row;
    bool moved = false;
    struct tile node;

    //traverse from col to col
    for (int col = 0; col < size; col++) {
        for (int row = 0; row < size; row++) {
            if (board[row][col].value != 0 && row != 0) {

                current_col = col;
                current_row = row;
                node = board[row][col];
                board[row][col].value = 0;

                //the upper tile is not empty
                if (board[row - 1][col].value != 0) {
                    new_row = row;
                }

                //move up until meet the tile that is not empty
                while (board[row - 1][col].value == 0) {
                    new_row = row - 1;
                    moved = true;
                    if (new_row != 0) {
                        row = row - 1;
                    } else {
                        break;
                    }
                }

                board[new_row][current_col] = node;
                cleanTile(node, current_row, current_col, pos_rel);
                printTile(node, new_row, current_col, pos_rel);
            }
        }
    }

    return moved;
}
示例#6
0
bool moveTileDown(struct tile **board, int size, int pos_rel) {
    int current_col;
    int current_row;
    int new_row;
    bool moved = false;
    struct tile node;


    for (int col = 0; col < size; col++) {
        for (int row = size - 1; row >= 0; row--) {
            //the tile is not empty
            if (board[row][col].value != 0 && row != size - 1) {
                current_row = row;
                current_col = col;
                node = board[row][col];
                board[row][col].value = 0;
                //lower tile is not empty
                if (board[row + 1][col].value != 0) {
                    new_row = row;
                }

                while (board[row + 1][col].value == 0) {
                    new_row = row + 1;
                    moved = true;
                    if (new_row != size - 1) {
                        row = row + 1;
                    } else {
                        break;
                    }
                }

                board[new_row][current_col] = node;
                cleanTile(node, current_row, current_col, pos_rel);
                if (node.value != 0) {
                    printTile(node, new_row, current_col, pos_rel);
                }
            }
        }
    }
    return moved;
}