diff options
| -rw-r--r-- | frontends/sdl/sdl_ui.c | 22 | ||||
| -rw-r--r-- | lib/cetris.h | 4 |
2 files changed, 17 insertions, 9 deletions
diff --git a/frontends/sdl/sdl_ui.c b/frontends/sdl/sdl_ui.c index 069db4e..c36e440 100644 --- a/frontends/sdl/sdl_ui.c +++ b/frontends/sdl/sdl_ui.c @@ -261,22 +261,26 @@ void draw() { int main(void) { setup(); - init_game(&g); + ini_parser p; load_ini_file(&p, "config.ini"); + + cetris_config config; int das = atoi(get_ini_value(&p, "das", "das")); - g.config.das_das = das * .06f; + config.das_das = das * .06f; int arr = atoi(get_ini_value(&p, "das", "arr")); - g.config.das_arr = arr * .06f; + config.das_arr = arr * .06f; + + config.drop_period = atoi(get_ini_value(&p, "game", "drop_delay")) * .06f; + config.next_piece_delay = atoi(get_ini_value(&p, "game", "next_piece_delay")); + config.lock_delay = atoi(get_ini_value(&p, "game", "lock_delay")); + config.wait_on_clear = atoi(get_ini_value(&p, "game", "wait_on_clear")); + config.line_delay_clear = atoi(get_ini_value(&p, "game", "line_clear_delay")); - g.config.drop_period = atoi(get_ini_value(&p, "game", "drop_delay")) * .06f; - g.config.next_piece_delay = atoi(get_ini_value(&p, "game", "next_piece_delay")); - g.config.lock_delay = atoi(get_ini_value(&p, "game", "lock_delay")); - g.config.wait_on_clear = atoi(get_ini_value(&p, "game", "wait_on_clear")); - g.config.line_delay_clear = atoi(get_ini_value(&p, "game", "line_clear_delay")); + init_game(&g, &config); #ifdef _WIN32 HANDLE thread = CreateThread(NULL, 0, game_loop, NULL, 0, NULL); @@ -309,6 +313,8 @@ int main(void) { move_piece(&g, ROTATE_CW); break; case 'z': move_piece(&g, ROTATE_CCW); break; + case 'r': + init_game(&g, &config); break; } break; case SDL_KEYUP: diff --git a/lib/cetris.h b/lib/cetris.h index e5a7a7e..57f2a17 100644 --- a/lib/cetris.h +++ b/lib/cetris.h @@ -534,6 +534,7 @@ void update_board(cetris_game *g) { add_score(g, lines_cleared);
if (lines_cleared > 0) {
g->lines += lines_cleared;
+ if (g->lines >= 20) g->game_over = true;
if (g->lines >= (g->level * 10))
g->level++;
}
@@ -606,7 +607,7 @@ CETRIS_EXPORT void move_piece(cetris_game *g, uint8_t move) { }
-CETRIS_EXPORT void init_game(cetris_game *g) {
+CETRIS_EXPORT void init_game(cetris_game *g, cetris_config* c) {
/* check for config errors */
assert(CETRIS_NEXT_PIECE_DELAY >= CETRIS_LINE_CLEAR_DELAY);
@@ -618,6 +619,7 @@ CETRIS_EXPORT void init_game(cetris_game *g) { #endif
memset(g, 0, sizeof(cetris_game));
+ memcpy(&g->config, c, sizeof(cetris_config));
g->level = CETRIS_STARTING_LEVEL;
g->highest_line = CETRIS_BOARD_Y;
|