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) );
}
Exemple #2
0
/* 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;
}
Exemple #3
0
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;
  }
}