PATIENCE V - PAIRS

by Colin Gooch

from ZX Computing Apr/May.1985



CN Gooch presents the fifth in his mind stretching

series on popular card pastimes of Somerset.





This is a Patience game in which you are required to collect

pairs of cards of the same value, irrespective of suit, from

a grid of five by three cards. To take a pair they must be

touching, vertically, horizontally or diagonally. Each card

on the screen is referenced by a letter and you input those

letters to make a move. Full rules are given in the program.



In this presentation I have not attempted to simulate a

normal playing card. The display size restricts the card

dimensions too much for a good representation. In any case

as the suits in this game are not used I have opted for a

large numerical display of each card.





Program operation



The pack of cards to use is held in a string P$ and cards

are transferred to the hand in play on the screen,

represented by H$. When you input a move the program checks

to see that this is a valid move, removes the two cards from

H$, adds two new cards from P$, clears the display and

reprints the new hand. Illegal moves will not be allowed.





Line to line



1020       Defines functions which work out the positions of [a] card.

1030       Sets CAPS SHIFT.

1040       Calls initialisation instruction and pack set up

           subroutines.

1050-1060  Sets up initial hand and screen display.

1070-1080  Control loop.

1100-1130  Prints out the reference letters and the hand of cards.

           The card printing loop runs from Z1 which is the position

           of the first deleted card. PSL is a slicing variable which

           keeps track of the card in the pack.

1140-1180  Prints out a card. The value of the card is added to 9100

           to give a RESTORE DATA value. This gives five values which

           print out the card from N$.

1200-1370  This subroutine accepts your input and checks that it is

           legal. Line 1240 ensures that whatever card is entered

           first, the order is earliest card first. The check can then

           be made that the cards are either 6, 5, 4 or 1 places apart.

1380-1470  Sets up the pack and shuffles it. Each card is five

           elements long: Name, value (2), suit and colour.

1480       Continuity.

1480-1570  End game routine.

1580-1680  Instructions.

1690-2040  Sets up N$(x) which contains all of the graphics to

           set up the cards.

2200-2220  Sets up graphics.

2230-2400  Data for graphics.

9101-9113  Data to print cards. It is essential that these line

           numbers are used as the program calls them directly.

9990-9993  Save routine. Program must be saved to auto-start at 2200

           or graphics will not form.





Variables used



A       counting variable

COL     colour of card

DIF     relative position of cards to be moved

M,N,P,Q loops

PSL     pack slicer

RES     flag set to indicate game end resignation

X,Y     location of card

Z(x)    card reference value, derived from Z$

A$      assembling pack

B$      suit

C$      card in play

D$      temporary string

H$      hand in play

P$      shuffled pack

Z$      input





Memory



Although the program is not exceptionally long it uses quite

a lot of RAM as it shuffles the strings around and will not

run on the 16K machine.





--

Another Fine Product transcribed by:

Jim Grimwood (jimg@globalnet.co.uk), Weardale, England

--

