Ejemplo n.º 1
0
static void print_players(const Set *players) {

ListElmt           *member;

/*****************************************************************************
*                                                                            *
*  Display the skills for each player in the set of players.                 *
*                                                                            *
*****************************************************************************/

for (member = list_head(players); member != NULL; member = list_next(member)){

   fprintf(stdout, "Player %c\n", *(char *)((KSet *)list_data(member))->key);
   print_skills(&((KSet *)list_data(member))->set);

}

return;

}
Ejemplo n.º 2
0
/*
 * Interreact with skills
 */
void do_cmd_skill()
{
	int sel = 0, start = 0, max;
	char c;
	int table[MAX_SKILLS][2];
	int i;
	int wid, hgt;
	s16b skill_points_save;
	s32b *skill_values_save;
	s32b *skill_mods_save;
	s16b *skill_rates_save;
	s16b *skill_invest;
	s32b *skill_bonus;

	recalc_skills(TRUE);

	/* Save the screen */
	screen_save();

	/* Allocate arrays to save skill values */
	C_MAKE(skill_values_save, MAX_SKILLS, s32b);
	C_MAKE(skill_mods_save, MAX_SKILLS, s32b);
	C_MAKE(skill_rates_save, MAX_SKILLS, s16b);
	C_MAKE(skill_invest, MAX_SKILLS, s16b);
	C_MAKE(skill_bonus, MAX_SKILLS, s32b);

	/* Save skill points */
	skill_points_save = p_ptr->skill_points;

	/* Save skill values */
	for (i = 0; i < max_s_idx; i++)
	{
		skill_type *s_ptr = &s_info[i];

		skill_values_save[i] = s_ptr->value;
		skill_mods_save[i] = s_ptr->mod;
		skill_rates_save[i] = s_ptr->rate;
		skill_invest[i] = 0;
	}

	/* Clear the screen */
	Term_clear();

	/* Initialise the skill list */
	init_table(table, &max, FALSE);

	while (TRUE)
	{
		Term_get_size(&wid, &hgt);

		/* Display list of skills */
		recalc_skills_theory(skill_invest, skill_values_save, skill_mods_save, skill_bonus);
		print_skills(table, max, sel, start);

		/* Wait for user input */
		c = inkey();

		/* Leave the skill screen */
		if (c == ESCAPE) break;

		/* Expand / collapse list of skills */
		else if (c == '\r')
		{
			if (s_info[table[sel][0]].dev) s_info[table[sel][0]].dev = FALSE;
			else s_info[table[sel][0]].dev = TRUE;
			init_table(table, &max, FALSE);
		}

		/* Next page */
		else if (c == 'n')
		{
			sel += (hgt - 7);
			if (sel >= max) sel = max - 1;
		}

		/* Previous page */
		else if (c == 'p')
		{
			sel -= (hgt - 7);
			if (sel < 0) sel = 0;
		}

		/* Select / increase a skill */
		else
		{
			int dir;

			/* Allow use of numpad / arrow keys / roguelike keys */
			dir = get_keymap_dir(c);

			/* Move cursor down */
			if (dir == 2) sel++;

			/* Move cursor up */
			if (dir == 8) sel--;

			/* Miscellaneous skills cannot be increased/decreased as a group */
			if (table[sel][0] == SKILL_MISC) continue;

			/* Increase the current skill */
			if (dir == 6) increase_skill(table[sel][0], skill_invest);

			/* Decrease the current skill */
			if (dir == 4) decrease_skill(table[sel][0], skill_invest);

			/* XXX XXX XXX Wizard mode commands outside of wizard2.c */

			/* Increase the skill */
			if (wizard && (c == '+')) skill_bonus[table[sel][0]] += SKILL_STEP;

			/* Decrease the skill */
			if (wizard && (c == '-')) skill_bonus[table[sel][0]] -= SKILL_STEP;

			/* Contextual help */
			if (c == '?') exec_lua(format("ingame_help('select_context', 'skill', '%s')", s_info[table[sel][0]].name + s_name));
			;

			/* Handle boundaries and scrolling */
			if (sel < 0) sel = max - 1;
			if (sel >= max) sel = 0;
			if (sel < start) start = sel;
			if (sel >= start + (hgt - 7)) start = sel - (hgt - 7) + 1;
		}
	}


	/* Some skill points are spent */
	if (p_ptr->skill_points != skill_points_save)
	{
		/* Flush input as we ask an important and irreversible question */
		flush();

		/* Ask we can commit the change */
		if (msg_box("Save and use these skill values? (y/n)", (int)(hgt / 2), (int)(wid / 2)) != 'y')
		{
			/* User declines -- restore the skill values before exiting */

			/* Restore skill points */
			p_ptr->skill_points = skill_points_save;

			/* Restore skill values */
			for (i = 0; i < max_s_idx; i++)
			{
				skill_type *s_ptr = &s_info[i];

				s_ptr->value = skill_values_save[i];
				s_ptr->mod = skill_mods_save[i];
				s_ptr->rate = skill_rates_save[i];
			}
		}
	}


	/* Free arrays to save skill values */
	C_FREE(skill_values_save, MAX_SKILLS, s32b);
	C_FREE(skill_mods_save, MAX_SKILLS, s32b);
	C_FREE(skill_rates_save, MAX_SKILLS, s16b);
	C_FREE(skill_invest, MAX_SKILLS, s16b);
	C_FREE(skill_bonus, MAX_SKILLS, s32b);

	/* Load the screen */
	screen_load();

	recalc_skills(FALSE);
}
Ejemplo n.º 3
0
int main(int argc, char **argv) {

Set                skills,
                   players,
                   covering;

char               skills_array[SKILLS_COUNT],
                   subids_array[PLAYER_COUNT];

KSet               player_array[PLAYER_COUNT];

int                retval,
                   i;

/*****************************************************************************
*                                                                            *
*  Create the set of skills.                                                 *
*                                                                            *
*****************************************************************************/

fprintf(stdout, "Creating the set of skills\n");

set_init(&skills, match_skill, NULL);

skills_array[0] = 'a';
skills_array[1] = 'b';
skills_array[2] = 'c';
skills_array[3] = 'd';
skills_array[4] = 'e';
skills_array[5] = 'f';
skills_array[6] = 'g';
skills_array[7] = 'h';
skills_array[8] = 'i';
skills_array[9] = 'j';
skills_array[10] = 'k';
skills_array[11] = 'l';

for (i = 0; i < SKILLS_COUNT; i++) {

   if (set_insert(&skills, &skills_array[i]) != 0)
      return 1;

}

print_skills(&skills);

/*****************************************************************************
*                                                                            *
*  Create some player sets with certain skills.                              *
*                                                                            *
*****************************************************************************/

fprintf(stdout, "Creating the player subsets\n");

set_init(&players, match_key, NULL);

subids_array[0] = '1';
subids_array[1] = '2';
subids_array[2] = '3';
subids_array[3] = '4';
subids_array[4] = '5';
subids_array[5] = '6';
subids_array[6] = '7';
subids_array[7] = '8';

for (i = 0; i < PLAYER_COUNT; i++) {

   player_array[i].key = &subids_array[i];
   set_init(&player_array[i].set, match_skill, NULL);

   switch (i) {

      case 0:

      if (set_insert(&player_array[i].set, &skills_array[0]) != 0)
         return 1;

      if (set_insert(&player_array[i].set, &skills_array[1]) != 0)
         return 1;

      if (set_insert(&player_array[i].set, &skills_array[2]) != 0)
         return 1;

      if (set_insert(&player_array[i].set, &skills_array[3]) != 0)
         return 1;

      break;

      case 1:

      if (set_insert(&player_array[i].set, &skills_array[4]) != 0)
         return 1;

      if (set_insert(&player_array[i].set, &skills_array[5]) != 0)
         return 1;

      if (set_insert(&player_array[i].set, &skills_array[6]) != 0)
         return 1;

      if (set_insert(&player_array[i].set, &skills_array[7]) != 0)
         return 1;

      if (set_insert(&player_array[i].set, &skills_array[8]) != 0)
         return 1;

      break;

      case 2:

      if (set_insert(&player_array[i].set, &skills_array[9]) != 0)
         return 1;

      if (set_insert(&player_array[i].set, &skills_array[10]) != 0)
         return 1;

      if (set_insert(&player_array[i].set, &skills_array[11]) != 0)
         return 1;

      break;

      case 3:

      if (set_insert(&player_array[i].set, &skills_array[0]) != 0)
         return 1;

      if (set_insert(&player_array[i].set, &skills_array[4]) != 0)
         return 1;

      break;

      case 4:

      if (set_insert(&player_array[i].set, &skills_array[1]) != 0)
         return 1;

      if (set_insert(&player_array[i].set, &skills_array[5]) != 0)
         return 1;

      if (set_insert(&player_array[i].set, &skills_array[6]) != 0)
         return 1;

      break;

      case 5:

      if (set_insert(&player_array[i].set, &skills_array[2]) != 0)
         return 1;

      if (set_insert(&player_array[i].set, &skills_array[3]) != 0)
         return 1;

      if (set_insert(&player_array[i].set, &skills_array[6]) != 0)
         return 1;

      if (set_insert(&player_array[i].set, &skills_array[7]) != 0)
         return 1;

      if (set_insert(&player_array[i].set, &skills_array[10]) != 0)
         return 1;

      if (set_insert(&player_array[i].set, &skills_array[11]) != 0)
         return 1;

      break;

      default:

      if (set_insert(&player_array[i].set, &skills_array[11]) != 0)
         return 1;

   }

   if (set_insert(&players, &player_array[i]) != 0)
      return 1;

}

print_players(&players);

/*****************************************************************************
*                                                                            *
*  Compute the set covering.                                                 *
*                                                                            *
*****************************************************************************/

fprintf(stdout, "Generating the cover\n");

if ((retval = cover(&skills, &players, &covering)) != 0)
   return 1;

if (retval == 1)
   fprintf(stderr, "The set could not be covered\n");
else
   print_players(&covering);

/*****************************************************************************
*                                                                            *
*  Destroy the sets.                                                         *
*                                                                            *
*****************************************************************************/

fprintf(stdout, "Destroying the sets\n");

for (i = 0; i < PLAYER_COUNT; i++)
   set_destroy(&player_array[i].set);

set_destroy(&skills);

return 0;

}