Exemple #1
0
bool BingoGame::imprimir_cartones(const char* template_name)
{
	std::string str;
	std::ofstream index_file;
	std::string temp_name(template_name);
	name = temp_name.substr(0, temp_name.length() - 4);
	index_file.open((name + ".idx").c_str());
	if ( ! index_file )
	{
		std::cerr << "toc: could not create index document" << std::endl;
		return false;
	}
	index_file << numero_cartones << std::endl;
	std::vector < std::string > temp(25);
    for (size_t i = 0; i < numero_cartones ; ++i)
	{
		card_shuffle();
		str = "";
		str = name + "-" + std::to_string(i) + ".svg";
		Carton nuevo(words);
		if ( ! nuevo.imprimir_carta(template_name, str.c_str(), i) )
		{
			std::cerr << "toc: could not print document(clase bingo)" << std::endl;
			return false;
		}
		nuevo.copiar_vector(temp);
		index_file << std::to_string(i) << std::endl;
		for (int j = 0; j < 25; ++j)
			index_file << temp[j] << std::endl;
		index_file << std::endl;
	}
	index_file.close();
	//std::cerr << "se imprimio carton" << std::endl;
	return true;
}
Exemple #2
0
static void action_deal_execute(visual_pile_action *action) {
	action_deal_data *data = action->data;
	internal *i = data->i;
	solitaire *sol = data->sol;

	if(card_count(i->deck) == 52) {
		card_move_count(i->build[0], i->deck, 7);
		card_reveal_count(i->build[0], 4, 3);

		card_move_count(i->build[1], i->deck, 7);
		card_reveal_count(i->build[1], 4, 3);

		card_move_count(i->build[2], i->deck, 7);
		card_reveal_count(i->build[2], 4, 3);

		card_move_count(i->build[3], i->deck, 7);
		card_reveal_count(i->build[3], 4, 3);

		card_move_count(i->build[4], i->deck, 6);
		card_reveal_all(i->build[4]);

		card_move_count(i->build[5], i->deck, 6);
		card_reveal_all(i->build[5]);

		card_move_count(i->build[6], i->deck, 6);
		card_reveal_all(i->build[6]);

		card_move_count(i->build[7], i->deck, 6);
		card_reveal_all(i->build[7]);
	}
	else {
		card_move_all_array(
			i->deck, 12,
			i->build[0], i->build[1], i->build[2], i->build[3],
			i->build[4], i->build[5], i->build[6], i->build[7],
			i->ace[0], i->ace[1], i->ace[2], i->ace[3]);
		card_hide_all(i->deck);
		card_shuffle(i->deck);
	}

	visual_sync(sol->visual);
}
Exemple #3
0
solitaire* solitaire_theidiot(mem_context *context, visual_settings *settings) {
	visual_pile *deck, *pile1, *pile2, *pile3, *pile4, *done;
	rule *rule1, *rule2;
	condition *pile1_4_cond;

	/* The one solitaire instance we have.*/
	solitaire* s = mem_alloc(context, sizeof(solitaire));

	/* This is the internal data representation of this
	 * solitaire. This is a local struct hidden from other
	 * members. */
	internal* i = mem_alloc(context, sizeof(internal));
	s->data = i;

	s->visual = visual_create(context, settings);

	i->deck = pile_create(context, 52);
	deck = visual_pile_create(context, i->deck);
	deck->origin[0] = 0 - (settings->card_width / 2 + settings->card_spacing / 2 + settings->card_width * 2 + settings->card_spacing * 2 + settings->card_width / 2);
	deck->origin[1] = 40.0f;
	deck->rotation = 45.0f;
	deck->action = action_deal(context, s, i);
	visual_add_pile(context, s->visual, deck);

	i->pile1 = pile_create(context, 13);
	pile1 = visual_pile_create(context, i->pile1);
	pile1->origin[0] = 0 - (settings->card_width / 2 + settings->card_spacing / 2 + settings->card_width + settings->card_spacing);
	pile1->origin[1] = 70.0f;
	pile1->translateY = 0 - settings->card_height / 5;
	visual_add_pile(context, s->visual, pile1);

	i->pile2 = pile_create(context, 13);
	pile2 = visual_pile_create(context, i->pile2);
	pile2->origin[0] = 0 - (settings->card_width / 2 + settings->card_spacing / 2);
	pile2->origin[1] = 70.0f;
	pile2->translateY = 0 - settings->card_height / 5;
	visual_add_pile(context, s->visual, pile2);

	i->pile3 = pile_create(context, 13);
	pile3 = visual_pile_create(context, i->pile3);
	pile3->origin[0] = settings->card_width / 2 + settings->card_spacing / 2;
	pile3->origin[1] = 70.0f;
	pile3->translateY = 0 - settings->card_height / 5;
	visual_add_pile(context, s->visual, pile3);

	i->pile4 = pile_create(context, 13);
	pile4 = visual_pile_create(context, i->pile4);
	pile4->origin[0] = settings->card_width / 2 + settings->card_spacing / 2 + settings->card_width + settings->card_spacing;
	pile4->origin[1] = 70.0f;
	pile4->translateY = 0 - settings->card_height / 5;
	visual_add_pile(context, s->visual, pile4);

	i->done = pile_create(context, 48);
	done = visual_pile_create(context, i->done);
	done->origin[0] = settings->card_width / 2 + settings->card_spacing / 2 + settings->card_width * 2 + settings->card_spacing * 2 + settings->card_width / 2;
	done->origin[1] = 40.0f;
	done->rotation = -45.0f;
	visual_add_pile(context, s->visual, done);

	card_create_deck(context, i->deck, 14);
	card_shuffle(i->deck);

	visual_sync(s->visual);

	s->ruleset = ruleset_create(context);

	/* Shared condition between several rules. */
	pile1_4_cond = condition_source_array(
		context, 4, i->pile1, i->pile2, i->pile3, i->pile4);

	/* Move card to done pile if source is pile1-pile4 and there is
	   a higher card in same suit in those piles. */
	rule1 = rule_create(context);
	rule_add_condition(context, rule1, pile1_4_cond);
	rule_add_condition(context, rule1, condition_destination(context, i->done));
	rule_add_condition(
		context,
		rule1,
		condition_or_array(
			context, 4,
			condition_top_card_compare(context, i->pile1,
									   e_dest_higher_value | e_follow_suit),
			condition_top_card_compare(context, i->pile2,
									   e_dest_higher_value | e_follow_suit),
			condition_top_card_compare(context, i->pile3,
									   e_dest_higher_value | e_follow_suit),
			condition_top_card_compare(context, i->pile4,
									   e_dest_higher_value | e_follow_suit)));
	rule_add_condition(context, rule1, condition_top_card(context));
	ruleset_add_rule(context, s->ruleset, rule1);

	/* Allow move to a top card to an empty pile. */
	rule2 = rule_create(context);
	rule_add_condition(context, rule2, pile1_4_cond);
	rule_add_condition(context, rule2, condition_top_card(context));
	rule_add_condition(context, rule2, condition_destination_empty(context));
	rule_add_condition(
		context, rule2,
		condition_destination_array(
			context, 4, i->pile1, i->pile2, i->pile3, i->pile4));
	ruleset_add_rule(context, s->ruleset, rule2);

	/* Solved rule */
	s->ruleset->solved = rule_create(context);
	rule_add_condition(
		context, s->ruleset->solved,
		condition_source_card_equal(
			context, e_suit_none, 14, e_equal_value, i->pile1));
	rule_add_condition(
		context, s->ruleset->solved,
		condition_source_card_equal(
			context, e_suit_none, 14, e_equal_value, i->pile2));
	rule_add_condition(
		context, s->ruleset->solved,
		condition_source_card_equal(
			context, e_suit_none, 14, e_equal_value, i->pile3));
	rule_add_condition(
		context, s->ruleset->solved,
		condition_source_card_equal(
			context, e_suit_none, 14, e_equal_value, i->pile4));
	rule_add_condition(
		context, s->ruleset->solved,
		condition_card_count_array(
			context, 1, 4, i->pile1, i->pile2, i->pile3, i->pile4));
	return s;
}
Exemple #4
0
int main(int argc, char* argv[])
{
	struct deck thisDeck;
	struct player thisPlayer;
	struct game thisGame;
	int inputValidity;
	int menu;
	int game;
	int load = 0;
	
	//Not Working!!! card_init_deck(&thisDeck);
	
	//This is the exact same algorithm used in card.c and it works great here!!! Why!!!
	for (int k = 0; k < 4; k++)
	{
		for (int i = 0; i < 13; i++)
		{
			for (int j = 0; j < 4; j++)
			{
				strcpy(thisDeck.oneCard[k*52+i*4+j].rank, ranks[i]);
				strcpy(thisDeck.oneCard[k*52+i*4+j].suit, suits[j]);
				thisDeck.oneCard[k*52+i*4+j].value = value[i];
			}
		}
	}
	
	card_shuffle(&thisDeck);
	thisPlayer.chip = 0;
	
	system("clear");
		
	while (1)
	{
		printf("\n\n**********BlackJack**********\n\n");
		printf(" 1. Play\n");
		printf(" 2. Load\n");
		printf(" 3. Player status\n");
		printf(" 4. Exit\n\n");
		printf("*****************************\n\n");
		while(1)
		{
			printf("Please enter menu number: ");
			inputValidity = scanf("%d", &menu);
			while(getchar()!='\n'){}
			if (inputValidity)
			{
				if (menu < 1 || menu > 4)
				{
					printf("Please select from menu!\n");
				}
				else
				{
					break;
				}
			}
			else
			{
				printf("Please enter a NUMBER!\n");
			}
		}
		
		if (menu == 4)
		{
			player_save(&thisPlayer);
			printf("Thanks for playing! Bye!\n");
			break;
		}
		else if (menu == 3)
		{
			if (thisPlayer.name == NULL)
			{
				printf("No player record.\n");
				continue;
			}
			player_status(&thisPlayer);
			continue;
		}
		else if (menu == 2)
		{
			player_load(&thisPlayer);
			continue;
		}
		else
		{
			if (thisPlayer.chip == 0)
			{
				player_name(&thisPlayer);
				player_chip(&thisPlayer);
			}
			printf("Welcome %s!\nHave fun!\n\n", thisPlayer.name);
			
			while(1)
			{
				//Deal initial cards
				game_init(&thisGame);
				if (thisDeck.cardNow > 180)
				{
					printf("\n\nShuffling...\n\n");
					card_shuffle(&thisDeck);
				}
				if (thisPlayer.chip <= 0)
				{
					printf("You are penniless!\n");
					thisPlayer.win = 0;
					thisPlayer.lose = 0;
					thisPlayer.push = 0;
					break;
				}
				game_bet(1, &thisPlayer, &thisGame);
				printf("\nDealer is dealing the cards...\n\n");
				game_deal_card(2, &thisGame, &thisDeck);
				game_deal_card(1, &thisGame, &thisDeck);
				game_deal_card(2, &thisGame, &thisDeck);
				game_deal_card(1, &thisGame, &thisDeck);
				printf("Dealer shows %s of %s\n", thisDeck.oneCard[thisGame.dealer_inhand[0]].rank, thisDeck.oneCard[thisGame.dealer_inhand[0]].suit);
				printf("Dealer\'s point is %d\n", thisDeck.oneCard[thisGame.dealer_inhand[0]].value);
				printf("Your cards: ");
				game_print_card(2, &thisGame, &thisDeck);
				printf("\n");
				printf("Your point is %d\n", game_totalvalue(2, &thisGame, &thisDeck));
				
				//Check if dealer shows an Ace
				if (thisDeck.oneCard[thisGame.dealer_inhand[0]].value == 11)
				{
					game_bet(2, &thisPlayer, &thisGame);
					if (game_totalvalue(1, &thisGame, &thisDeck) == 21 && game_judge(&thisGame, &thisDeck) != 4)
					{
						if (thisGame.is_insured)
						{
							thisPlayer.chip += thisGame.bet;
						}
						thisPlayer.lose++;
						printf("Dealer\'s cards: ");
						game_print_card(1, &thisGame, &thisDeck);
						printf("\n");
						printf("Dealer\'s point is %d\n", game_totalvalue(1, &thisGame, &thisDeck));
						printf("Dealer is BlackJack!\n");
						if (game_end())
						{
							break;
						}
						else
						{
							continue;
						}
					}
					else if (game_totalvalue(2, &thisGame, &thisDeck) == 21 && game_judge(&thisGame, &thisDeck) == 4)
					{
						thisPlayer.chip += thisGame.bet;
						thisPlayer.push++;
						printf("Push!\n");
					}
				}
				
				game_play(&thisPlayer, &thisDeck, &thisGame);
				if (game_end())
				{
					break;
				}
				continue;
			}
			continue;
		}
	}
	
	return 0;
}
Exemple #5
0
solitaire* solitaire_noname1(mem_context *context, visual_settings *settings) {
	visual_pile *deck, *ace1, *ace2, *ace3, *ace4;
	visual_pile *pile1, *pile2, *pile3, *pile4, *pile5, *pile6, *pile7, *pile8;

	/* The one solitaire instance we have.*/
	solitaire* s = mem_alloc(context, sizeof(solitaire));

	/* This is the internal data representation of this
	 * solitaire. This is a local struct hidden from other
	 * members. */
	internal* i = mem_alloc(context, sizeof(internal));
	s->data = i;
	s->visual = visual_create(context, settings);

	i->deck = pile_create(context, 52);
	deck = visual_pile_create(context, i->deck);
	deck->origin[0] = 0 - (settings->card_width / 2 + settings->card_spacing / 2 + settings->card_width * 2 + settings->card_spacing * 2 + settings->card_width / 2);
	deck->origin[1] = 70.0f;
	deck->rotation = 45.0f;
	deck->action = action_deal(context, s, i);
	visual_add_pile(context, s->visual, deck);

	i->ace[0] = pile_create(context, 13);
	ace1 = visual_pile_create(context, i->ace[0]);
	ace1->origin[0] = settings->card_width / 2 + settings->card_spacing / 2;
	ace1->origin[1] = 70.0f;
	visual_add_pile(context, s->visual, ace1);

	i->ace[1] = pile_create(context, 13);
	ace2 = visual_pile_create(context, i->ace[1]);
	ace2->origin[0] = settings->card_width / 2 + settings->card_spacing / 2 + settings->card_width + settings->card_spacing;
	ace2->origin[1] = 70.0f;
	visual_add_pile(context, s->visual, ace2);

	i->ace[2] = pile_create(context, 13);
	ace3 = visual_pile_create(context, i->ace[2]);
	ace3->origin[0] = settings->card_width / 2 + settings->card_spacing / 2 + settings->card_width * 2 + settings->card_spacing * 2;
	ace3->origin[1] = 70.0f;
	visual_add_pile(context, s->visual, ace3);

	i->ace[3] = pile_create(context, 13);
	ace4 = visual_pile_create(context, i->ace[3]);
	ace4->origin[0] = settings->card_width / 2 + settings->card_spacing / 2 + settings->card_width * 3 + settings->card_spacing * 3;
	ace4->origin[1] = 70.0f;
	visual_add_pile(context, s->visual, ace4);

	i->build[0] = pile_create(context, 52);
	pile1 = visual_pile_create(context, i->build[0]);
	pile1->origin[0] = 0 - (settings->card_width / 2 + settings->card_spacing / 2 + settings->card_width * 3 + settings->card_spacing * 3);
	pile1->translateY = 0 - settings->card_height / 5;
	visual_add_pile(context, s->visual, pile1);

	i->build[1] = pile_create(context, 52);
	pile2 = visual_pile_create(context, i->build[1]);
	pile2->origin[0] = 0 - (settings->card_width / 2 + settings->card_spacing / 2 + settings->card_width * 2 + settings->card_spacing * 2);
	pile2->translateY = 0 - settings->card_height / 5;
	visual_add_pile(context, s->visual, pile2);

	i->build[2] = pile_create(context, 52);
	pile3 = visual_pile_create(context, i->build[2]);
	pile3->origin[0] = 0 - (settings->card_width / 2 + settings->card_spacing / 2 + settings->card_width + settings->card_spacing);
	pile3->translateY = 0 - settings->card_height / 5;
	visual_add_pile(context, s->visual, pile3);

	i->build[3] = pile_create(context, 52);
	pile4 = visual_pile_create(context, i->build[3]);
	pile4->origin[0] = 0 - (settings->card_width / 2 + settings->card_spacing / 2);
	pile4->translateY = 0 - settings->card_height / 5;
	visual_add_pile(context, s->visual, pile4);

	i->build[4] = pile_create(context, 52);
	pile5 = visual_pile_create(context, i->build[4]);
	pile5->origin[0] = settings->card_width / 2 + settings->card_spacing / 2;
	pile5->translateY = 0 - settings->card_height / 5;
	visual_add_pile(context, s->visual, pile5);

	i->build[5] = pile_create(context, 52);
	pile6 = visual_pile_create(context, i->build[5]);
	pile6->origin[0] = settings->card_width / 2 + settings->card_spacing / 2 + settings->card_width + settings->card_spacing;
	pile6->translateY = 0 - settings->card_height / 5;
	visual_add_pile(context, s->visual, pile6);

	i->build[6] = pile_create(context, 52);
	pile7 = visual_pile_create(context, i->build[6]);
	pile7->origin[0] = settings->card_width / 2 + settings->card_spacing / 2 + settings->card_width * 2 + settings->card_spacing * 2;
	pile7->translateY = 0 - settings->card_height / 5;
	visual_add_pile(context, s->visual, pile7);

	i->build[7] = pile_create(context, 52);
	pile8 = visual_pile_create(context, i->build[7]);
	pile8->origin[0] = settings->card_width / 2 + settings->card_spacing / 2 + settings->card_width * 3 + settings->card_spacing * 3;
	pile8->translateY = 0 - settings->card_height / 5;
	visual_add_pile(context, s->visual, pile8);

	card_create_deck(context, i->deck, 1);
	card_shuffle(i->deck);
	visual_sync(s->visual);

	setup_rules(context, s, i);
	return s;
}