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); } } } }
TileView::~TileView() { cleanTile(); if(scene) scene = 0; if(model){ delete model; model = 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; }
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; }
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; }
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; }