示例#1
0
文件: menu.c 项目: alfbr/ResInsight
void menu_run(const menu_type * menu) {
    while (1) {
        int cmd;


        menu_display(menu);
        cmd = menu_read_cmd(menu);
        if (strchr(menu->quit_keys , cmd) != NULL) /* We have recieved a quit command - leave the building. */
            break;

        /*
          OK - we start looking through all the available commands to see
          which this is. */
        {
            int item_index = 0;
            while (1) {
                const menu_item_type * item = vector_iget_const(menu->items , item_index);
                if (!item->separator) {
                    if(!item->helptext) {
                        if (strchr(item->key_set , cmd) != NULL) {
                            /* Calling the function ... */
                            menu_item_call( item );
                            break;
                        }
                    }
                }
                item_index++;
            }
        }
    }
}
示例#2
0
文件: main.c 项目: LeBuG63/GalaxY
int main(void) {
	Menu		*mainMenu = menu_create();
	int			cmd = 1;
	bool		exit = false;

	menu_setTitle(mainMenu, "GalaxY (V0.11.20)");

	menu_addButtonText(mainMenu, "Jouer");
	menu_addButtonText(mainMenu, "Charger");
	menu_addButtonText(mainMenu, "Quitter");

	while (!exit) {
		menu_display(*mainMenu);
		cmd = menu_getcmd(*mainMenu);
		switch (cmd) {
		case 1:
			play();
			break;
		case 2:
			break;
		case 3:
			exit = true;
			break;
		default:
			break;
		}
	}

	menu_destroy(mainMenu);

	return 0;
}
示例#3
0
文件: menu.c 项目: j-a-r-i/stm32
void menu_down(menu_t *menu)
{
	if (menu->current > 0) {
		(menu->current)--;
		
		menu_display(menu);
	}
}
示例#4
0
文件: menu.c 项目: j-a-r-i/stm32
void menu_up(menu_t *menu)
{
	if (menu->current < (menu->size - 1)) {
		(menu->current)++;
		
		menu_display(menu);
	}
}
示例#5
0
文件: menu.c 项目: j-a-r-i/stm32
void menu_init(menu_t *menu, menuItems_t *items, uint8_t size)
{
	menu->items  = items;
	menu->current = 0;
	menu->size = size;

	menu_display(menu);
}
示例#6
0
/* 
 * Execute function for currently selected menu entry (or if it's a submenu,
 *  enter the submenu)
 *
 */
void menu_select(menu_context_t *context) {
	menu_entry_t *entry = &context->menu->entry[context->menu->current_entry];
	if (entry->flags & MENU_FLAG_SUBMENU) {
		// Submenu -- enter it
		menu_enter(context, (menu_t *) entry->value);
	} else {
		// Regular entry -- execute function
		entry->select(entry->value, entry->name);
	}
	// Re-display menu on return
	menu_display(context);
}
示例#7
0
int main()
{

	// Peripheral initialisation
	I2C_init();
	LCD_init();
	LCD_write("Loading...");
	DEBUG_init();	
	
	// Function initialisation
	WAVE_init();
	synth_init();
	CAN_init();

	
	menu_display();	

	while (1)
	{
		menu_update();
	}
	
	// Keypad for synth debugging
	/*int down = 0;
	int key = -1;
	
	while(1)
	{
		key = KEYPAD_get_key();

		if ((key != -1) && !down)
		{
			int note = 69+key;
			synth_note_on(note_to_freq(note),1.0);
			LCD_write_int("%d",note_to_freq(note));
			down = 1;
		}
		if ((key == -1) && down)
		{
			synth_note_off(1.0);
			LCD_clear();
			down = 0;
		}
	}*/
	
	// Loop to allow interupts
	while(1);
	return(1);
	
}
示例#8
0
/*
 * Move up currently highlighted to previous entry, without going out of bounds.
 *  Also adjust current top entry in display if needed to fit new entry
 *  on display
 */
void menu_prev_entry(menu_context_t *context) {
	menu_t *menu = context->menu;
	uint8_t new_entry = menu->current_entry;
#ifndef CONFIG_TINYMENU_COMPACT
	while (1) {
		if (new_entry-- == 0) // Watch bounds
			return;
		if (!(menu->entry[new_entry].flags & MENU_FLAG_HIDDEN))
			break;
	}
#else
	if (new_entry-- == 0)
	return;
#endif
	menu->current_entry = new_entry;
	if (menu->current_entry < menu->top_entry)
		menu->top_entry = menu->current_entry;
	menu_display(context);
}
示例#9
0
/*
 * Move down currently highlighted to next entry, without going out of bounds.
 *  Also adjust current top entry in display if needed to fit new entry
 *  on display
 */
