void test_grid_is_row_complete() { // Create a grid. int numberOfRows = 4; int numberOfColumns = 4; TrnGrid* grid = trn_grid_new(numberOfRows, numberOfColumns); // Last row is void only. CU_ASSERT_FALSE( trn_grid_is_row_complete(grid,numberOfRows) ); // Last row is full. TrnPositionInGrid pos; int columnIndex; pos.rowIndex = numberOfRows-1 ; for (columnIndex = 0 ; columnIndex < grid->numberOfColumns ; columnIndex++) { pos.columnIndex = columnIndex; trn_grid_set_cell(grid, pos, TRN_TETROMINO_I); } CU_ASSERT_TRUE( trn_grid_is_row_complete(grid,numberOfRows) ); // Last row is full except last element. pos.rowIndex = numberOfRows-1 ; pos.columnIndex = numberOfColumns-1 ; trn_grid_set_cell(grid, pos, TRN_TETROMINO_VOID); CU_ASSERT_FALSE( trn_grid_is_row_complete(grid,numberOfRows) ); }
/* Return -1 if no complete row */ int tnr_grid_find_last_complete_row_index(TrnGrid const * const grid) { int rowIndex; for (rowIndex = grid->numberOfRows-1 ; rowIndex >= 0 ; rowIndex--) { if (trn_grid_is_row_complete(grid, rowIndex)) return rowIndex; } return -1; }
void trn_game_check_complete_rows(TrnGame* game) { if (game->status != TRN_GAME_ON) return; int row_index; int lines_count = 0; for ( row_index=0; row_index<game->grid->numberOfRows; ++row_index) { if ( trn_grid_is_row_complete(game->grid, row_index) ) { trn_grid_pop_row_and_make_above_fall(game->grid, row_index); ++lines_count; } } trn_game_update_score(game, lines_count); game->lines_count += lines_count; if (game->lines_count > LINES_PER_LEVEL * (game->level+1)) { ++game->level; } }