Exemplo n.º 1
0
void test_grid_pop_row_and_make_above_fall()
{
  int numberOfRows = 4;
  int numberOfColumns = 4;

  int rowIndex;
  int columnIndex;
  TrnPositionInGrid pos;

  /* Initial grid
   * +----+
   * |L   |
   * |LL  |
   * |LLL |
   * |LLLL|
   * +----+
   */
  TrnGrid* grid = trn_grid_new(numberOfRows, numberOfColumns);
  for (rowIndex = 0 ; rowIndex < numberOfRows ; rowIndex++) {
      pos.rowIndex = rowIndex;
      for (columnIndex = 0 ; columnIndex <= rowIndex ; columnIndex++) {
          pos.columnIndex = columnIndex;
          trn_grid_set_cell(grid, pos, TRN_TETROMINO_L);
      }
  }

  trn_grid_pop_row_and_make_above_fall(grid, numberOfRows-1);

  /* Expected grid
   * +----+
   * |    |
   * |L   |
   * |LL  |
   * |LLL |
   * +----+
   */
  TrnGrid* expected_grid = trn_grid_new(numberOfRows, numberOfColumns);
  for (rowIndex = 0 ; rowIndex < numberOfRows ; rowIndex++) {
      pos.rowIndex = rowIndex;
      for (columnIndex = 0 ; columnIndex < rowIndex ; columnIndex++) {
          pos.columnIndex = columnIndex;
          trn_grid_set_cell(expected_grid, pos, TRN_TETROMINO_L);
      }
  }

  CU_ASSERT_TRUE( trn_grid_equal(grid, expected_grid) );
}
Exemplo n.º 2
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;
  }
}