int main( int argc, char **argv ) { char cardline[80]; if ( argc > 1 ) { while ( --argc ) printcard( *++argv ); } else while ( fgets( cardline, sizeof( cardline ), stdin ) ) printcard( cardline ); exit( 0 ); }
static void movecard(int src, int dst) { grid[dst]=grid[src]; grid[src]=NOCARD; move( BASEROW + (dst / GRID_WIDTH)*2+2, (dst % GRID_WIDTH)*5 + 1); printcard(grid[dst]); move( BASEROW + (src / GRID_WIDTH)*2+2, (src % GRID_WIDTH)*5 + 1); printcard(grid[src]); refresh(); }
static void display_cards(int deal) { int row, card; clear(); (void) printw( "Blue Moon 2.1 - by Tim Lister & Eric Raymond - Deal %d.\n", deal); for (row = HEARTS; row <= CLUBS; row++) { move(BASEROW + row + row + 2, 1); for (card = 0; card < GRID_WIDTH; card++) printcard(grid[row * GRID_WIDTH + card]); } move(PROMPTROW + 2, 0); refresh(); #define P(x) (void)printw("%s\n", x) P(" This 52-card solitaire starts with the entire deck shuffled and dealt"); P("out in four rows. The aces are then moved to the left end of the layout,"); P("making 4 initial free spaces. You may move to a space only the card that"); P("matches the left neighbor in suit, and is one greater in rank. Kings are"); P("high, so no cards may be placed to their right (they create dead spaces)."); P(" When no moves can be made, cards still out of sequence are reshuffled"); P("and dealt face up after the ends of the partial sequences, leaving a card"); P("space after each sequence, so that each row looks like a partial sequence"); P("followed by a space, followed by enough cards to make a row of 14. "); P(" A moment's reflection will show that this game cannot take more than 13"); P("deals. A good score is 1-3 deals, 4-7 is average, 8 or more is poor. "); #undef P refresh(); }
int main(int argc, char **argv) { char cardline[80]; /* * The original bcd prompts with a "%" when reading from stdin, * but this seems kind of silly. So this one doesn't. */ if (argc > 1) { while (--argc) printcard(*++argv); } else while (fgets(cardline, sizeof(cardline), stdin)) printcard(cardline); exit(0); }
void ClockSolver::print_layout() { int i, w, o; fprintf(stderr, "print-layout-begin\n"); for (w = 0; w < 8; ++w) { fprintf( stderr, "Play%d: ", w ); for (i = 0; i < Wlen[w]; ++i) { printcard(W[w][i], stderr); } fputc('\n', stderr); } fprintf( stderr, "Off: " ); for (o = 0; o < 12; ++o) { printcard(W[8][o], stderr); } fprintf(stderr, "\nprint-layout-end\n"); }
void YukonSolver::print_layout() { int i, w, o; fprintf(stderr, "print-layout-begin\n"); for (w = 0; w < 7; w++) { fprintf( stderr, "Play%d: ", w ); for (i = 0; i < Wlen[w]; i++) { printcard(W[w][i], stderr); } fputc('\n', stderr); } fprintf( stderr, "Off: " ); for (o = 0; o < 4; o++) { printcard(O[o] + Osuit[o], stderr); } fprintf(stderr, "\nprint-layout-end\n"); }
/* * prhand: * Print a hand of n cards */ void prhand(CARD h[], int n, WINDOW *win, bool blank) { int i; werase(win); for (i = 0; i < n; i++) printcard(win, i, *h++, blank); wrefresh(win); }
void Mod3Solver::print_layout() { int i, w = 0, o; fprintf(stderr, "print-layout-begin\n"); for ( int row = 0; row < 3; ++row ) { fprintf( stderr, "Row%d: ", row ); for (int col = 0; col < 8; col++) { if ( Wlen[w] ) printcard(*Wp[w], stderr); else fprintf( stderr, " " ); fprintf( stderr, "(%02d) ", w ); w++; } fputc('\n', stderr); } for (int col = 0; col < 8; col++) { fprintf( stderr, "Play%02d: ", w ); for (i = 0; i < Wlen[w]; ++i) { printcard(W[w][i], stderr); } fputc('\n', stderr); w++; } fprintf( stderr, "Aces: " ); for (o = 0; o < Wlen[aces]; ++o) { printcard(W[aces][o], stderr); } fputc( '\n', stderr ); fprintf( stderr, "Deck: " ); for (o = 0; o < Wlen[deck]; ++o) { printcard(W[deck][o], stderr); } fprintf(stderr, "\nprint-layout-end\n"); }
/* * prhand: * Print a hand of n cards */ void prhand(const CARD h[], unsigned n, WINDOW *win, BOOLEAN blank) { unsigned i; werase(win); for (i = 0; i < n; i++) printcard(win, i, *h++, blank); wrefresh(win); }
void SimonSolver::print_layout() { int i, w, o; fprintf(stderr, "print-layout-begin\n"); for (w = 0; w < 10; ++w) { Q_ASSERT( Wp[w] == &W[w][Wlen[w]-1] ); fprintf( stderr, "Play%d: ", w ); for (i = 0; i < Wlen[w]; ++i) { printcard(W[w][i], stderr); } fputc('\n', stderr); } fprintf( stderr, "Off: " ); for (o = 0; o < 4; ++o) { if ( O[o] != -1 ) printcard( O[o] + PS_KING, stderr); } fprintf(stderr, "\nprint-layout-end\n"); }
void FreecellSolver::print_layout() { int i, t, w, o; fprintf(stderr, "print-layout-begin\n"); for (w = 0; w < Nwpiles; ++w) { fprintf(stderr, "W-Pile%d: ", w); for (i = 0; i < Wlen[w]; ++i) { printcard(W[w][i], stderr); } fputc('\n', stderr); } for (t = 0; t < Ntpiles; ++t) { fprintf(stderr, "T-Pile%d: ", t+Nwpiles); printcard(W[t+Nwpiles][Wlen[t+Nwpiles]], stderr); } fprintf( stderr, "\n" ); for (o = 0; o < 4; ++o) { printcard(O[o] + Osuit[o], stderr); } fprintf(stderr, "\nprint-layout-end\n"); }
void KlondikeSolver::print_layout() { int i, w, o; fprintf(stderr, "print-layout-begin\n"); for (w = 0; w < 9; ++w) { if ( w == 8 ) fprintf( stderr, "Deck: " ); else if ( w == 7 ) fprintf( stderr, "Pile: " ); else fprintf( stderr, "Play%d: ", w ); for (i = 0; i < Wlen[w]; ++i) { printcard(W[w][i], stderr); } fputc('\n', stderr); } fprintf( stderr, "Off: " ); for (o = 0; o < 4; ++o) { printcard(O[o] + Osuit[o], stderr); } fprintf(stderr, "\nprint-layout-end\n"); }
void GypsySolver::print_layout() { int i, w, o; fprintf(stderr, "print-layout-begin\n"); for (w = 0; w < 8; ++w) { fprintf( stderr, "Play%d: ", w ); for (i = 0; i < Wlen[w]; ++i) { printcard(W[w][i], stderr); } fputc('\n', stderr); } fprintf( stderr, "Off: " ); for (o = 0; o < 8; ++o) { if ( Wlen[outs + o] ) printcard( *Wp[outs + o], stderr); } fprintf( stderr, "\nDeck: " ); for (i = 0; i < Wlen[deck]; ++i) printcard(W[deck][i], stderr); fprintf(stderr, "\nprint-layout-end\n"); return; }
void GolfSolver::print_layout() { fprintf(stderr, "print-layout-begin\n"); for (int w = 0; w < 9; w++) { if ( w == 8 ) fprintf( stderr, "Deck: " ); else if ( w == 7 ) fprintf( stderr, "Pile: " ); else fprintf( stderr, "Play%d: ", w ); for (int i = 0; i < Wlen[w]; i++) { printcard(W[w][i], stderr); } fputc('\n', stderr); } fprintf(stderr, "print-layout-end\n"); }
void IdiotSolver::print_layout() { int i, w; fprintf(stderr, "print-layout-begin\n"); for (w = 0; w < 6; w++) { if ( w == 4 ) fprintf( stderr, "Deck: " ); else if ( w == 5 ) fprintf( stderr, "Away: " ); else fprintf( stderr, "Play%d: ", w ); for (i = 0; i < Wlen[w]; i++) { printcard(W[w][i], stderr); } fputc('\n', stderr); } fprintf(stderr, "\nprint-layout-end\n"); }
int YukonSolver::get_possible_moves(int *a, int *numout) { int w, o, empty; card_t card; MOVE *mp; /* Check for moves from W to O. */ int n = 0; mp = Possible; for (w = 0; w < 7; w++) { if (Wlen[w] > 0) { card = *Wp[w]; o = SUIT(card); empty = (O[o] == NONE); if ((empty && (RANK(card) == PS_ACE)) || (!empty && (RANK(card) == O[o] + 1))) { mp->card_index = 0; mp->from = w; mp->to = o; mp->totype = O_Type; mp->pri = 3; /* unused */ mp->turn_index = -1; if ( Wlen[w] > 1 && DOWN( W[w][Wlen[w]-2] ) ) mp->turn_index = 1; n++; mp++; /* If it's an automove, just do it. */ if (good_automove(o, RANK(card))) { *a = true; mp[-1].pri = 127; if (n != 1) { Possible[0] = mp[-1]; return 1; } return n; } } } } /* No more automoves, but remember if there were any moves out. */ *a = false; *numout = n; for(int i=0; i<7; i++) { int len = Wlen[i]; for (int l=0; l < len; ++l ) { card_t card = W[i][Wlen[i]-1-l]; if ( DOWN( card ) ) break; for (int j = 0; j < 7; j++) { if (i == j) continue; int allowed = 0; if ( Wlen[j] > 0 && RANK(card) == RANK(*Wp[j]) - 1 && suitable( card, *Wp[j] ) ) { allowed = 1; if ( Wlen[i] == l + 1 ) { allowed = 2; } else { if ( DOWN( W[i][Wlen[i]-l-2] ) ) allowed = 3; } } if ( RANK( card ) == PS_KING && Wlen[j] == 0 ) { if ( l != Wlen[i]-1 || i == 7 ) allowed = 4; } // TODO: there is no point in moving if we're not opening anything // e.g. if both i and j have perfect runs below the cards #if 0 fprintf( stderr, "%d %d %d\n", i, l, j ); printcard( card, stderr ); printcard( *Wp[j], stderr ); fprintf( stderr, " allowed %d\n",allowed ); #endif if ( allowed ) { mp->card_index = l; mp->from = i; mp->to = j; mp->totype = W_Type; mp->turn_index = -1; if ( Wlen[i] > l+1 && DOWN( W[i][Wlen[i]-l-2] ) ) mp->turn_index = 1; if ( mp->turn_index > 0 || Wlen[i] == l+1) mp->pri = 30; else mp->pri = 1; n++; mp++; } } } } return n; }