Пример #1
0
int main() {
    struct Card unused_cards[TOTAL_DECK];
    struct Card working_deck[TOTAL_DECK];

    generate_deck(unused_cards);
    shuffle_deck(unused_cards);
    format_deck(unused_cards);

    int playing = TRUE;
    while (playing == TRUE) {
        playing = game_round(unused_cards, working_deck);

        format_deck(working_deck);
    }

    printf("Final count: %d\n", count_deck(working_deck));

    return 1;
}
Пример #2
0
/*
 * Play a number of training games.
 */
int main(int argc, char *argv[])
{
	game my_game;
	int i, j, n = 100;
	int num_players = 3;
	int expansion = 0, advanced = 0, promo = 0;
	char buf[1024], *names[MAX_PLAYER];
	double factor = 1.0;

	/* Set random seed */
	my_game.random_seed = time(NULL);

	/* Read card database */
	if (read_cards(NULL) < 0)
	{
		/* Exit */
		exit(1);
	}

	/* Parse arguments */
	for (i = 1; i < argc; i++)
	{
		/* Check for verbosity */
		if (!strcmp(argv[i], "-v"))
		{
			/* Set verbose flag */
			verbose++;
		}

		/* Check for number of players */
		else if (!strcmp(argv[i], "-p"))
		{
			/* Set number of players */
			num_players = atoi(argv[++i]);
		}

		/* Check for advanced game */
		else if (!strcmp(argv[i], "-a"))
		{
			/* Set advanced flag */
			advanced = 1;
		}

		/* Check for expansion level */
		else if (!strcmp(argv[i], "-e"))
		{
			/* Set expansion level */
			expansion = atoi(argv[++i]);
		}

		/* Check for promo cards */
		else if (!strcmp(argv[i], "-o"))
		{
			/* Set promo cards */
			promo = 1;
		}

		/* Check for number of games */
		else if (!strcmp(argv[i], "-n"))
		{
			/* Set number of games */
			n = atoi(argv[++i]);
		}

		/* Check for random seed */
		else if (!strcmp(argv[i], "-r"))
		{
			/* Set random seed */
			my_game.random_seed = atoi(argv[++i]);
		}

		/* Check for alpha factor */
		else if (!strcmp(argv[i], "-f"))
		{
			/* Set factor */
			factor = atof(argv[++i]);
		}
	}

	/* Set number of players */
	my_game.num_players = num_players;

	/* Set expansion level */
	my_game.expanded = expansion;

	/* Set advanced flag */
	my_game.advanced = advanced;

	/* Set promo flag */
	my_game.promo = promo;

	/* Assume no options disabled */
	my_game.goal_disabled = 0;
	my_game.takeover_disabled = 0;

	/* No campaign selected */
	my_game.camp = NULL;

	/* Call initialization functions */
	for (i = 0; i < num_players; i++)
	{
		/* Create player name */
		sprintf(buf, "Player %d", i);

		/* Set player name */
		my_game.p[i].name = strdup(buf);
		names[i] = my_game.p[i].name;

		/* Set player interfaces to AI functions */
		my_game.p[i].control = &ai_func;

		/* Initialize AI */
		my_game.p[i].control->init(&my_game, i, factor);

		/* Create choice log for player */
		my_game.p[i].choice_log = (int *)malloc(sizeof(int) * 4096);

		/* Clear choice log size and position */
		my_game.p[i].choice_size = 0;
		my_game.p[i].choice_pos = 0;
	}

	/* Play a number of games */
	for (i = 0; i < n; i++)
	{
		/* Initialize game */
		init_game(&my_game);

		printf("Start seed: %u\n", my_game.start_seed);

		/* Begin game */
		begin_game(&my_game);

		/* Play game rounds until finished */
		while (game_round(&my_game));

		/* Score game */
		score_game(&my_game);

		/* Print result */
		for (j = 0; j < num_players; j++)
		{
			/* Print score */
			printf("%s: %d\n", my_game.p[j].name,
			                   my_game.p[j].end_vp);
		}

		/* Declare winner */
		declare_winner(&my_game);

		/* Call player game over functions */
		for (j = 0; j < num_players; j++)
		{
			/* Call game over function */
			my_game.p[j].control->game_over(&my_game, j);

			/* Clear choice log */
			my_game.p[j].choice_size = 0;
			my_game.p[j].choice_pos = 0;
		}

		/* Reset player names */
		for (j = 0; j < num_players; j++)
		{
			/* Reset name */
			my_game.p[j].name = names[j];
		}
	}

	/* Call interface shutdown functions */
	for (i = 0; i < num_players; i++)
	{
		/* Call shutdown function */
		my_game.p[i].control->shutdown(&my_game, i);
	}

	/* Done */
	return 0;
}