/** Calls all drawing routines in order */ void engine_draw(game_s* g) { WINDOW* board = engine.screen.board.win; werase(board); switch (g->state) { case PLAYING: engine_draw_board(&(g->board)); engine_draw_piece(&(g->piece_ghost), board); engine_draw_piece(&(g->piece_current), board); if (global.game_next_no > 0) engine_draw_next_pieces(g); if (global.game_can_hold) engine_draw_hold(g); engine_draw_score(g); engine_draw_info(g); break; case PAUSED: engine_draw_board(&(g->board)); engine_draw_pause(); engine_draw_info(g); /* refresh the current time */ break; case GAME_OVER: engine_draw_board(&(g->board)); engine_draw_gameover(); engine_draw_info(g); break; case HELP: engine_draw_board(&(g->board)); engine_draw_info(g); engine_draw_help(); break; case HSCORES: engine_draw_board(&(g->board)); engine_draw_info(g); engine_draw_hscores(); break; default: /* Umm... Nothing, I guess...? */ break; } wnoutrefresh(board); doupdate(); }
/** Main entry point for the game. I kept it as simple as I could. */ int main(int argc, char* argv[]) { global = new_globals(); config_handle(); args_handle(argc, argv); engine_init(); atexit(engine_exit); /* no need to call it when quitting */ game_s game = new_game(); engine_draw(&game); while (!game.quit) { int c = engine_get_input(game.speed); game_handle_input(&game, c); game_update(&game); /* THIS WILL BE UNCOMMENTED SOON */ /* if (game.show_help) */ /* { */ /* engine_draw_help(); */ /* engine_wait_for_keypress(); */ /* game.show_help = false; */ /* } */ if (game.is_over) { game_over(&game); engine_draw_gameover(&game); engine_wait_for_keypress(); game = new_game(); } engine_draw(&game); } return EXIT_SUCCESS; }