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; }
void test_card_to_string(void) { cut_set_message("カードを文字列にする"); { Card sa = card_new(SPADE,ACE); cut_assert(strcmp(card_to_string(sa), "SA")==0); } }
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; }
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); }