char * get_board(int gamenumber)
{

    CARD    card[MAXCOL][MAXPOS];    /* current layout of cards, CARDs are ints */

    int  i, j;                /*  generic counters */
    int  wLeft = 52;          /*  cards left to be chosen in shuffle */
    CARD deck[52];            /* deck of 52 unique cards */
    char * ret;

    microsoft_rand_t * randomizer;


    ret = malloc(1024);
    ret[0] = '\0';

    /* shuffle cards */

    for (i = 0; i < 52; i++)      /* put unique card in each deck loc. */
    {
        deck[i] = i;
    }

    randomizer = microsoft_rand_alloc(gamenumber);            /* gamenumber is seed for rand() */
    for (i = 0; i < 52; i++)
    {
        j = microsoft_rand_rand(randomizer) % wLeft;
        card[(i%8)+1][i/8] = deck[j];
        deck[j] = deck[--wLeft];
    }

    microsoft_rand_free(randomizer);


    {
        int stack;
        int c;

        char card_string[10];

        for(stack=1 ; stack<9 ; stack++ )
        {
            for(c=0 ; c < (6+(stack<5)) ; c++)
            {
                sprintf(ret+strlen(ret), "%s",
                    card_to_string(
                        card_string,
                        card[stack][c],
                        (c == (6+(stack<5)))
                    )
                );
            }
            sprintf(ret+strlen(ret), "%s", "\n");
        }
    }

    return ret;
}
Exemplo n.º 2
0
void
test_card_to_string(void)
{
  cut_set_message("カードを文字列にする");
  {
    Card sa = card_new(SPADE,ACE);

    cut_assert(strcmp(card_to_string(sa), "SA")==0);
  }
}
Exemplo n.º 3
0
Arquivo: gp.c Projeto: huangtao/qipai
int gp_play(gp_t* gp, int player_no, card_t* cards, int len)
{
    int i,valid_num;
    hand_type htype;
    card_t* card;

    if (!cards || len <= 0)
        return -1;

    if (gp->game_state != GP_GAME_PLAY) {
        if (gp->debug)
            printf("play cards but game state not play.\n");
        return -2;
    }
    if (player_no != gp->curr_player_no) {
        if (gp->debug)
            printf("play cards but not this no.\n");
        return -3;
    }
    valid_num = cards_num(cards, len);
    if (valid_num == 0) {
        if (gp->debug)
            printf("play zero cards.\n");
        return -4;
    }

    if (gp->mode == GP_MODE_SERVER) {
        for (i = 0; i < valid_num; ++i){
            card = cards + i;
            if (!cards_have(gp->players[player_no].cards, GP_MAX_CARDS, card)) {
                if (gp->debug) {
                    printf("play cards but player hasn't this card(%s).\n",
                           card_to_string(card));
                }
                return -5;
            }
        }
    }

    gp_handtype(gp, cards, len, &htype);

    if (gp->mode == GP_MODE_SERVER) {
        /* can play out these cards */
        if (gp->largest_player_no != player_no) {
            if (!gp_canplay(gp, cards, len)){
                if (gp->debug)
                    printf("cann't play these cards(smaller).\n");
                return -6;
            }
        }
    }

    /* player play these cards */
    memset(gp->last_hand, 0, sizeof(card_t) * GP_MAX_CARDS);
    for (i = 0; i < valid_num; ++i) {
        card = cards + i;
        cards_del(gp->players[player_no].cards, GP_MAX_CARDS, card);
        cards_add(gp->last_hand, GP_MAX_CARDS, card);
    }
    memcpy(&gp->last_hand_type, &htype, sizeof(hand_type));
    memcpy(gp->players[player_no].cards_played, gp->last_hand,
           sizeof(card_t) * GP_MAX_CARDS);
	cards_sort(gp->players[player_no].cards_played, GP_MAX_CARDS);
		   
    gp->largest_player_no = player_no;
    cards_trim(gp->players[player_no].cards, GP_MAX_CARDS);
    if (cards_num(gp->players[player_no].cards, GP_MAX_CARDS))
        gp_next_player(gp);
    else {
        if (gp->mode == GP_MODE_SERVER)
            gp->game_state = GP_GAME_END;
    }

    return 1;
}
int main(int argc, char * argv[])
{

    CARD    card[MAXCOL][MAXPOS];    /* current layout of cards, CARDs are ints */

    int  i, j;                /*  generic counters */
    int  wLeft = 52;          /*  cards left to be chosen in shuffle */
    CARD deck[52];            /* deck of 52 unique cards */
    int gamenumber;
    int print_ts = 0;
    int arg;

    if (argc == 1)
    {
        gamenumber = time(NULL);
    }
    else
    {
        arg = 1;
        if (!strcmp(argv[arg], "-t"))
        {
            print_ts = 1;
            arg++;
        }
        gamenumber = atoi(argv[arg]);
    }

    /* shuffle cards */

    for (i = 0; i < 52; i++)      /* put unique card in each deck loc. */
        deck[i] = i;

    srand(gamenumber);            /* gamenumber is seed for rand() */
    for (i = 0; i < 52; i++)
    {
        j = rand() % wLeft;
        card[(i%8)+1][i/8] = deck[j];
        deck[j] = deck[--wLeft];
    }
    
    {
        int stack;
        int c;

        char card_string[10];

        for(stack=1 ; stack<9 ; stack++ )
        {
            for(c=0 ; c < (6+(stack<5)) ; c++)
            {
                printf("%s", 
                    card_to_string(card_string, 
                            card[stack][c], 
                            (c == (6+(stack<5))),
                            print_ts
                    )
                );        
            }
            printf("%s", "\n");
        }
    } 

    return 0;
}
int main(int argc, char * argv[])
{
    integer64 game_num;
    card_t cards[NUM_CARDS], orig_cards[NUM_CARDS];
    pysol_random_context r;
    char output[NUM_STACKS][30];
    char card_string[10];
    int i;

    if (argc == 1)
    {
    	game_num = time(NULL);
    }
    else
    {
    	char * s;

    	game_num = 0;
    	s = argv[1];
    	while (((*s) >= '0') && ((*s) <= '9'))
    	{
    	    game_num = game_num*10+(*s-'0');
    	    s++;
    	}
    }

    pysol_create_cards(orig_cards);

    if (game_num <= 32000)
    {
    	int fcards[NUM_CARDS];
    	int j_pos[4] = {0,39,26,13};
    	int pos,j;

    	r.seed = game_num;
    	r.random = pysol_random31;
    	r.randint = pysol_random31_randint;

    	pos = 0;
    	for(i=0;i<13;i++)
    	{
    	    for(j=0;j<4;j++)
    	    {
        		fcards[pos] = orig_cards[i+j_pos[j]];
        		pos++;
    	    }
    	}
    	for(i=0;i<NUM_CARDS;i++)
    	{
    	    orig_cards[i] = fcards[i];
    	}
    	pysol_shuffle(&r, orig_cards, NUM_CARDS);
    }
    else
    {
    	r.seed = game_num;
    	r.random = pysol_random64;
    	r.randint = pysol_random64_randint;

    	pysol_shuffle(&r, orig_cards, NUM_CARDS);
    }

    for(i=0;i<NUM_CARDS;i++)
    {
    	cards[i] = orig_cards[NUM_CARDS-i-1];
    }

    for (i = 0; i < NUM_STACKS; i++) {
        output[i][0] = '\0';
    }

    for (i = 0; i < NUM_CARDS; i++) {
        strcat(output[i % NUM_STACKS],
            card_to_string(card_string,
                cards[i],
                (i>=NUM_CARDS-NUM_STACKS)
            )
        );
    }

    for (i = 0; i < NUM_STACKS; i++) {
        printf("%s\n", output[i]);
    }

    return 0;
}
Exemplo n.º 6
0
char * fc_solve_fc_pro_position_to_string(Position * pos, int num_freecells)
{
    int a, stack;
    char buffer[4000], temp[4][20];
    char * s_end;

    buffer[0] = '\0';
    s_end = buffer;
    
    for(a=0;a<4;a++)
    {
        if (pos->foundations[a] != 0)
        {
            break;
        }
    }
    if (a < 4)
    {
        s_end += sprintf(s_end, "Foundations:");
        for(a=0;a<4;a++)
        {
            if (pos->foundations[a] != 0)
            {
                s_end += sprintf(
                    s_end, 
                    " %s-%s", 
                    suit_to_string(a, temp[0]),
                    rank_to_string(pos->foundations[a], temp[1])
                    );
            }
        }
        *s_end = '\n';
        s_end++;
    }
    s_end += sprintf(s_end, "Freecells:");
    for(a=0;a<num_freecells;a++)
    {
        if (pos->hold[a] == 0)
        {
            s_end += sprintf(s_end, " -");
        }
        else
        {
            s_end += sprintf(s_end, " %s", card_to_string(pos->hold[a], temp[0]));
        }
    }
    *s_end = '\n';
    s_end++;

    for(stack=0;stack<8;stack++)
    {
        for(a=0;a<pos->tableau[stack].count;a++)
        {
            s_end += 
                sprintf(
                    s_end, 
                    "%s%s", 
                    ((a == 0)? "" : " "),
                    card_to_string(pos->tableau[stack].cards[a], temp[0])
                );                                
        }
        *s_end = '\n';
        s_end++;
    }
    *s_end = '\0';

    return strdup(buffer);
}