void menu_next_entry(menu_context_t *context) {
	menu_t *menu = context->menu;
	uint8_t new_entry = menu->current_entry;
#ifndef CONFIG_TINYMENU_COMPACT
	while (1) {
		if (++new_entry >= menu->num_entries) // watch bounds
			return;
		if (!(menu->entry[new_entry].flags & MENU_FLAG_HIDDEN))
			break;
	}
#else
	if (++new_entry >= menu->num_entries)
	return;
#endif
	menu->current_entry = new_entry;
	if (menu->current_entry >= menu->top_entry + context->height)
		menu->top_entry = menu->current_entry - context->height;
	menu_display(context);
}
示例#10
0
文件: main.c 项目: impli/bomberman
int main(int argc, char *argv[]) {
	struct game* game = game_new();

	window_create(SIZE_BLOC * MAP_WIDTH,
			SIZE_BLOC * MAP_HEIGHT + BANNER_HEIGHT + LINE_HEIGHT);

	SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);

	// to obtain the DEFAULT_GAME_FPS, we have to reach a loop duration of (1000 / DEFAULT_GAME_FPS) ms
	int ideal_speed = 1000 / DEFAULT_GAME_FPS;
	int timer, execution_speed;

	// game loop
	// fixed time rate implementation
	int done = menu_display(game);

	while (!done) {
		timer = SDL_GetTicks();

		done = game_update(game);
		game_display(game);

		if ( player_get_dead(game_get_player(game))) {		// Reset the game if the player is dead
			game_free(game);
			game=game_new();
		}

		if(game_get_win(game) == 1)
			done=1;

		execution_speed = SDL_GetTicks() - timer;
		if (execution_speed < ideal_speed)
			SDL_Delay(ideal_speed - execution_speed); // we are ahead of ideal time. let's wait.

	}
	window_free();
	game_free(game);
	SDL_Quit();

	return EXIT_SUCCESS;
}
示例#11
0
文件: main.c 项目: LeBuG63/GalaxY
void	set_seed(void) {
	Menu		*menu = menu_create();
	int      	cmd = 1;
	bool		running = true;
	unsigned	seed = 42;

	menu_setTitle(menu, "Seed");

	menu_addButtonText(menu, "Generer aleatoirement un seed");
	menu_addButtonText(menu, "Entrer un seed");

	while (running) {
		menu_display(*menu);
		cmd = menu_getcmd(*menu);

		switch (cmd) {
		case 1: {
			seed = (unsigned)time(NULL) / clock();

			printf("Seed: %u\n", seed);

			running = false;
			break;
		}
		case 2:
			running = false;
			printf("Entrez un seed: ");
			scanf("%u", &seed);

			purge_stdin();
			break;
		default:
			running = false;
			break;
		}
		srand(seed);
	}
}
示例#12
0
void game_display(struct game* game) {
	assert(game);

	int map_w, map_h;

	window_clear();

	if(game->nb_player == 1) {
		map_w = map_get_width(level_get_curr_map(game->curr_level));
		map_h = map_get_height(level_get_curr_map(game->curr_level));
		for(int i = 0; i < map_w; i++)
			for(int j = 0; j < map_h+2; j++)
				window_display_image(sprite_get_empty(), i * SIZE_BLOC, j * SIZE_BLOC);
	}

	level_display(game_get_curr_level(game));

	monster_display(level_get_curr_map(game->curr_level));

	bomb_display(game, level_get_curr_map(game->curr_level));

	game_banner_display(game);

	if(game->nb_player == 1) { // Single player
		struct player* player = game->players[0];

		// Always display
		player_display(player);

		if(game->game_state == PLAYING) {
			player_move(game, player, level_get_curr_map(game->curr_level));
			monster_move(game, level_get_curr_map(game->curr_level), player);

			player_update(player);
			monster_update(level_get_curr_map(game->curr_level));
		}
	}
	else { // Multi player
		struct player* players_in_order[game->nb_player];
		for(int i=0; i<game->nb_player; i++)
			players_in_order[i] = game->players[i];
		game_order_players_array(game, players_in_order);

		for(int i = 0; i < game->nb_player; i++) {

			player_display(players_in_order[i]);

			if(game->game_state == PLAYING) {
				player_move(game, players_in_order[i], level_get_curr_map(game->curr_level));

				player_update(players_in_order[i]);
			}
		} // end for each player


	} // end Multi player

	if(game->game_state == PLAYING) {

		bomb_update(level_get_curr_map(game->curr_level));

	}
	else if(game->game_state == PAUSED) {
		map_w = map_get_width(level_get_curr_map(game->curr_level));
		map_h = map_get_height(level_get_curr_map(game->curr_level));
		int mid_w = map_w / 2 * SIZE_BLOC + map_w%2 * SIZE_BLOC / 2;
		int mid_h = map_h / 2 * SIZE_BLOC + map_h%2 * SIZE_BLOC / 2;
		menu_display(mid_w, mid_h);

	}
	window_refresh();
}
示例#13
0
bool menu_run(Settings *settings) {
  assert(settings != NULL);

  SDL_EnableKeyRepeat(10000 / WINDOW_FRAMERATE, 10000 / WINDOW_FRAMERATE);

  glClearColor(0, 0, 0, 1);

  int level_set_index = 0, theme_index = 0;

  menu_preload();

  // default settings
  if(settings->first_run) {
    settings->play_with_computer = true;
    settings->volume = 100;
    strncpy(settings->level_set, s_sets_names[level_set_index], LIM_STR_LEN);
    settings->level = 1;
    strncpy(settings->theme, s_themes_names[theme_index], LIM_STR_LEN);
    settings->ball_speed = BALL_DEFAULT_SPEED;
  }

  Timer timer = timer_new(WINDOW_FRAMERATE);

  const bool* events = NULL;
  bool leave = false;
  bool vol_updated = false;
  while(!leave) {
    events = event_poll();

    if(events[EVENT_QUIT] || events[EVENT_KEY_ESCAPE]) {
      return false;
    }

    if(events[EVENT_KEY_UP]) {
      if(s_focus == 0) {
        s_focus = __MENU_LABEL_LAST - 1;
      } else {
        s_focus--;
      }

      audio_play(SOUND_TOCK);
    }

    if(events[EVENT_KEY_DOWN]) {
      s_focus++;
      audio_play(SOUND_TOCK);

      if(s_focus == __MENU_LABEL_LAST) {
        s_focus = 0;
      }
    }

    if(events[EVENT_KEY_LEFT]) {
      bool action = true;

      switch(s_focus) {
      case LABEL_SECOND_PLAYER:
        settings->play_with_computer = !settings->play_with_computer;
        break;

      case LABEL_SOUND_VOLUME:
        settings->volume -= 10;
        if(settings->volume < 0) {
          settings->volume = 0;
          action = false;
        } else {
          vol_updated = true;
        }
        break;

      case LABEL_LEVEL_SET:
        s_level_set_index--;
        if(s_level_set_index < 0) {
          s_level_set_index = s_sets_names_length - 1;
        }
        settings->level = 1;
        break;

      case LABEL_LEVEL:
        (settings->level)--;
        if(settings->level <= 0) {
          settings->level = s_sets_levels[s_level_set_index];
        }
        break;

      case LABEL_THEME:
        s_theme_index--;
        if(s_theme_index < 0) {
          s_theme_index = s_themes_names_length - 1;
        }
        break;

      case LABEL_BALL_SPEED:
        (settings->ball_speed)--;
        if(settings->ball_speed < BALL_MIN_SPEED) {
          settings->ball_speed = BALL_MAX_SPEED;
        }
        break;

      default:
        action = false;
        break;
      }

      if(action) {
        audio_play(SOUND_TICK);
      }
    }

    if(events[EVENT_KEY_RIGHT]) {
      bool action = true;

      switch(s_focus) {
      case LABEL_SECOND_PLAYER:
        settings->play_with_computer = !settings->play_with_computer;
        break;

      case LABEL_SOUND_VOLUME:
        settings->volume += 10;
        if(settings->volume > 100) {
          settings->volume = 100;
          action = false;
        } else {
          vol_updated = true;
        }
        break;

      case LABEL_LEVEL_SET:
        s_level_set_index++;
        if(s_level_set_index >= s_sets_names_length) {
          s_level_set_index = 0;
        }
        settings->level = 1;
        break;

      case LABEL_LEVEL:
        (settings->level)++;
        if(settings->level > s_sets_levels[s_level_set_index]) {
          settings->level = 1;
        }
        break;

      case LABEL_THEME:
        s_theme_index++;
        if(s_theme_index >= s_themes_names_length) {
          s_theme_index = 0;
        }
        break;

      case LABEL_BALL_SPEED:
        (settings->ball_speed)++;
        if(settings->ball_speed > BALL_MAX_SPEED) {
          settings->ball_speed = BALL_MIN_SPEED;
        }
        break;

      default:
        action = false;
        break;
      }

      if(action) {
        audio_play(SOUND_TICK);
      }
    }

    if(events[EVENT_KEY_ENTER]) {
      if(s_focus == LABEL_QUIT) {
        return false;
      } else {
        leave = true;
      }
    }

    if(vol_updated) {
      audio_set_volume(settings->volume);
      vol_updated = false;
    }

    glClear(GL_COLOR_BUFFER_BIT);

    menu_display(settings);

    SDL_GL_SwapBuffers();

    timer_sleep(&timer);
  }

  strncpy(settings->level_set, s_sets_names[s_level_set_index], LIM_STR_LEN);
  strncpy(settings->theme, s_themes_names[s_theme_index], LIM_STR_LEN);

  settings->first_run = false;

  return true;
}
示例#14
0
/*
 * Enter a menu -- save current menu in the menu's previous pointer
 *  so when we exit we can go back, and update the menu context to
 *  reflect new menu... then display it.
 */
void menu_enter(menu_context_t *context, menu_t *menu) {
	menu->previous = context->menu;
	context->menu = menu;
	menu_display(context);
}
示例#15
0
/*
 * Exit a menu (go to the previous menu) -- if there is no previous
 *  menu, don't do anything.
 */
void menu_exit(menu_context_t *context) {
	if (context->menu->previous) {
		context->menu = context->menu->previous;
		menu_display(context);
	}
}