static int update_score_level(struct game_score *score, int num_rows, int *timeout) { int has_level_changed = 0; //score->score += (score->level + SCORE_CLEAR_ROW) * num_rows * num_rows; score->score += score->level * num_rows * num_rows * BASE_SCORE_PER_ROW; if (score->score > score->current_highscore) score->current_highscore = score->score; score->total_rows += num_rows; score->rows_cleared += num_rows; if (score->rows_cleared >= MAX_ROWS_PER_LEVEL) { if (game_options.increase_difficulty && score->level < DIFFICULTY_LEVEL_MAX) *timeout -= TIMEOUT_DELTA(score->level); if (game_options.clear_on_new_level) reset_game_board(); score->level++; score->rows_cleared = 0; has_level_changed = 1; } return has_level_changed; }
int initialize_game_elements(void) { /* initialize the board */ reset_game_board(); /* initialize the current and next block */ srand((unsigned) time(NULL)); next_block = (block_t)(rand() % TOTAL_BLOCKS); next_block_orientation = (degree_t)(rand() % TOTAL_DEGREES); return SUCCESS; }
uint8_t *init_game_board() { uint8_t *game_board = (uint8_t *) calloc(GAME_BOARD_X * GAME_BOARD_Y, sizeof(uint8_t)); reset_game_board(game_board); return game_board; }