10 REM SOLTR.ECB 20 REM ...SOLITARE...J. Rickert 10-15-80 30 REM ...Last revised 02-28-81 R.E.H. 40 PRINT "&K&J" 50 LET I$=" " 100 PRINT "SOLITARE REV 1R3&J&J&J" 102 PRINT "WANT RULES ? (Y OR N)"; 110 INPUT (1,0)W$: LET W$=W$+"N" 115 PRINT "&JIs the screen size 12x64? (Y/N)"; 116 INPUT (1,0)U$: LET U$=U$+"Y" 117 IF U$(1,1)="Y" THEN LET U1=0 ELSE LET U1=1 120 IF W$(1,1)="N" THEN 330 130 PRINT "&K" 140 PRINT " THIS IS A GAME OF SOLITARE. TO PLAY, SIMPLY ENTER" 150 PRINT "ONE OF THE COMMANDS ON THE RIGHT OF THE SCREEN AND WAIT" 160 PRINT "FOR A REPLY THEN ENTER THE CO-ORDINATES OF YOUR MOVE." 170 PRINT " THE INPUT IS IN THE FORM OF -> 1,2,4,4 WHERE 1,2 IS" 180 PRINT "THE (ROW),(COL) OF THE CARD TO BE MOVED AND 4,4 IS THE" 190 PRINT "DESTINATION. THE (P) KEY IN MOVES A CARD FROM THE PILE" 200 PRINT "TO THE PLACE YOU WANT IT. THE (L) COMMAND SIMPLY FLIPS" 210 PRINT "OVER ANOTHER CARD ON THE PILE TO LOOK AT. THE (S) OR" 220 PRINT "-STACK MOVE- COMMAND MOVES A WHOLE STACK OF CARDS UNDER" 230 PRINT "THE CARD YOU WANT. DON'T WORRY ABOUT ROWS 10-13 THEY" 240 PRINT "ARE IN MEMORY AND CAN BE REFERENCED LIKE ALL OTHER " 250 PRINT "LOCATIONS AND WILL REMEMBER THE CARD VALUES WHEN MOVED" 260 PRINT " ENTER 'A' AND HIT (RETURN) TO CONTINUE ---=>"; 270 INPUT (1,0)W$ 280 PRINT " TO MOVE FROM STACKS TO 'ACES ROW' SIMPLY DO A 'M' " 290 PRINT "MOVE AND ENTER CO-ORDINATES FROM X,X TO 14,1-4. EXAMPLE:" 300 PRINT " 'M' (RETURN) from WHERE to WHERE? (response) 1,4,14,2 " 310 PRINT " GOOD LUCK! ENTER 'A' AND HIT (RETURN) TO START" 320 INPUT (1,0)W$ 330 REM ...START 340 LET M1=1 350 LET N=1 360 DIM A$(285),B$(156),Q(14,7),X$(156),K(7) 370 LET X$="AH KH QH JH TH 9H 8H 7H 6H 5H 4H 3H 2H " 372 LET X$=X$+"AD KD QD JD TD 9D 8D 7D 6D 5D 4D 3D 2D " 374 LET X$=X$+"AC KC QC JC TC 9C 8C 7C 6C 5C 4C 3C 2C " 376 LET X$=X$+"AS KS QS JS TS 9S 8S 7S 6S 5S 4S 3S 2S " 380 LET A$=X$+X$(1,129): LET B$=X$ 390 LET X=INT(52*RND(0))+1 410 IF X$(3*X-2,3*X)="* " THEN 390 420 LET A$(3*N-2,3*N)=X$(3*X-2,3*X) 430 LET X$(3*X-2,3*X)="* " 440 LET N=N+1 450 IF N=53 THEN 470 460 GOTO 390 470 LET B$=A$ 480 LET X=1 490 FOR D=1 TO 14 500 FOR O=1 TO 7 510 LET Q(D,O)=X 520 LET X=X+1 530 NEXT O 540 NEXT D 550 FOR A=8 TO 95: LET A$(A*3-2,A*3)=" ": NEXT A 560 FOR X=1 TO 7: LET K(X)=X: NEXT X 570 IF I$(1,1)="L" THEN 590 580 GOTO 620 590 PRINT "&K ";%3I;K(1);K(2);K(3);K(4);K(5);K(6);K(7); 600 PRINT " <- Cards left in stacks" 605 PRINT " -1--2--3--4--5--6--7- Cards left in pile ->";24-P 610 GOTO 630 620 PRINT "&K&J" 621 PRINT " -1--2--3--4--5--6--7-" 622 IF I$(1,1)="H" THEN 893 630 PRINT "Row: 1 "; 640 FOR A=1 TO 7: LET Z=Q(1,A): PRINT A$(Z*3-2,Z*3);: NEXT A 650 LET Z=29+M 655 PRINT " TOP OF PILE -> ";B$(Z*3-2,Z*3) 660 PRINT "Row: 2 "; 670 FOR A=1 TO 7: LET Z=Q(2,A): PRINT A$(Z*3-2,Z*3);: NEXT A 680 PRINT " ACES row ->:";A$(92*3-2,92*3);":";A$(93*3-2,93*3); 690 PRINT ":";A$(94*3-2,94*3);":";A$(95*3-2,95*3);": <-" 700 PRINT "Row: 3 "; 710 FOR A=1 TO 7: LET Z=Q(3,A): PRINT A$(Z*3-2,Z*3);: NEXT A 720 PRINT TAB(33);"Row 14: 1 2 3 4" 730 PRINT "Row: 4 "; 740 FOR A=1 TO 7: LET Z=Q(4,A): PRINT A$(Z*3-2,Z*3);: NEXT A 750 PRINT " COMMANDS-> M = Move" 760 PRINT "Row: 5 "; 770 FOR A=1 TO 7: LET Z=Q(5,A): PRINT A$(Z*3-2,Z*3);: NEXT A 780 PRINT " L = Look (pile)" 790 PRINT "Row: 6 "; 800 FOR A=1 TO 7: LET Z=Q(6,A): PRINT A$(Z*3-2,Z*3);: NEXT A 810 PRINT " P = Pile move" 820 PRINT "Row: 7 "; 830 FOR A=1 TO 7: LET Z=Q(7,A): PRINT A$(Z*3-2,Z*3);: NEXT A 840 PRINT " S = Stack move" 850 PRINT "Row: 8 "; 860 FOR A=1 TO 7: LET Z=Q(8,A): PRINT A$(Z*3-2,Z*3);: NEXT A 870 PRINT " H = Rows 10-13 cards" 880 PRINT "Row: 9 "; 890 FOR A=1 TO 7: LET Z=Q(9,A): PRINT " ";A$(Z*3-2,Z*3);: NEXT A 891 IF U1=0 THEN 900: REM ... CHECK FOR U200 OR U100 892 PRINT 893 FOR X=10 TO 13 894 PRINT "Row";X; 895 FOR A=1 TO 7: LET Z=Q(X,A): PRINT A$(Z*3-2,Z*3);: NEXT A 896 IF X=13 THEN EXIT 900 897 PRINT 898 NEXT X 900 PRINT ;" ENTER COMMAND->"; 910 INPUT (1,0)I$: LET I$=I$+" " 920 IF I$(1,1)="S" THEN 1400 930 IF I$(1,1)="M" THEN 1210 940 IF I$(1,1)="P" THEN 1050 950 IF I$(1,1)="L" THEN 1140 960 IF I$(1,1)="C" THEN GOSUB 1541 970 IF I$(1,1)="H" THEN 620 980 IF I$(1,1)="Q" THEN 1550 1040 GOTO 570 1050 REM ...PILE MOVE ENTRY POINT++++ 1060 INPUT "MOVE from PILE to (row),(col) ---=>",R,C 1070 IF R>14 OR C>7 THEN PRINT "INPUT ERROR! "; 1080 IF R>14 OR C>7 THEN 1050 1090 IF R=14 THEN 1120 ELSE LET Z$=A$(Q(R,C)*3-2,Q(R,C)*3) 1100 IF Z$<>" " THEN PRINT "";TAB(31);"THAT SPOT IS FILLED! "; 1110 IF Z$<>" " THEN 1050 1120 LET Z=29+M,A$(Q(R,C)*3-2,Q(R,C)*3)=B$(Z*3-2,Z*3) 1130 LET B$((29+M)*3-2,(29+M)*3)="* ": LET P=P+1 1140 LET M=M+1: REM ...LOOK ENTRY POINT+++++++++ 1150 LET E=E+1: REM ...ADD ONE TO RPT COUNT 1160 LET Z=29+M: IF E=24 THEN LET B$(Z*3-2,Z*3)="OUT" 1170 IF M=24 THEN LET M=0 1180 LET Z=29+M: IF B$(Z*3-2,Z*3)="* " THEN 1140 1190 LET E=0 1200 GOTO 570 1210 REM ...MOVE ENTRY POINT++++++++ 1220 INPUT "MOVE FROM (row),(col), TO (row),(col) ---=>",R,C,R1,C1 1225 IF R1=14 THEN 1270 1230 IF R>14 OR C>7 OR R1>14 OR C1>7 THEN PRINT "INPUT ERROR! "; 1240 IF R>14 OR C>7 OR R1>14 OR C1>7 THEN 1210 1245 LET Z$=A$(Q(R1,C1)*3-2,Q(R1,C1)*3) 1250 IF Z$<>" " THEN PRINT "THAT SEC. LOC. IS FILLED!" 1260 IF Z$<>" " THEN 1210 1270 IF R=1 THEN 1290 1280 IF R>1 THEN 1360 1290 IF K(C)>0 THEN LET K(C)=K(C)-1 1300 IF K(C)>0 THEN LET A$(Q(R1,C1)*3-2,Q(R1,C1)*3)=A$(Q(R,C)*3-2,Q(R,C)*3) 1305 LET Z=7+M1 1310 IF K(C)>0 THEN LET A$(Q(R,C)*3-2,Q(R,C)*3)=B$(Z*3-2,Z*3) 1320 IF K(C)<=0 THEN 1360 1330 LET M1=M1+1 1340 IF I$(1,1)="L" THEN 1490 1350 GOTO 570 1360 LET A$(Q(R1,C1)*3-2,Q(R1,C1)*3)=A$(Q(R,C)*3-2,Q(R,C)*3) 1370 LET A$(Q(R,C)*3-2,Q(R,C)*3)=" " 1380 IF I$(1,1)="L" THEN 1490 1390 GOTO 570 1400 REM ...LONG MOVE ENTRY+++++++ 1410 INPUT "STACK MOVE FROM (row),(col), TO (row),(col) ---=>",R,C,R1,C1 1420 IF R>14 OR C>7 OR R1>14 OR C1>7 THEN PRINT "INPUT ERROR! "; 1430 IF R>14 OR C>7 OR R1>14 OR C1>7 THEN 1400 1435 LET Z$=A$(Q(R1,C1)*3-2,Q(R1,C1)*3) 1440 IF Z$<>" " THEN PRINT "THAT SEC. LOC. IS FILLED! "; 1450 IF Z$<>" " THEN 1400 1460 IF R=1 THEN 1290 1470 LET A$(Q(R1,C1)*3-2,Q(R1,C1)*3)=A$(Q(R,C)*3-2,Q(R,C)*3) 1480 LET A$(Q(R,C)*3-2,Q(R,C)*3)=" " 1490 IF R1=13 THEN 1540 1500 IF R=13 THEN 1540 1510 LET R=R+1 1520 LET R1=R1+1 1530 GOTO 1470 1540 GOTO 570 1541 FOR X=29 TO 52 1542 IF B$(3*X-2,2*X)<>"* " THEN PRINT B$(3*X-2,3*X); 1543 NEXT X 1544 PRINT 1545 RETURN 1550 LET X=0 1560 FOR Y=1 TO 7: LET X=X+K(Y): NEXT Y 1570 IF X=0 THEN PRINT ,"<#> Y O U W O N ! <#>" 1580 END