8 CARD PATIENCE by Colin Gooch from ZX Computing Aug/Sep.1984 CARD CORNER - PATIENCE II Colin Gooch presents a variation known as 8 Card Patience in part 2 of his series. This is a traditional Patience game, which involves us in quite a lot of intricate programming. This is because we can have up to ten different stacks of cards displayed, plus another one 'in our hand', and we need a separate string for each stack so that we can know where each card is. These stacks have to be moved visually from one place to another. Fairly full rules are given in the programme. Briefly the object is to build four stacks by suit in ascending order, from a further hidden stack and the remainder in our hand. The card presentation is on a five by seven matrix which allows for a reasonable representation of a standard card in two rows of five. For identification purposes each card position is numbered underneath and it is these numbers that you enter to make a move. Also indicated is the base card; ie. the card at the bottom of each stack. Programme operation The fifty two cards are each represented by a string of five characters representing card name, value (2 characters), suit, and colour. These are originally formed in A$ which is then shuffled. After the hidden stack of 13 cards has been formed the remainder becomes P$ and this is manipulated to gradually build up the various stacks by dealing them out three at a time. The cards are not transferred to another string as they are dealt but a variable PSL slices P$ at the correct place. A choice of two deals is available, the second of which is a shuffling deal which gives an easier game. A string array R$ holds the eight possible stacks of played cards and is shadowed by a numerical array R which acts as a slicer for each stack. Also the hidden stack has a slice SLST. Program lines A line by line breakdown of the action is as follows: 1020-1060 Initialises and calls up instructions. 1070-1090 Chooses hidden stack. 1100-1200 Deals out stack face down then removes the first card to top row. 1210-1230 Prints out bottom row of cards then moves on to 1420 which is start of main programme. 1250 Prints a card back 1260-1410 Prints out a card. The position is fixed by a defined function based on the card that has been chosen. 1420-1430 Choose to move a card or to deal. 1490-1530 Subroutine to accept a card move. Will reject an illegal entry. 1540-1560 Chooses appropriate routine from either moving a stack or taking a dealt card. 1570-1580 Reprints a card if entry is at fault 1585-1690 Moves cards one by one from one stack to another. 1700-1770 Checks validity of the destination. If wrong sets FLT flag. If correct prints card at new location. 1780-1800 Removes card from the pack and resets variable holding number of cards. 1810-1830 Removes card from one of the stacks and resets slicer. 1850-1890 Removes card from stack of hidden cards. 1900-2050 Deals the cards. The correct deal will be used as set by DEALTYP. 2060-2150 Sets up and shuffles the pack. 2160 Subroutine called at end of others to continue game. 2170-2260 End game. Called when the RES flag is set by programmer or player resigns. Gives options for continuing. 2270-2630 Instruction routine. It can be a temptation to miss out instructions but it is recommended you enter these for future reference. In any case the lines from 2530 must be included as they set the deal-type. The POKEs seen in this section POKE values directly into the attributes file to highlight certain points. 2640-2690 Initialise values. 2700-2880 Sets up the graphics 9990-9993 SAVEing and LOADing instructions. Variables A$ Complete pack B$ Pictures of suits C$ Card in play D$ Temporary string E$ F$ Components of card K$ Base value for top row T$ Title P$ Pack in play R$(x) Stacks of cards in rows S$ Spare stack Z$ Choice of cards to play COL Colour of card DEALT Cards dealt DEALTYP Type of deal to use ENDP Flag to indicate all cards used FA FD Temporary Flags FLT Flag to indicate faulty input L M Position of cards (face down) B M N P Q FOR-NEXT loops PCD Number of cards in pack PSL Slicer for pack R(x) Slicer for R$ RES Flag to indicate game end STACK Cards in hidden stack SLST Slicer for stack X Y Position of card to be printed Z(x) Card to be played. Derived from Z$ NOTE This program will not fit into a 16K machine. -- Another Fine Product transcribed by: Jim Grimwood (jimg@globalnet.co.uk), Weardale, England --