Ejemplo n.º 1
0
int main_menu(SDL_Renderer *renderer) {
  int should_quit = 0;
  Code code = CODE_OK;
  Menu menu;
  CommandTable command_table;
  char title[MAXIMUM_STRING_SIZE];
  char *options[] = {"Play", "Top Scores", "Info", "Quit"};
  sprintf(title, "%s %s", "Walls of Doom", WALLS_OF_DOOM_VERSION);
  menu.title = title;
  menu.options = options;
  menu.option_count = 4;
  menu.selected_option = 0;
  initialize_command_table(&command_table);
  while (!should_quit) {
    write_menu(&menu, renderer);
    read_commands(&command_table);
    if (test_command_table(&command_table, COMMAND_UP, REPETITION_DELAY)) {
      if (menu.selected_option > 0) {
        menu.selected_option--;
      } else {
        menu.selected_option = menu.option_count - 1;
      }
    } else if (test_command_table(&command_table, COMMAND_DOWN, REPETITION_DELAY)) {
      if (menu.selected_option + 1 < menu.option_count) {
        menu.selected_option++;
      } else {
        menu.selected_option = 0;
      }
    } else if (test_command_table(&command_table, COMMAND_ENTER, REPETITION_DELAY) ||
               test_command_table(&command_table, COMMAND_CENTER, REPETITION_DELAY)) {
      if (menu.selected_option == 0) {
        code = game(renderer, &command_table);
      } else if (menu.selected_option == 1) {
        code = top_scores(renderer, &command_table);
      } else if (menu.selected_option == 2) {
        code = info(renderer, &command_table);
      } else if (menu.selected_option == 3) {
        should_quit = 1;
      }
      /* If it is not defined whether or not we should quit, check the code. */
      if (should_quit == 0) {
        should_quit = is_termination_code(code);
      }
    }
    /* Quit if the user selected the Quit option or closed the window. */
    should_quit = should_quit || test_command_table(&command_table, COMMAND_QUIT, REPETITION_DELAY);
  }
  return 0;
}
Ejemplo n.º 2
0
void display_cycle(void)
{
    unsigned long counter;
    int ch;

    counter = loopDelay;
    while (--counter);

    if (!(cycle & keyDelay)) {

#if defined(DJGPP) || defined(WATCOM)
#if defined(DOSALLGRAPHX)
	if (displayMode == TEXT)
#ifdef CONIOGRAPHX
	    CacheScreenUpdate(Screen[CORE_PAGE]);
#else
	    ScreenUpdate((void *) Screen[CORE_PAGE]);
#endif
#else
#if defined(DOSTXTGRAPHX)
#ifdef CONIOGRAPHX
	CacheScreenUpdate(Screen[CORE_PAGE]);
#else
	ScreenUpdate((void *) Screen[CORE_PAGE]);
#endif
#endif				/* DOSTXTGRAPHX */
#endif				/* DOSALLGRAPHX */
#endif				/* DJGPP */

#if defined(DOSALLGRAPHX)
	if (displayMode != TEXT)
	    bgi_update_cycle_meter();
#else
#if defined(DOSGRXGRAPHX)
	bgi_update_cycle_meter();
#endif
#endif
	if (KEYPRESSED && !inputRedirection) {
	    switch (ch = getch()) {
	    case '0':
		displayLevel = 0;
		break;
	    case '1':
		displayLevel = 1;
		break;
	    case '2':
		displayLevel = 2;
		break;
	    case '3':
		displayLevel = 3;
		break;
	    case '4':
		displayLevel = 4;
		break;
	    case 'd':
		debugState = STEP;
		/* stepping = FALSE; */ break;
	    case '>':
		if (displaySpeed > 0) {
		    --displaySpeed;
		    loopDelay = loopDelayAr[displaySpeed];
		    keyDelay = keyDelayAr[displaySpeed];
		}
		break;
	    case '<':
		if (displaySpeed < SPEEDLEVELS - 1) {
		    ++displaySpeed;
		    loopDelay = loopDelayAr[displaySpeed];
		    keyDelay = keyDelayAr[displaySpeed];
		}
		break;
	    case ' ':
	    case 'r':
#if defined(DOSALLGRAPHX)
		if (displayMode == TEXT)
		    text_display_clear();
		else
		    bgi_clear_arena();
#else
#if defined(DOSTXTGRAPHX)
		text_display_clear();
#else
		bgi_clear_arena();
#endif
#endif
		break;
	    case 27:		/* escape */
	    case 'q':
		display_close();
		Exit(USERABORT);
#if defined(DOSALLGRAPHX)
	    case 'v':
		if (displayMode == TEXT)
		    displayMode = GRX;
		else
		    bgi_display_close(NOWAIT);
		display_init();
		break;
#endif
#if 0
#if defined(DOSALLGRAPHX)
	    case '?':
	    case 'h':
		if (displayMode == TEXT)
		    disp_help();
		break;
#else
#if defined(DOSTXTGRAPHX)
	    case '?':
	    case 'h':
		disp_help();
		break;
#endif
#endif
#endif				/* 0 */
	    default:
		if (ch > 32 && ch < 128)
		    ch += 128;
		ungetch(ch);
		debugState = STEP;
		break;
	    }
#if defined(DOSALLGRAPHX)
	    if (displayMode != TEXT)
		write_menu();
#else
#if defined(DOSGRXGRAPHX)
	    write_menu();
#endif
#endif
	}
    }
}