/* * make_aisleriot_freecell_board.c - Program to generate a GNOME Aisleriot * Freecell board for input to Freecell Solver. * * Usage: make-aisleriot-frecell-board [board number] | fc-solve * * Note: this program uses srandom() and random() so it generates different * boards on different systems. If you want it to generate the board * you are playing, make sure it uses the same libc as the computer on * which you run GNOME Aisleriot. * * Written by Shlomi Fish, 2000 * * This code is under the public domain. * * */ #include #include #include #include #define make_card(value, suit ) (((value)<<8)+(suit)) #define get_suit(card) ((card)&0xFF) #define get_value(card) ((card)>>8) #ifdef WIN32 #define random() (rand()) #define srandom(a) (srand(a)) #endif int deck[52]; void make_standard_deck(int start_value) { int suit, value, card_num; card_num = 0; for(suit=0;suit<4;suit++) { for(value=start_value;value<=13;value++) { deck[card_num] = make_card(value,suit); card_num++; } } } void shuffle_deck(int len) { int ref1, ref2; int temp_card; for(ref1=0 ; ref1=52-8), print_ts)); } for (i = 0; i < 8; i++) { printf("%s\n", output[i]); } } else if (which_game == GAME_EIGHT_OFF) { /* Freecell */ for (i = 0; i < 8; i++) { output[i][0] = '\0'; } for (i = 0; i < 48; i++) { strcat(output[i % 8], card_to_string( card_string, deck[i], (i>=48-8), print_ts)); } freecells[0] = '\0'; for ( ; i < 52 ; i++) { strcat(freecells, card_to_string( card_string, deck[i], (i == 52-1), print_ts)); } printf("FC: %s\n", freecells); for (i = 0; i < 8; i++) { printf("%s\n", output[i]); } } else if (which_game == GAME_SEAHAVEN) { /* Seahaven Towers */ for( i = 0 ; i < 10 ; i++) { output[i][0] = '\0'; } for( i = 0 ; i < 50 ; i++) { strcat(output[i % 10], card_to_string(card_string, deck[i], (i>=50-10), print_ts)); } strcpy(freecells, "FC: - "); for ( ; i < 52 ; i++) { strcat(freecells, card_to_string(card_string, deck[i], (i == 52-1), print_ts)); } printf("%s\n", freecells); for( i = 0 ; i < 10 ; i++) { printf("%s\n", output[i]); } } else if (which_game == GAME_BELEAGUERED_CASTLE) { for (i = 0; i < 8; i++) { output[i][0] = '\0'; } #define index_prog_to_pysol(i) ((((i)%2) == 1)*4 + ((i/2)%4)) for (i = 0; i < 48; i++) { strcat(output[index_prog_to_pysol(i % 8)], card_to_string( card_string, deck[i], (i>=48-8), print_ts)); } #undef index_prog_to_pysol printf("Foundations: H-A C-A D-A S-A\n"); for (i = 0; i < 8; i++) { printf("%s\n", output[i]); } } else if (which_game == GAME_STREETS_AND_ALLEYS) { for (i = 0; i < 8; i++) { output[i][0] = '\0'; } #define index_prog_to_pysol(i) ((((i)%2) == 1)*4 + ((i/2)%4)) for (i = 0; i < 48; i++) { strcat(output[index_prog_to_pysol(i % 8)], card_to_string( card_string, deck[i], (i>=48-8), print_ts)); } #undef index_prog_to_pysol for(;i<52;i++) { strcat(output[(i%8)], " "); strcat(output[(i%8)], card_to_string(card_string, deck[i], 1, print_ts)); } for (i = 0; i < 8; i++) { printf("%s\n", output[i]); } } return 0; }