00010 REM HEARTS PLAYING PROGRAM 00020 LET V9$=" 2-Feb-78" 00030 REM JOHN COMEAU DONE IT 00040 REM THIS PROGRAM IS A MONSTER. MANY MANY BELLS, AND QUITE A FEW WHISTLES. 00050 REM NOTE THE DE-CAPITALIZATION OF THE NAME YOU INPUT. 00060 REM IT PLAYS HEARTS WELL ENOUGH SO THAT I REALLY ENJOY PLAYING AGAINST 00070 REM IT MYSELF. I USUALLY WIN, BUT IT PUTS UP A GOOD FIGHT. 00080 REM THERE ARE A BUNCH OF CALCULATIONS THAT THE PROGRAM MAKES THAT ARE 00090 REM UNDER UTILIZED, SUCH AS THE PROBABILITIES OF VOIDS. 00100 REM IMPROVEMENTS ARE NOT TOO HARD TO ENVISION, AND REMARKS AT THE END OF 00110 REM THE PROGRAM SHOW SOME GAMES TO PLAY TO SHOW UP SOME OF THE PROGRAMS 00120 REM WEAK SPOTS. ANOTHER REASON THAT THIS PROGRAM IS FUN TO PLAY AGAINST 00130 REM IS THE CURSOR CONTROL STUFF, AND DISPLAY OF THE GAME AND PLAY. 00140 REM IT IS THE BEST I HAVE EVER SEEN FOR A GAME OF THIS TYPE 00150 00160 REM THE FOLLOWING DATA CAN BE ACCESSED BY ALL 4 PLAYERS 00170 REM THE O ARRAY TELLS WHICH SUITS A PLAYER HAS FAILED TO FOLOW 00180 REM THE 1ST DIMENSION IF SUIT #, THE SECOND IS PLAYER # 00190 REM ELEMENT IS 1 IF SUIT WAS FOLLOEWD, 0 IF NOT. 00200 DIM O(4,4) 00210 00220 REM THE L ARRAY TELLS WHICH SUITS A PLAYER HAS LEAD 00230 REM THE 1ST DIMENSION IS THE PLAYER #, THE 2ND IS THE SUIT # 00240 REM THE VALUE OF THE ELEMENT = THE NUMBER OF TIMES THE PLAYER HAS LEAD THAT SUIT 00250 DIM L(4,4) 00260 00270 REM THE D ARRAY IS SIMPLY THE DECK USED FOR DEALING. 00280 REM 0 ELEMENTS ARE CARDS ALREADY DEALT, 1 ELEMENTS ARE CARDS STILL IN THE DECK 00290 DIM D(52) 00300 00310 REM THE U ARRAY TELLS WHICH CARDS HAVE ALREADY BEEN USED IN THE 00320 REM COURSE OF PLAY. THE 1ST DINEMSION IS THE SUIT # 00330 REM THE SECOND ELEMENT IS THE CARD # 00340 REM A 0 ELEMENT REPRESENTS A CARD AS YET UNPLAYED 00350 REM A NON-0 ELEMENT EQUALS THE TRICK# ON WHICH THE CARD WAS PLAYED 00360 REM THE 0 DIMENSION TELLS HOW MANY CARDS IN THAT SUIT HAVE BEEN PLAYED 00370 REM THE 14 DIMENSION TELLS HOW MANY TIMES THAT SUIT HAS BEEN LEAD 00380 DIM U(4,14) 00390 00400 REM THE S ARRAY IS FOR STORING THE SCORE IN 00410 REM THE FIRST DIMENSION REPRESENTS PLAYER #, THE SECOND REPRESENTS 00420 REM WHERE THE POINTS ARE 00430 REM 1 FOR POINTS ON SCOREBOARD, 2 FOR POINTS SO FAR THIS HAND 00440 DIM S(4,2) 00450 00460 REM THE FOLLOWING DATA CAN ONLY BE SEEN BY THE PLAYER 00470 REM HAND ARRAY IS H 00480 DIM H(4,13) 00490 00500 REM A1 IS QUEEN PROBABILITY ARRAY 00510 DIM A1(4) 00520 REM ANANLSIS ARRAY 00530 DIM A(4,13) 00540 00550 REM P IS THE PASS ARRAY 00560 DIM P(4,7) 00570 00580 REM W ARRAY IS FOR SUIT ANALISIS 00590 DIM W(4,9) 00600 00610 REM N IS THE NAME ARRAY 00620 DIM N$(4) 00630 REM F IF A TEXT UNPACKING ARRAY 00640 DIM F(40) 00650 00660 REM THE G ARRAY TELS ABOUT A TRICK 00670 REM 1ST DIMENSION =TRICK # 00680 REM 2ND DIMENSION 0= WINNER 00690 REM 1-4 = CARD PLAYED BY PLAYER 00700 REM 5 = PLAYER # OF LEADER 00710 REM 6 = SUIT LED 00720 REM 7 = RANK OF WINNING CARD 00730 DIM G(13,7) 00740 00750 REM A2 IS THE VOID PROBABILITY ARRAY 00760 REM 1ST DIMENSION IS THE SUIT # 00770 REM 2ND DIMENSION IS THE PERSON # 00780 DIM A2(5,4) 00790 00800 REM A3 ARRAY HAS QS CHANCES OF FOLLOWERS 00810 REM 1ST DIMENSION=SUIT # 00820 REM 2ND DIMENSION.... 00830 REM A3(?,0)=CHANCE OF A FOLLOWER HAVING THE QS 00840 REM A3(?,1)=CHANCE OF A FOLLOWER BEING ABLE TO SLUFF QS 00850 REM A3(?,2)=AVERAGE # OF CARDS TO FOLLOW SUIT 00860 DIM A3(4,2) 00870 00880 REM N1() IS THE CURSOR CONTROL ARRAY 00890 DIM N1(4,4) 00900 00910 DEF FNA(X)=W(X,2)/(O(X,0)-1) 00920 DEF FNS(X)=INT((X-1)/13)+1 00930 DEF FNR(X)=X-(INT((X-1)/13)*13) 00940 DEF FNI(X)=(X+1)-(INT((X+1)/5)*4) 00950 DEF FNO(X)=((W(X,2)/(O(X,0)-O(X,Z)))*(1+(((O(X,0)-O(X,Z))-1)*.22))) 00960 00970 REM FIRST THING TO DO IS TO MAKE SURE THE DECK HAS 52 CARDS 00980 FOR X=1 TO 52 00990 LET D(X)=X 01000 NEXT X 01010 01020 REM INITIALIZE FILES AND SCREEN 01030 PRINT "Use a VT52 for maximum comfort and pleasure." 01040 PRINT CHR$(27);CHR$(72);CHR$(27);CHR$(74) 01050 GOSUB 14750 01060 PRINT "Hearts playing program." 01070 PRINT "Last revision was ";V9$ 01080 PRINT "What is your name"; 01090 INPUT N$(0) 01100 PRINT CHR$(27);CHR$(72);CHR$(27);CHR$(74) 01110 REM DECAPITALIZE PLAYER NAME 01120 LET N$(0)=" "+N$(0)+" " 'ADD A SPACE TO BEGINING AND END OF THE NAME 01130 CHANGE N$(0) TO F 01140 FOR X=1 TO F(0) 01150 IF ABS(F(X)-109)>13 THEN 1170 01160 LET F(X)=F(X)-32 'CAPITALIZE 01170 NEXT X 01180 FOR X=2 TO F(0) 01190 IF X<4 THEN 1230 01200 IF F(X-3)<>32 THEN 1230'NOT SPACE 01210 IF F(X-2)<>77 THEN 1230 01220 IF F(X-1)=99 THEN 1270'NAME WITH A "Mc" at begining 01230 IF F(X-1)<48 THEN 1270 01240 IF F(X)>90 THEN 1270 01250 IF F(X)<65 THEN 1270 01260 LET F(X)=F(X)+32 'CHANGE TO LOWER CASE 01270 NEXT X 01280 CHANGE F TO N$(0) 01290 LET N$(0)=RIGHT$(N$(0),F(0)-1) 01300 REM READ PLAYER NAME DATA 01310 FOR X=1 TO 4 01320 READ N$(X) 01330 NEXT X 01340 LET N$(3)=N$(0) 01350 IF N$(0)="Debug" THEN 1380 01360 RANDOM 'NOT IN DEBUG MODE 01370 GOTO 1480 01380 FILE #2,"DUMP.LPT" 'SPECIFY A FILE FOR DEBUG DUMP 01390 SCRATCH #2 'PUT THE FILE INTO WRITE MODE 01400 PRINT CHR$(27);CHR$(72);CHR$(27);CHR$(74) 01410 GOSUB 14750' POSITION FOR A QUESTION 01420 PRINT "What game number do you want to play"; 01430 INPUT X 01440 LET X=ABS(INT(X-.5)) 01450 FOR X=X TO 1 STEP -1 01460 GOSUB 4320'SHUFFLE 01470 NEXT X 01480 01490 REM READ IN CURSOR STUFF 01500 FOR Z=1 TO 4 01510 FOR Z1=1 TO 4 01520 READ N1(Z,Z1) 01530 LET N1(Z,Z1)=N1(Z,Z1)+32 01540 NEXT Z1 01550 NEXT Z 01560 01570 REM PUT THE NAMES ON THE SCREEN 01580 FOR Z=1 TO 4 01590 PRINT CHR$(27);CHR$(89);CHR$(N1(Z,1));CHR$(N1(Z,2));N$(Z) 01600 NEXT Z 01610 LET G(0,0)=((G9/4)-INT(G9/4))*4 01620 LET G(0,0)=FNI(G(0,0)) 01630 GOSUB 4310'SHUFFLE 01640 GOSUB 4490'DEAL 01650 FOR Z=0 TO 4 01660 LET S(Z,2)=0 01670 NEXT Z 01680 LET Q=0 01690 LET Q9=0 01700 LET Z=3 01710 GOSUB 6460'GO PRINT OUT THE HAND 01720 PRINT CHR$(27);CHR$(72);CHR$(27);CHR$(75);N$(G(0,0));" will lead first."; 01730 PRINT CHR$(27);CHR$(75) 01740 IF G(0,0)<>4 THEN 1830 01750 GOSUB 14800 01760 PRINT "This hand there is NO pass." 01770 FOR Z=1 TO 4 'ZERO OUT EVERYONES PASS ARRAY 01780 FOR T7=0 TO 7 01790 LET P(Z,T7)=0 01800 NEXT T7 01810 NEXT Z 01820 GOTO 2060'AND DONT FORGET NOT TO PASS 01830 FOR Z=1 TO 4 01840 IF N$(Z)="Debug" THEN 1860 01850 IF Z=3 THEN 4020 01860 GOSUB 7200'FIGURE OUT WHAT TO PASS, AND PUT CARDS INTO P ARRAY 01870 NEXT Z 01880 GOSUB 14760'POSITION CURSOR 01890 PRINT N$(3);" decides to pass... "; 01900 FOR T7=1 TO 3 01910 LET V=P(3,T7) 01920 GOSUB 4770'PRINT OUT THE CARD NAME 01930 NEXT T7 01940 PRINT 01950 FOR Z=1 TO 4 01960 GOSUB 4640'REORDER THE HANDS 01970 NEXT Z 01980 GOSUB 7340'GO PASS THE CARDS THAT WERE DECIDED ON 01990 PRINT N$(3);" recieves... "; 02000 FOR T7=5 TO 7 02010 LET V=P(3,T7) 02020 GOSUB 4770'PRINT A RECIEVED CARD 02030 NEXT T7 02040 LET Z=3 02050 GOSUB 6460'PRINT THE HAND 02060 02070 FOR Q=1 TO 13 '13 TRICKS LOOP 02080 IF U(1,0)+U(2,0)+U(3,0)+U(4,0)=4*(Q-1) THEN 2100 02090 PRINT "??? MISSING OR EXTRA CARD SOMEPLACE. CRASH COMMING UP ???" 02100 LET Q9=0 02110 FOR Z=1 TO 4 02120 PRINT CHR$(27);CHR$(89);CHR$(N1(Z,3));CHR$(N1(Z,4));" " 02130 GOSUB 4640'ORDER THE HANDS AGAIN 02140 NEXT Z 02150 LET V8=0 02160 LET Z=3 02170 IF N$(3)<>"Debug" THEN 2190 02180 GOSUB 15580'DUMP HANDS CONTENTS 02190 02200 FOR Q0=1 TO 4 '4 CARDS PER TRICK 02210 LET Z=FNI(G(Q-1,0)+(Q0-2)) 02220 IF N$(Z)="Debug" THEN 2240 02230 IF Z=3 THEN 3040 02240 GOSUB 13260'FIGURE OUT WHAT TO DO 02250 GOSUB 3410'SCRAMBLE IF THERE ARE TOUCHERS 02260 LET V=Q2 02270 GOSUB 4420'SPLIT UP INTO RANK AND SUIT 02280 PRINT CHR$(27);CHR$(89);CHR$(N1(Z,3));CHR$(N1(Z,4)); 02290 IF Q0<>1 THEN 2310 02300 PRINT "*"; 02310 GOSUB 4840'PRINT CARD NAME 02320 IF N$(3)<>"Debug" THEN 2340 02330 PRINT X9;" " 02340 GOSUB 15060 02350 IF V<>11 THEN 2370 02360 LET Q9=Q9+13 02370 IF V0<>2 THEN 2390 02380 LET Q9=Q9+1 02390 FOR Q8=1 TO 14-Q 02400 IF H(Z,Q8)<>Q2 THEN 2570 02410 LET H(Z,Q8)=0 02420 LET H(Z,0)=H(Z,0)-1 02430 LET U(V0,V1)=Q 02440 LET U(V0,0)=U(V0,0)+1 02450 IF Q0<>1 THEN 2570 02460 IF S(0,2)<>0 THEN 2520'HEARTS ARE BROKEN 02470 IF V0<>2 THEN 2520'HEARTS NOT LED 02480 LET O(3,0)=O(3,0)-O(3,Z) 'HEART LEAD TO BREAK THEM! 02490 LET O(3,Z)=0 02500 LET O(4,0)=O(4,0)-O(4,Z) 02510 LET O(4,Z)=0 02520 LET U(V0,14)=U(V0,14)+1 02530 LET G(Q,0)=Z 'WIMMER 02540 LET G(Q,6)=V0 'SUIT LED 02550 LET G(Q,7)=V1 'RANK OF WINNER SO FAR 02560 LET G(Q,5)=Z 'LEADER 02570 NEXT Q8 02580 IF V0=G(Q,6) THEN 2630'IT WAS A FOLLOW 02590 IF O(G(Q,6),Z)=0 THEN 2700 02600 LET O(G(Q,6),Z)=0 'NOT FOLLOWING 02610 LET O(G(Q,6),0)=O(G(Q,6),0)-1 'SUBTRACT 1 FROM COUNT OF FOLLOWERS 02620 GOTO 2700 02630 IF O(V0,Z)=1 THEN 2670'GOOD. 02640 PRINT "CAUGHT A DIRTY CHEAT" 02650 PRINT "V0=";V0,"Z=";Z,"O(V0,Z)=";O(V0,Z) 02660 STOP 02670 IF V13 THEN 2760 02750 GOSUB 6470'PRINT OUT THE HUMANS HAND 02760 NEXT Q0 02770 02780 REM SCORE THE TRICK 02790 LET S(G(Q,0),2)=S(G(Q,0),2)+Q9 02800 LET S(0,2)=S(0,2)+Q9 'TOTAL POINTS TAKEN THIS HAND 02810 LET L(0,G(Q,6))=L(0,G(Q,6))+1 02820 LET L(G(Q,5),G(Q,6))=L(G(Q,5),G(Q,6))+1 02830 PRINT 02840 GOSUB 14750 02850 PRINT "READY"; 02860 INPUT Z9$ 02870 IF Z9$="QUIT" THEN 15980 02880 IF Z9$="quit" THEN 15980 02890 NEXT Q 02900 02910 REM PRINT THE SCORE 02920 PRINT CHR$(27);CHR$(72);CHR$(27);CHR$(75); 02930 PRINT "The score so far...." 02940 FOR Z=1 TO 4 02950 IF S(Z,2)<>26 THEN 2990 02960 LET S(Z,2)=-26 02970 PRINT CHR$(27);CHR$(89);CHR$(32);CHR$(67); 02980 PRINT N$(Z);" took all the points ! !" 02990 LET S(Z,1)=S(Z,1)+S(Z,2) 03000 PRINT CHR$(27);CHR$(89);CHR$(N1(Z,3));CHR$(N1(Z,4)); 03010 PRINT S(Z,1);" " 03020 NEXT Z 03030 GOTO 1620'GO PLAY ANOTHER HAND 03040 03050 REM INPUT A PLAY FROM HUMAN PLAYER 03060 GOSUB 5130 03070 GOSUB 14750 03080 IF Q0=1 THEN 3100 03090 PRINT "What do you play"; 03100 IF Q0<>1 THEN 3120 03110 PRINT "What do you LEAD"; 03120 GOSUB 6780 03130 LET Q7=0 03140 FOR Q8=1 TO H(3,0) 03150 IF H(3,Q8)<>V THEN 3170 03160 LET Q7=1 03170 NEXT Q8 03180 IF Q7<>0 THEN 3230 03190 PRINT "But, you dont have the "; 03200 GOSUB 4840 03210 PRINT 03220 GOTO 3070 03230 LET Q2=V 03240 IF Q0=1 THEN 3290 03250 IF G(Q,6)=V0 THEN 3390 03260 IF A(G(Q,6),0)=0 THEN 3390 03270 PRINT "You must follow suit if possible." 03280 GOTO 3070 03290 IF V0<>2 THEN 3390'NOT A HEART 03300 IF U(2,0)<>0 THEN 3390'IF A HEART IS ALREADY PLAYED 03310 IF U(1,11)<>0 THEN 3390 03320 IF H(3,0)=A(2,0) THEN 3390'ALL HEARTS 03330 IF A(1,1)<>11 THEN 3370'IF NOT, HIGHETS SPADE MUST BE QUEEN, BUT IT WASNT 03340 IF A(1,0)<>1 THEN 3370'QUEEN WAS NOT THE ONLY SPADE 03350 IF A(2,0)+A(3,0)<>0 THEN 3370'NOT VOID IN CLUBS AND DIAMONDS 03360 GOTO 3390'OK TO PLAY HEARTS 03370 PRINT "Hearts ARE NOT broken yet." 03380 GOTO 3070 03390 GOTO 2260 03400 03410 REM HERE IS A SCRAMBLE SUBROUTINE 03420 REM IT TAKES THE DECISION OF THE MAIN DECISION PROGRAM 03430 REM AND MODIFIES IT AT RANDOM TO ANY CRAD 03440 REM THAT IS IN EFFECT TOUCHING THE DECIDED CARD 03450 REM CALL WITH Q2=THE CARD RETURNED BY THE MAIN DECISION ROUTINES 03460 REM RETURN WITH Q2=THE MODIFIED DESISION 03470 IF A(FNS(Q2),0)=1 THEN 4010'ONLY ONE CHOICE. 03480 IF Q2=11 THEN 4010'DONT MODIFY THE QHOICE IF IT IS THE QUEEN OF SPADES 03490 LET E0=FNS(Q2) 03500 LET E1=FNR(Q2) 03510 LET E3=0 03520 LET E4=0 03530 FOR E6=-1 TO 1 STEP 2 03540 LET E2=E1 03550 LET E2=E2+E6 'NEXT CARD IN LINE 03560 IF E2=0 THEN 3730'FOUND BOTOM OF SUIT 03570 IF E2=14 THEN 3730'FOUNT TOP OF SUIT 03580 IF U(E0,E2)<>0 THEN 3550'CARD IS GONE, TRY NEXT 03590 LET E7=0 03600 FOR E8=1 TO A(E0,0) 'SEARCH HAND FOR CARD 03610 IF A(E0,E8)<>E2 THEN 3630'THATS NOT IT 03620 LET E7=E2 'FOUND IT! 03630 NEXT E8 03640 IF E0<>1 THEN 3670 03650 IF E7<>11 THEN 3670 03660 LET E7=0 'FORGET THAT THE QS TOUCHES 03670 IF E7=0 THEN 3730'DIDNT FIND CARD IN MY HAND. THATS END OF TOUCHERS IN THIS DIRECTION 03680 IF E7>E1 THEN 3710 03690 LET E3=E3+1 03700 GOTO 3550 03710 LET E4=E4+1 03720 GOTO 3550'KEEP LOOKING 03730 NEXT E6 03740 IF E3+E4=0 THEN 4010'RETURN IF NO TOUCHERS FOUND 03750 FOR E8=1 TO A(E0,0) 03760 IF A(E0,E8)<>E1 THEN 3790 03770 LET E3=E8+E3 03780 LET E4=E8-E4 03790 NEXT E8 03800 REM NOW E3=POS IN ARAY OF LOWEST TUCHR, E4=POS OF HIEST 03810 IF Q0=1 THEN 3970'IF IN LEAD, ANY TOUCHER IS AS GOOD AS ANY OTHER 03820 IF E0<>G(Q,6) THEN 3970'SAME THING IF SLUFFING 03830 LET E5=0 03840 LET E6=0 03850 FOR E8=E4 TO E3 03860 IF A(E0,E8)>G(Q,7) THEN 3890'CARD WOULD WIN 03870 LET E5=E5+1 'TALLY UP A DUCKER 03880 GOTO 3900 03890 LET E6=E6+1 'TALLY UP A TAKER 03900 NEXT E8 03910 IF E9=1 THEN 3950'TAKE IF WE CAN 03920 IF E5=0 THEN 3970'WANT TO DUCK, BUT NO CARDS WILL 03930 LET E4=E4+E6 03940 GOTO 3970 03950 IF E6=0 THEN 3970'WAND TO TAKE, BUT NO TOUCHING CARDS WILL TAKE 03960 LET E3=E3-E5 03970 REM NOW E3=POSITION OF LOWEST ACCEPTABLE TPUCHER, E4=HIEST ACCEPTABLE 03980 LET E2=(E3-E4)+1 03990 LET E2=E4+(INT(RND(0)*E2)) 04000 LET Q2=A(E0,E2)+((E0-1)*13) 04010 RETURN 04020 04030 REM INPUT A PASS 04040 GOSUB 5130 04050 GOSUB 14750 04060 PRINT "What 3 cards do you pass"; 04070 IF G(0,0)<>3 THEN 4090 04080 PRINT " to the RIGHT"; 04090 IF G(0,0)<>1 THEN 4110 04100 PRINT " to the LEFT"; 04110 IF G(0,0)<>2 THEN 4130 04120 PRINT " ACROSS"; 04130 FOR Q6=1 TO 3 04140 LET Q7=0 04150 IF Q6=1 THEN 4170 04160 GOSUB 14750 04170 GOSUB 6780 04180 FOR Q8=1 TO 13 04190 IF H(Z,Q8)<>V THEN 4210 04200 LET Q7=Q8 04210 NEXT Q8 04220 IF Q7<>0 THEN 4250 04230 PRINT "You dont have it." 04240 GOTO 4160 04250 LET P(Z,Q6)=H(Z,Q7) 04260 LET H(Z,Q7)=0 04270 PRINT "Thats";Q6 04280 GOSUB 6460 04290 NEXT Q6 04300 GOTO 1870 04310 04320 REM SHUFFLE THE DECK 04330 LET G9=G9+1 04340 FOR X1=1 TO 52 04350 LET D0=RND(0)*RND(0) 04360 LET D0=INT(RND(0)*52+1) 04370 LET D1=D(X1) 04380 LET D(X1)=D(D0) 04390 LET D(D0)=D1 04400 NEXT X1 04410 RETURN 04420 04430 REM BREAK A CARD DOWN INTO SUIT AND RANK 04440 REM CALL WITH V=CARD VALUE 04450 REM RETURN WITH V0=SUIT, V1=RANK 04460 LET V0=FNS(V) 04470 LET V1=FNR(V) 04480 RETURN 04490 04500 REM DEAL OUT THE CARDS 04510 FOR X=1 TO 13 04520 FOR Z=1 TO 4 04530 LET U(Z,X)=0 04540 LET H(Z,X)=D((Z-1)*13+X) 04550 NEXT Z 04560 NEXT X 04570 FOR Z=1 TO 4 04580 LET H(Z,0)=13 'SET COUNT OF CARDS IN HAND TO 13 04590 GOSUB 4640'ORDER THE HAND 04600 NEXT Z 04610 GOSUB 9890'INIT A BUNCH OF ARRAYS 04620 GOSUB 11350'PLUS THE O ARRAY 04630 RETURN 04640 04650 REM HAND ORDERING SUBROUTINE 04660 REM CALL WITH Z=HAND # 04670 LET S0=0 04680 FOR X=1 TO 12 04690 IF H(Z,X)>=H(Z,X+1) THEN 4740 04700 LET S0=H(Z,X) 04710 LET H(Z,X)=H(Z,X+1) 04720 LET H(Z,X+1)=S0 04730 LET S0=1 04740 NEXT X 04750 IF S0<>0 THEN 4670 04760 RETURN 04770 04780 04790 REM PRINT VALUE OF A CARD 04800 REM CALL WITH V=VALUE 04810 GOSUB 4420'SET V0=SUIT, V1=RANK 04820 GOSUB 4850 04830 RETURN 04840 04850 REM PRINT VALUE OF A CARD. V1=RANK, V0=SUIT 04860 IF V1>8 THEN 4890 04870 PRINT CHR$(32);CHR$(49+V1); 04880 GOTO 4990 04890 IF V1<>9 THEN 4910 04900 PRINT "10"; 04910 IF V1<>10 THEN 4930 04920 PRINT " J"; 04930 IF V1<>11 THEN 4950 04940 PRINT " Q"; 04950 IF V1<>12 THEN 4970 04960 PRINT " K"; 04970 IF V1<>13 THEN 4990 04980 PRINT " A"; 04990 GOSUB 5020 05000 RETURN 05010 05020 REM PRINT SUIT LETTER 05030 REM CALL WITH V0=SUIT # 05040 IF V0<>1 THEN 5060 05050 PRINT "S "; 05060 IF V0<>2 THEN 5080 05070 PRINT "H "; 05080 IF V0<>3 THEN 5100 05090 PRINT "C "; 05100 IF V0<>4 THEN 5120 05110 PRINT "D "; 05120 RETURN 05130 05140 REM SUBROUTINE TO MOVE A PLAYERS CARDS INTO THE ANALYSIS ARRAY 05150 REM CALL WITH Z=PLAYER# 05160 FOR X=1 TO 4 05170 LET A(X,0)=0 05180 NEXT X 05190 FOR X=1 TO 13 05200 LET V=H(Z,X) 05210 IF V=0 THEN 5250 05220 GOSUB 4420'SET V0=SUIT, V1=RANK 05230 LET A(V0,0)=A(V0,0)+1 05240 LET A(V0,A(V0,0))=V1 05250 NEXT X 05260 GOSUB 8850'SETUP W ARRAY 05270 GOSUB 7590'FIGURE OUT CHANCES FOR QS 05280 GOSUB 8140'FIGURE OUT VOID CHANCES 05290 GOSUB 8680'FIGURE TOTAL CHANCES OF FOLLOWERS 05300 RETURN 05310 05320 REM SUBROUTINE TO CALCULATE DANGER IN ALL SUITS 05330 REM RETURN DANGER AMOUNT IN W(?,0) 05340 FOR S0=1 TO 4 05350 LET S7=0 'INIT ADDITIONAL CARD TO FOLLOW WITH 05360 IF S0<>G(Q,6) THEN 5380'NOT FOLLOWING THIS SUIT 05370 LET S7=G(Q,7)'WINNER SO FAR IS AN ADDITIONAL CARD TO DUCK 05380 LET T0=0 05390 IF A(S0,0)=0 THEN 5530'VOID. NOTHIN TO DO 05400 LET T0=.4 05410 IF W(S0,2)=0 THEN 5530'DEAD SUIT, LEAVE ALONE 05420 IF W(S0,7)=0 THEN 5450' I HAVE LOW CARD IN SUIT 05430 GOSUB 6230'DO A STANDARD LOW POINT SLUFF CALCULATION 05440 GOTO 5530'RETURN 05450 IF W(S0,5)>=W(S0,2)+SGN(S7) THEN 5530'LOADS OF TOUCHING DUCKERS 05460 LET T0=.2 05470 IF W(S0,3)=0 THEN 5530 05480 LET T0=(SGN(S7)+FNO(S0))/W(S0,5) 05490 IF T0<1 THEN 5530'THATS ENOUGH LOW TOUCHERS 05500 GOSUB 6000'FIND OUT IF LOWS ARE GOOD ENOUGH ANYWAYS 05510 IF S1=0 THEN 5430'NOT GOOD. DO STANDARD LOW CALCULATION 05520 LET T0=.8 05530 LET W(S0,0)=T0 05540 NEXT S0 05550 IF U(1,11)=0 THEN 5570'QS STILL OUT 05560 LET W(2,0)=W(2,0)*1.35 'INCREASE HEARTS DANGER 05570 RETURN 05580 05590 REM PASS/SLUFF ROUTINE 05600 REM CHOOSES THE MOST DANGEROUS CARD IN THE HAND 05610 REM RETURNS T4=CARD, T5=POSITION IN A ARRAY, T6=SUIT# 05620 LET T7=-1 'INIT DANGER VALUE 05630 FOR S0=1 TO 4 05640 LET T8=1 05650 IF A(S0,0)=0 THEN 5960'IGNORE VOIDS 05660 LET T0=W(S0,0)'GET REGULAR VALUE FOR DANGER 05670 IF S0<>2 THEN 5900 05680 IF S(0,2)<>0 THEN 5920'HEARTS BROKEN 05690 IF W(2,4)>1 THEN 5920'DONT HAVE BOSS OR 2ND BOSS 05700 IF W(2,4)=0 THEN 5770'HAVE BOSS 05710 IF A(2,0)=1 THEN 5920'LEAVE 2ND BOSS DANGER HIGH 05720 IF A(2,0)<>2 THEN 5750 05730 LET T0=T0*.35 'CUT BOSS DOUBLES TO A THIRD 05740 GOTO 5920 05750 LET T8=2 05760 GOTO 5920 05770 IF A(2,0)=1 THEN 5730'CUT BOSS SINGLES 05780 IF A(2,0)>2 THEN 5830'BOSS TRIPPLE 05790 LET T8=2 'SHIFT TO 2ND FOR BOSS DOUBLE 05800 IF A(2,2)>5 THEN 5920'TOO BIG 05810 LET T0=T0*.5 'CUT DANGER OF SMALL ONES IN HALF 05820 GOTO 5920 05830 IF Q9=0 THEN 5750'IF POINTS ARE ON TRICK,SHIFT DANGER TO 2ND 05840 IF A(2,0)<>W(2,1) THEN 5880'ALL BOSSES DONT TOUCH 05850 LET T8=A(2,0)'ALL TOUCH. SHIFT TO LOWEST TO CREATE CONFUSION 05860 LET T0=T0*.5 05870 GOTO 5920 05880 LET T8=W(2,1)+1 'SHIFT TO 1ST NON TOUCHER 05890 GOTO 5920 05900 IF S0+U(1,11)<>1 THEN 5920'NOT SPADES OR QS HAS BEEN PLAYED 05910 GOSUB 6620'DO SPECIAL SPADE DANGER EVALUATION 05920 IF T0+(A(S0,1)/30)=FNO(S0)+SGN(S7) THEN 6200'ALREADY GONE FAR ENOUGH 06110 LET S5=S5+1 'NEXT RANKING CARD PLEASE 06120 IF S7=S5 THEN 6140'ADDITIONAL CARD TO BE RECKONED WITH 06130 IF U(S0,S5)<>0 THEN 6110'THE CARD IS GONE. TRY NEXT 06140 LET S4=S4+1 'TALLY UP A CARD 06150 IF A(S0,S6)<>S5 THEN 6180'THATS NOT IT 06160 LET S3=S3+1 06170 LET S6=S6-1 'BUMP TO NEXT 06180 IF S3/S4>=.5 THEN 6200'OK. WE HAVE AT LEAST 50% 06190 LET S1=0 06200 NEXT S2 06210 RETURN 06220 06230 REM LOW POINTS CALCULATION 06240 REM CALL WITH S0=SUIT #, AND A ARRAY SET UP 06250 LET S1=INT((13-U(S0,0))/2) 06260 LET S3=0 'ZERO HAND TOTAL 06270 LET S4=0 'ZERO TOTAL TOTAL 06280 LET S5=0 06290 FOR S2=S1 TO 1 STEP -1 06300 LET S5=S5+1 06310 IF U(S0,S5)<>0 THEN 6300'CARD IS GONE, TRY ANOTHER 06320 FOR S6=1 TO A(S0,0) 06330 IF A(S0,S6)<>S5 THEN 6350 06340 LET S4=S4+S2 06350 NEXT S6 06360 LET S3=S3+S2 06370 NEXT S2 06380 LET T0=3-(2*(S4/S3)) 06390 IF A(S0,1)>S5 THEN 6410 06400 LET T0=T0-(T0/2.5) 06410 IF A(S0,0)<>2 THEN 6430 06420 LET T0=T0+.3 06430 IF A(S0,0)<>1 THEN 6450'NOT SINGLETON 06440 LET T0=T0+.7 06450 RETURN 06460 06470 REM HAND PRINTING SUBROUTINE 06480 REM CALL WITH Z=HAND # 06490 GOSUB 5130'PUT CARDS INTO A ARRAY 06500 PRINT CHR$(27);CHR$(89);CHR$(45);CHR$(60);"You have..." 06510 FOR T0=1 TO 4 06520 PRINT CHR$(27);CHR$(89);CHR$(45+T0);CHR$(60); 06530 IF A(T0,0)=0 THEN 6580 06540 FOR T1=1 TO A(T0,0) 06550 LET V=((T0-1)*13)+A(T0,T1) 06560 GOSUB 4770'PRINT CARDS VALUE 06570 NEXT T1 06580 PRINT CHR$(27);CHR$(75) 06590 NEXT T0 06600 RETURN 06610 06620 REM EVALUATE A SPADE SUIT 06630 REM CALL WITH S0=THE SUIT # 06640 REM AND THE HAND IN THE A ARRAY 06650 LET T0=0 06660 IF A(S0,0)=0 THEN 6770 06670 LET E0=1 06680 LET E1=11 06690 GOSUB 12250'EXAMINE SPADE SUIT 06700 IF E3>=W(1,2)/(O(1,0)-O(1,Z)) THEN 6770 06710 IF E2=1 THEN 6750 06720 IF E3=A(1,0) THEN 6770 06730 LET T0=3.3 06740 GOTO 6770 06750 IF A(S0,0)>W(1,2)/(O(1,0)-O(1,Z)) THEN 6770 06760 LET T0=3.8 06770 RETURN 06780 06790 REM SUBROUTINE TO ACCEPT INPUT OF A CARD 06800 INPUT F0$ 06810 CHANGE F0$ TO F 06820 IF F(0)=0 THEN 7170 06830 LET F1=1 06840 LET V1=0 06850 IF F(F1)<>49 THEN 6950 06860 LET F1=F1+1 06870 IF F(F1)=48 THEN 6930 06880 GOTO 7170 06890 LET V1=V1+1 06900 LET V1=V1+1 06910 LET V1=V1+1 06920 LET V1=V1+1 06930 LET V1=V1+9 06940 GOTO 7020 06950 IF F(F1)=65 THEN 6890 06960 IF F(F1)=75 THEN 6900 06970 IF F(F1)=81 THEN 6910 06980 IF F(F1)=74 THEN 6920 06990 IF F(F1)<50 THEN 7170 07000 IF F(F1)>57 THEN 7170 07010 LET V1=F(F1)-49 07020 LET F1=F1+1 07030 LET V0=0 07040 IF F(F1)<97 THEN 7060 07050 LET F(F1)=F(F1)-32 07060 IF F(F1)=83 THEN 7130 07070 IF F(F1)=72 THEN 7120 07080 IF F(F1)=67 THEN 7110 07090 IF F(F1)<>68 THEN 7170 07100 LET V0=V0+1 07110 LET V0=V0+1 07120 LET V0=V0+1 07130 LET V0=V0+1 07140 LET V=((V0-1)*13)+V1 07150 GOSUB 14790 07160 RETURN 07170 PRINT "Huh ? ?" 07180 GOSUB 14750 07190 GOTO 6800 07200 07210 REM SUBROURINE TO PUT THE CARDS TO PASS IN THE P ARRAY 07220 REM AND REMOVE THEM FROM THE HAND 07230 REM CALL WITH Z=PLAYER # 07240 FOR T9=1 TO 3 'GONNA PASS 3 CARDS 07250 GOSUB 5140'SETUP ANALYSIS ARRAYS 07260 GOSUB 5590'PICK OUT BIGEST TROUBLE CARD 07270 LET P(Z,T9)=T4 'PUT IT INTO THE PASS ARRAY 07280 FOR T8=1 TO 13 07290 IF H(Z,T8)<>T4 THEN 7310 07300 LET H(Z,T8)=0 'REMOVE CARD FROM HAND 07310 NEXT T8 07320 NEXT T9 07330 RETURN 07340 07350 REM PASS THE CARDS 07360 FOR Z=1 TO 4 07370 LET Z2=FNI(Z+(G(0,0)-1)) 07380 FOR Z1=1 TO 3 07390 LET H(Z2,Z1+10)=P(Z,Z1) 07400 LET P(Z2,Z1+4)=P(Z,Z1) 07410 NEXT Z1 07420 LET P(Z2,4)=Z 'SHOWS WHO PASSED TO ME 07430 LET P(Z,0)=Z2 'SHOWS WHERE MY PASS WENT 07440 NEXT Z 07450 FOR Z=1 TO 4 07460 GOSUB 4640'REORDER A HAND 07470 NEXT Z 07480 RETURN 07490 07500 REM HERE TO SLUFF 07510 GOSUB 11050'CHECK UP ON MODE 07520 IF Q8<2 THEN 7560'NOT IN BAD RUN TROUBLE 07530 IF Q7=Z THEN 7560'BAD TROUBLE BUT IM THE CAUSE 07540 GOSUB 11440'STOP A RUN STYLE SLUFF 07550 IF Q2<>0 THEN 7570'RETURN IF IT WORKED(WHY WHOULDNT IT?) 07560 GOSUB 12150'SLUFF 07570 RETURN 07580 07590 REM SUBROUTINE TO FIGURE OUT EVERYONES CHANCES OF HAVING THE QS 07600 REM RETURN CHANCES RANGING FROM 0.0 TO 1.0 IN THE A1 ARRAY 07610 FOR C4=1 TO 4 'START OUT BY ZEROING EVERYONES CHANCES 07620 LET A1(C4)=0 07630 NEXT C4 07640 IF U(1,11)<>0 THEN 8120'ALREADY PLAYED 07650 IF W(1,9)=1 THEN 8120'I HAVE IT 07660 IF O(1,0)-SGN(A(1,0))<>1 THEN 7720'MORE THAN 1 OTHER PERSON HAS SPADES 07670 FOR C4=1 TO 4 'ONLY 1 PERSON BESIDES ME HAS SPADES 07680 LET A1(C4)=O(1,C4) 07690 NEXT C4 07700 LET A1(Z)=0 'I DONT HAVE IT 07710 GOTO 8120'ALL DONE 07720 LET C1=0 07730 FOR C4=1 TO 3 'LOOK AT MY PASS 07740 IF P(Z,C4)<>11 THEN 7770 07750 LET C1=1 07760 LET A1(P(Z,0))=1 'PERSON I PASSED TO GETS A CHANCE =1 07770 NEXT C4 07780 IF C1=1 THEN 8120'I PASSED IT, SO WERE ALL SET 07790 FOR C4=1 TO 4 'NOW START OUT WITH PROBABILITIES EQUAL 07800 LET A1(C4)=.33 'SET INITIAL PROBIBILITIES 07810 NEXT C4 07820 LET A1(Z)=0 'MY PROBABILITY =0 07830 FOR C3=1 TO Q-1 'FOR ALL TRICKS UP TILL PRESENT 07840 FOR C4=1 TO 4 'FOR EACH PERSON 07850 IF FNS(G(C3,C4))=G(C3,6) THEN 7880'ITS A LEAD OR FOLLOW 07860 LET A1(C4)=A1(C4)*.2 'CUT CHANCE DOWN FOR SLUFFING 07870 GOTO 8060 07880 IF G(C3,5)<>C4 THEN 7930'IT WAS FOLLOWING 07890 LET A1(C4)=A1(C4)*1.1 'INCREASE CHANCE SLIGHTLY 07900 IF G(C3,6)<>1 THEN 8060'IF SPADES WERE NOT LED 07910 LET A1(C4)=A1(C4)*.2 'DECREASE CHANCES IF SPADES WERE LED 07920 GOTO 8060 07930 IF G(C3,6)<>1 THEN 8060'NON-SPADE FOLLOWS ARE OF NO IMPORTANCE 07940 IF G(C3,C4)<11 THEN 8060'IGNORE FOLLOWS WITH LESS THAN QUEEN 07950 LET C5=G(C3,5) 'GET # OF LEADER 07960 LET C5=FNI(C5) '# OF PERSON IN 2ND POSITION 07970 IF C5=C4 THEN 8020'THIS PERSON WAS IN 4TH POSITION 07980 LET C5=FNI(C5)'# OF PERSON IN 3RD 07990 IF C5=C4 THEN 8040 08000 LET A1(C4)=A1(C4)*.80 'SMALL DECREASE BECAUSE COMPARED TO OTHER THINGS, 08010 GOTO 8060'HIGH SPADES IN 4TH POSITION IS NOT NOTEWORTHY 08020 LET C5=FNI(C5) 08030 LET A1(C5)=A1(C5)*.2 08040 LET C5=FNI(C5) 08050 LET A1(C5)=A1(C5)*.2 'DECREASE CHANCES FOR PERSON IN 4TH POSITION 08060 NEXT C4 08070 LET C5=(1.0/(A1(1)+A1(2)+A1(3)+A1(4))) 08080 FOR C4=1 TO 4 08090 LET A1(C4)=A1(C4)*C5 08100 NEXT C4 08110 NEXT C3 08120 RETURN 08130 08140 REM SUBROUTINE TO FIGURE OUT CHANCE OF A PERSON BEING VOID IN A SUIT 08150 REM RETURN CHANCES IN THE A2 ARRAY 08160 FOR C0=1 TO 4 08170 FOR C1=1 TO 4 08180 LET A2(C0,C1)=1 08190 IF C0=Z THEN 8650 08200 LET C7=13-(A(C1,0)+U(C1,0)) 08210 LET A2(5,C1)=C7'STORE # UNKNOWN CARDS IN THAT SUIT 08220 IF C7=0 THEN 8650'I HAVE EM ALL 08230 IF O(C1,C0)=0 THEN 8650'DIDNT FOLLOW LAST TRICK, VOID FOR SURE 08240 LET C5=0 '# I PASSED 08250 LET C6=0 '# I PASSED THAT REMAIN UNPLAYED 08260 FOR C3=1 TO 3 08270 IF FNS(P(Z,C3))<>C1 THEN 8310'THATS NOT ONE 08280 LET C5=C5+1 08290 IF U(C1,FNR(P(Z,C3)))<>0 THEN 8310'ITS BEEN PLAYED THO 08300 LET C6=C6-1 'NO IT HASNT BEEN PLAYED YET. 08310 NEXT C3 08320 LET C7=C7+C6 'TOTAL # OF CARDS I MUST WORY ABOUT 08330 IF C7>=0 THEN 8380 08340 PRINT "PLAYER #";Z 08350 PRINT "SUIT#";C1 08360 PRINT "U(C1,0)=";U(C1,0),"A(C1,0)=";A(C1,0); 08370 PRINT "C7=";C7,"C6=";C6 08380 LET A2(5,C1)=C7'STORE AWAY # OF UNKNOWN CARDS IN THAT SUIT 08390 IF P(Z,0)<>C0 THEN 8420'I DIDNT PASS TO PERSON IN QUESTION 08400 LET A2(C0,C1)=0 08410 IF C6<>0 THEN 8650'I DID AND IT IS UNPLAYED. DEFINATLY NOT VIOD 08420 IF C7=0 THEN 8640'VOID FOR SURE, ALL ARE ACCOUNTED FOR 08430 LET C6=0 08440 FOR C3=5 TO 7 08450 IF FNS(P(Z,C3))<>C1 THEN 8470 08460 LET C6=C6+1 08470 NEXT C3 08480 LET A2(C0,C1)=((O(C1,0)-(1+O(C1,Z)))/(O(C1,0)-O(C1,Z)))^C7 08490 IF O(C1,P(Z,0))<>0 THEN 8510 08500 LET C5=0 08510 IF O(C1,P(Z,4))<>0 THEN 8530 08520 LET C6=0 08530 IF P(Z,4)=C0 THEN 8550'I PASSED TO THE PERSIN IN QUESTION 08540 LET C6=-1*(C6/(O(C1,0)-O(C1,Z))) 08550 IF P(Z,0)=C0 THEN 8570'I PASSED TO PERSON IN QUESTION 08560 LET C5=-1*(C5/(O(C1,0)-O(C1,Z))) 08570 LET C5=C5*-1 08580 IF C5+C6=0 THEN 8650'NO CHANCE MODIFICATION BECAUSE OF PASS 08590 IF C5+C6>0 THEN 8620'GO INCREASE VOID CHANCES 08600 LET A2(C0,C1)=A2(C0,C1)+(.15*(A2(C0,C1))*(C5+C6)) 08610 GOTO 8650'DONE 08620 LET A2(C0,C1)=A2(C0,C1)+((.15*(1-(A2(C0,C1)))*(C5+C6))) 08630 GOTO 8650 08640 LET A2(C0,C1)=1 'VOID FOR SURE 08650 NEXT C1 08660 NEXT C0 08670 RETURN 08680 08690 REM SETUP A3 ARRAY 08700 FOR S0=1 TO 4 08710 LET S1=Z 08720 LET A3(S0,0)=0 08730 LET A3(S0,1)=0 08740 LET A3(S0,2)=0 08750 LET S1=FNI(S1) 'NEXT PLAYER 08760 IF S1=Z THEN 8820'GONE ROUND. DONE 08770 IF H(S1,0)0 THEN 9200'SORRY, THAT ONE IS ALREADY GONE 09160 IF W0>=E1 THEN 9180'NOT A LOWER ONE 09170 LET E3=E3-1 'TALLY UP A LOWER ONE 09180 IF W0<=E1 THEN 9200'NOT A HIGHER ONE 09190 LET E4=E4-1 'TALLY UP A HIGHER ONE 09200 NEXT W0 09210 LET W(E0,3+W1)=E3*(-1) 09220 LET W(E0,4+W1)=E4*(-1) 09230 LET W(E0,2+W1)=(E4+E3)*(-1) 09240 REM TALLY UP TOUCHERS NOW 09250 LET W(E0,1+W1)=1 09260 FOR W6=-1 TO 1 STEP 2 09270 LET W9=E1 09280 LET W9=W9+W6 'NEXT CARD IN LINE 09290 IF W9=0 THEN 9400'FOUND BOTOM OF SUIT 09300 IF W9=14 THEN 9400'FOUNT TOP OF SUIT 09310 IF U(E0,W9)<>0 THEN 9280'CARD IS GONE, TRY NEXT 09320 LET W7=0 09330 FOR W8=1 TO A(E0,0) 'SEARCH HAND FOR CARD 09340 IF A(E0,W8)<>W9 THEN 9360'THATS NOT IT 09350 LET W7=1 'FOUND IT! 09360 NEXT W8 09370 IF W7=0 THEN 9400'DIDNT FIND CARD IN MY HAND. THATS END OF TOUCHERS IN THIS DIRECTION 09380 LET W(E0,1+W1)=W(E0,1+W1)+1 09390 GOTO 9280'KEEP LOOKING 09400 NEXT W6 09410 NEXT W1 09420 NEXT E0 09430 LET E0=1 09440 LET E1=11 09450 GOSUB 12250 09460 LET W(1,9)=E2 'SET QUEEN OF SPADES COUNT 09470 GOSUB 5320'CALCULATE SUIT DANGER 09480 RETURN 09490 09500 REM SUBROUTINE TO CHECK FOR POSSIBLE RUN 09510 REM RETURN R0=ANSWER 0=NO CHANCE 3=REALLY GOOD CHANGE 09520 IF S(Z,2)<>S(0,2) THEN 9870'POINTS NOT EXCLUSIVLY MINE 09530 IF A(2,0)=0 THEN 9620'VOID IN HEARTS, OTHER SUITS STRENGTH DECIDES THE MATER 09540 IF W(2,4)<>0 THEN 9870'CANT RUN - NO HEART CONTROL 09550 IF W(2,2)=0 THEN 9850'I HAVE ALL HEARTS, LOOKS GOOD 09560 LET R1=W(2,1)/(W(2,2)/(O(2,0)-1)) 09570 IF R1>1 THEN 9850'LOOKS LIKE I CAN PULL ALL HEARTS 09580 IF R1<.75 THEN 9610'NOT CLOSE TO LONG ENOUGH 09590 IF S(Z,2)>12 THEN 9830'CANT LOSE MUCH TRYING, SO TRY 09600 IF W(1,9)=1 THEN 9830'MARGINAL HEARTS, BUT I HAVE QS, TRY 09610 IF W(2,1)<>A(2,0) THEN 9870'HEART LOSERS KILL CHANCES 09620 REM LOOK AT OTHER SUITS 09630 LET R2=0 'INIT UNDEAD VOID COUNT 09640 LET R0=4 'INIT RUN CHANCE 09650 FOR R3=1 TO 4 '4 SUITS 09660 IF A(R3,0)=0 THEN 9750'VOID 09670 IF W(R3,4)=0 THEN 9700'HAVE THE WINNERS 09680 LET R0=0 'NO WINNERS = NO CHANCE 09690 GOTO 9750'TRY NEXT SUIT(EVEN THO ITS FUTILE) 09700 IF W(R3,2)=0 THEN 9750'I HAVE EM ALL - TRY NEXT SUIT 09710 LET R1=W(R3,1)/FNO(R3) 09720 IF R1>=1 THEN 9750'LOOKS LIKE I CAN DRAW EM ALL OUT 09730 IF W(R3,1)=A(R3,0) THEN 9750'NOTHING BUT BOSSES 09740 LET R0=R0*R1 09750 NEXT R3 09760 IF R0=4 THEN 9880'GOOD RUN CHANCES 09770 LET R0=R0/(1+R2) 'VOIDS REDUCE RUN CHANCES 09780 IF W(1,9)=1 THEN 9880'QUEEN IN HAND, DONT MODIFY RESULT 09790 LET R0=R0*1.5 'MODIFY RESULT FOR QUEEN GONE 09800 IF U(1,11)<>0 THEN 9880'IF IT IS GONE, GO RETURN 09810 LET R0=R0/2 'IF NOT, MODIFY RESULT DOWNWARDS 09820 GOTO 9880 09830 LET R0=3 09840 RETURN 09850 LET R0=4 09860 RETURN 09870 LET R0=0 09880 RETURN 09890 09900 REM ZERO A BUNCH OF STUFF 09910 FOR Z0=0 TO 4 09920 FOR Z1=0 TO 14 09930 IF Z1>4 THEN 9950 09940 LET L(Z0,Z1)=0 09950 IF Z1>4 THEN 9970 09960 LET O(Z0,Z1)=0 09970 IF Z1>5 THEN 10000 09980 IF Z0=0 THEN 10000 09990 LET W(Z0,Z1)=0 10000 IF Z1>14 THEN 10020 10010 LET U(Z0,Z1)=0 10020 NEXT Z1 10030 NEXT Z0 10040 RETURN 10050 10060 REM HERE TO PLAY HIGHEST CARD FROM MY SHORTEST SUIT 10070 REM SPADES DONT COUNT UNLESS OUT OF OTHER THINGS 10080 LET Q7=14 'INIT TO LOOK FOR A SUIT SHORTER THAT 14 CARDS(SHOULD BE EASY) 10090 FOR Q8=4 TO 1 STEP -1 10100 IF Q8<>1 THEN 10130 10110 IF U(1,11)<>0 THEN 10130'IF QUEEN GONE, TREAT SPADES LIKE ANY OTHER SUIT 10120 IF Q7<>14 THEN 10250 10130 IF Q8<>2 THEN 10160 10140 IF U(2,0)<>0 THEN 10160'HEARTS ARE BROKEN 10150 IF U(1,11)=0 THEN 10250'HEARTS NOT BROKEN, TRY NEXT SUIT 10160 IF A(Q8,0)=0 THEN 10250'IF VOID, TRY A NEW SUIT 10170 GOSUB 12030'LOOK FOR SPECIAL CONSIDERATIONS 10180 IF Q6=14 THEN 10200 10190 LET Q6=A(Q8,0) 10200 IF Q2=0 THEN 10220 10210 IF Q6>Q7 THEN 10250'NOT SHORTEST SO FAR 10220 LET Q7=Q6 10230 LET Q2=A(Q8,1)+((Q8-1)*13) 10240 LET X9=10240 10250 NEXT Q8 10260 IF Q2=0 THEN 10410'ONLY HEARTS IN HAND 10270 IF U(1,11)<>0 THEN 10440'DONT WORRY IF QUEEN OF SPADES IS GONE 10280 IF Q2>13 THEN 10440'ITS COOL 10290 IF Q2<11 THEN 10440'ITS COOL 10300 LET E0=1 'SPADE 10310 LET E1=11 10320 GOSUB 12260'ANALIZE SPADES 10330 IF E3=0 THEN 10370 10340 LET Q2=A(1,A(1,0)) 'GOT A LOW SPADE, SO PLAY IT 10350 LET X9=10350 10360 GOTO 10440 10370 IF E4=0 THEN 10410'NO HIGH SPADES, PROBABLY JUST QUEEN 10380 LET Q2=A(1,1) 'GOT A HIGH SPADE, PLAY IT 10390 LET X9=10390 10400 GOTO 10440 10410 IF A(2,0)=0 THEN 10440'IF HAVE NO HEARTS, CANT AVOUD TRADGEDY 10420 LET Q2=A(2,A(2,0))+13 'HAVE HEARTS, SO PLAY LOWEST ONE 10430 LET X9=10430 10440 RETURN 10450 10460 REM PLAY CARD FROM SUIT WITH LEAST # OF CARDS IN OPONENTS HANDS 10470 REM IF <7 PLAY LOW, OTHERWISE PLAY HIGH 10480 REM SPADES DONT COUNT 10490 LET Q2=0 10500 LET X9=10510 10510 LET Q7=14 'INIT TO LOOK FOR A SUITWITH LES THAN 14 CARDS IN OPONENTS HANDS 10520 FOR Q8=4 TO 1 STEP -1 10530 IF Q8<>1 THEN 10560 10540 IF U(1,11)<>0 THEN 10560'TREAT NORMALY IF QS IS GONE 10550 IF Q7<>14 THEN 10720 10560 IF Q8<>2 THEN 10590 10570 IF U(2,0)<>0 THEN 10590'HEARTS ARE BROKEN 10580 IF U(1,11)=0 THEN 10720'HEARTS NOT BROKEN, TRY NEXT SUIT 10590 IF A(Q8,0)=0 THEN 10720'IF VOID, TRY A NEW SUIT 10600 GOSUB 12030 10610 IF Q6<>0 THEN 10630 10620 LET Q6=13-(A(Q8,0)+U(Q8,0)) 10630 IF Q2=0 THEN 10650 10640 IF Q6>Q7 THEN 10720'TOO MANY CARDS UNACOUNTED FOR 10650 LET Q7=Q6 10660 IF Q6<6.5 THEN 10700'FEW CARDS OUT, SO PLAY LOW 10670 LET Q2=A(Q8,1)+((Q8-1)*13) 'LOTS OF CARDS OUT, SO PLAY HIGH 10680 LET X9=10690 10690 GOTO 10720 10700 LET Q2=A(Q8,A(Q8,0))+((Q8-1)*13) 10710 LET X9=10720 10720 NEXT Q8 10730 GOTO 10260 10740 10750 REM PLAY CARD FROM SUIT WITH MOST # OF CARDS IN OPONENTS HANDS 10760 REM IF <7 PLAY LOW, OTHERWISE PLAY HIGH 10770 REM SPADES DONT COUNT 10780 LET Q2=0 10790 LET X9=10800 10800 LET Q7=0 'INIT START VALUE 10810 FOR Q8=4 TO 1 STEP -1 10820 IF Q8<>1 THEN 10850 10830 IF U(1,11)<>0 THEN 10850'TREAT NORMALY IF QS IS GONE 10840 IF Q7<>14 THEN 11030 10850 IF Q8<>2 THEN 10880 10860 IF U(2,0)<>0 THEN 10880'HEARTS ARE BROKEN 10870 IF U(1,11)=0 THEN 11030'HEARTS NOT BROKEN, TRY NEXT SUIT 10880 IF A(Q8,0)=0 THEN 11030'IF VOID, TRY A NEW SUIT 10890 GOSUB 12030 10900 IF Q6=0 THEN 10930 10910 LET Q6=.5 10920 GOTO 10940 10930 LET Q6=13-(A(Q8,0)+U(Q8,0)) 10940 IF Q2=0 THEN 10960 10950 IF Q60 THEN 11320'POINTS ARE SPLIT UP 11200 LET Q8=1 'NO ONE HAS POINTS 11210 GOTO 11330 11220 LET Q8=2 11230 REM 11240 REM FIND OUT IF THIS TRICK CHANGES THINGS 11250 LET Q5=0 11260 IF G(Q,0)=Q6 THEN 11330'POINT PERSON IS WINNING 11270 LET Q5=1 11280 IF Q9=0 THEN 11330'NO POINTS ON IT 11290 IF H(Z,0)>H(Q6,0) THEN 11320'HA HA. POINT PERSON CANT WIN.PLAYED ALREADY 11300 IF A2(G(Q,6),Q6)>.98 THEN 11320'HO HO. POINT PERSON IS OUT OF THAT SUIT AND CANT WIN 11310 GOTO 11330 11320 LET Q8=0 11330 RETURN 11340 11350 REM INIT THE O ARRAY AT BEGIN OF A HANH 11360 FOR Q8=1 TO 4 'ALL SUITS 11370 LET O(Q8,0)=4 'ALL FOLLOWERS TILL OTHERWISE SHOWN 11380 FOR Z=1 TO 4 11390 LET O(Q8,Z)=1 'ASSUME FOLLOWER 11400 NEXT Z 11410 NEXT Q8 11420 RETURN 11430 11440 REM PANIC MODE SLUFF ROUTINE 11450 REM SLUFS USELESS CARDS IN ATEMPT TO STOP RUN 11460 IF S(0,2)+Q9>7 THEN 11480'RUNNER HAS TOO MANY POINTS FOR A QUEEN SLUFF 11470 IF W(1,9)=1 THEN 11530'HAVE QS, DUMP IT TO TRY TO STOP RUN 11480 IF Q5=0 THEN 11560'NO SPECIAL REASON TO SLUFF A HEART 11490 IF A(2,0)=0 THEN 11560'NO HEARTS TO SLUFF 11500 LET Q2=A(2,1)+13 'HAVE A HEART, SO SLUFF IT 11510 LET X9=11520 11520 RETURN 11530 LET Q2=11 'QS TO TRY TO STOP RIN 11540 LET X9=11550 11550 RETURN 11560 LET Q2=0 11570 LET X9=11580 11580 LET M5=0 11590 FOR M0=1 TO 4 11600 IF A(M0,0)=0 THEN 12010'TRY NEXT SUIT IF VOID 11610 IF W(M0,4)<>0 THEN 11690 11620 IF A(M0,0)>1 THEN 11660 11630 LET M3=1 'BOSS SINGLE 11640 LET M4=1 11650 GOTO 11890 11660 LET M3=2 'A BOS DOUBLE OR MORE 11670 LET M4=4 11680 GOTO 11890 11690 IF W(M0,4)=1 THEN 11750'2ND HIGHEST 11700 LET M3=1 'PLAY HIGHEST CARD FROM UNIMPORTANT SUITS 11710 IF A(M0,0)=1 THEN 11730'IF ONLY HAVE 1 11720 LET M3=2 'OTHERWISE PLAY 2ND HIGHEST 11730 LET M4=3.90 11740 GOTO 11890 11750 IF W(M0,2)<>1 THEN 11790'NOT UP AGAINST ONLY 1 CARD 11760 LET M3=1 11770 LET M4=3.5 11780 GOTO 11890 11790 IF A(M0,0)<>1 THEN 11830'MORE THAN 1 CARD IN SUIT WITH 2ND BOSS 11800 LET M3=1 '2ND BOS SINGLE 11810 LET M4=2 11820 GOTO 11890 11830 IF A(M0,0)>2 THEN 11870 11840 LET M3=2 '2ND BOSS DOUBLE 11850 LET M4=3 11860 GOTO 11890 11870 LET M3=2 '2ND BOSS TRIPPLE 11880 LET M4=4 11890 IF Q8>4 THEN 11920 11900 LET M4=M4+(A(M0,M3)/100) 11910 GOTO 11930 11920 LET M4=M4-(A(M0,M3)/100) 11930 IF A2(M0,Q6)<.98 THEN 11950'POINT PERSON HAS SOME 11940 LET M4=5-(M4/2) 11950 IF W(M0,2)<>0 THEN 11970 11960 LET M4=4.1 11970 IF M40 THEN 12110 12100 LET Q6=13 'MY LOWEST IS THE BOSS 12110 IF W(Q8,2)<>0 THEN 12130 12120 LET Q6=14 'AND ITS BECAUSE I HAVE THE ONLY CARDS IN THAT SUIT 12130 RETURN 12140 12150 REM THIS IS THE REGULAR NON-RUN MODE SLUFF SUBROUTINE 12160 REM CALL WITH Z=PLAYER # 12170 REM RETURNS Q2=CARD # 12180 LET Q2=11 12190 LET X9=12200 12200 IF W(1,9)=1 THEN 12240'DROP QS IF IN HAND 12210 GOSUB 5590 12220 LET Q2=T4 12230 LET X9=12240 12240 RETURN 12250 12260 REM SIMPLE EVALUATION ROUTUNE 12270 REM CALL WITH E0=SUIT # AND E1=RANK 12280 REM WILL RETURN E2=#CARDS IN SIUT EQUAL 12290 REM E3=# CARDS SMALLER 12300 REM E4=#CARDS BIGGER 12310 LET E2=0 12320 LET E3=0 12330 LET E4=0 12340 IF A(E0,0)=0 THEN 12430 12350 FOR E5=1 TO A(E0,0) 12360 IF A(E0,E5)<>E1 THEN 12380 12370 LET E2=E2+1 12380 IF A(E0,E5)>=E1 THEN 12400 12390 LET E3=E3+1 12400 IF A(E0,E5)<=E1 THEN 12420 12410 LET E4=E4+1 12420 NEXT E5 12430 RETURN 12440 12450 REM THIS IS THE A SUBROUTINE 12460 REM RETURNS Q2<>0 IF IT SUCCEEDS 12470 LET Q2=0 'INIT RETURN VALUE 12480 LET X9=12490 12490 IF A(Q3,A(Q3,0))>G(Q,7) THEN 12550'CANT DUCK. GO RETURN 12500 FOR Q8=A(Q3,0) TO 1 STEP -1 12510 IF A(Q3,Q8)>G(Q,7) THEN 12540 12520 LET Q2=A(Q3,Q8)+((Q3-1)*13) 12530 LET X9=12540 12540 NEXT Q8 12550 RETURN 12560 12570 REM THIS IS THE B SUBROUTINE 12580 LET Q2=A(Q3,1)+((Q3-1)*13) 12590 LET X9=12600 12600 IF A(Q3,0)=1 THEN 12680'NO CHOICE 12610 GOSUB 11060'TEST RUN MODE 12620 IF Q8<2 THEN 12680'NO BIG RUN THREAT 12630 IF A(Q3,0)+U(Q3,0)=13 THEN 12680'LAST CHANCE IN THIS SUIT, SO PLAY HIGH 12640 IF Q5=1 THEN 12680'POINT PERSON NOT WINNING, PLAY HIGH 12650 IF G(Q,7)1 THEN 12800'IN 2ND POSITION AND 3RD CAN FOLLOW 12760 IF A2(Q2,Q3)<>1 THEN 12820'IN 2ND POSITION AND 3RD CAN FOLLOW 12770 LET Q2=FNI(Q2) 12780 LET X9=12790 12790 IF A2(Q2,Q3)=1 THEN 12560'IN 3RD POSITON AND 4TH CAN NOT FOLLOW 12800 LET Q2=A(Q3,1)+((Q3-1)*13) 12810 LET X9=12820 12820 FOR Q8=1 TO A(Q3,0) 12830 IF A(Q3,Q8)0 THEN 12930 12920 GOSUB 12560 12930 RETURN 12940 12950 REM THIS IS THE E SUBROUTINE 12960 REM UNCONDITIONALY PLAYS HIGHEST IN SUIT 12970 LET Q2=A(Q3,1)+((Q3-1)*13) 12980 LET X9=12990 12990 RETURN 13000 13010 REM THIS IS THE A-C SUBROUTINE. IF A FAILS TO RETURN AN ANSWER, C IS CALLED 13020 GOSUB 12440'CALL A 13030 IF Q2<>0 THEN 13050'IF IT DID RETURN AN ANSWER 13040 GOSUB 12690'IT DIDNT. TRY PROCEDURE C 13050 RETURN 13060 13070 REM THIS IS THE D SUBROUTINE. PLAYS LOWEST UNCONDITIONALY 13080 LET Q2=A(Q3,A(Q3,0))+((Q3-1)*13) 13090 LET X9=13100 13100 RETURN 13110 13120 REM THIS IS THE E PROCEDURE. FOR SUITS WITH 3 OR MORE CARDS, THE 2ND HIGHEST IS PLAYED 13130 REM FOR SUITS WITH 2 CARDS THE HIGHEST IS PLAYED ONLY 13140 REM IF IT IS NOT AT LEAST THE 2ND HIGHEST OUT 13150 REM FOR SUITS WITH 1 CARD, THAT CARD IS PLAYED! 13160 IF A(Q3,0)=1 THEN 12950'NO CHIOCE, SWITCH TO PROCEDURE E 13170 IF A(Q3,0)>2 THEN 13190'ALWAYS PLAY 2ND HIGHEST IF HAVE 3 OR MARE CARDS 13180 IF W(Q3,4)>1 THEN 12950'IF HOGHEST IS NOT 2ND BEST AT LEAST, PLAY IT 13190 LET Q2=A(Q3,2)+((Q3-1)*13) 'PLAY 2ND HIGHEST 13200 LET X9=13170 13210 RETURN 13220 13230 REM THIS IS THE NEW IMPROVED DUCK ROUTINE 13240 GOSUB 13000 13250 RETURN 13260 13270 REM THINKER. RETURN WITH Q2=CARD 13280 LET Q2=0 13290 LET E9=-1 'ALL THINGS BEING EQUAL, DUCK 13300 LET X9=13270 13310 GOSUB 5130'MOVE HAND TO ANALISIS ARRAY 13320 IF Q0<>1 THEN 13980'FOLLOW IF NOT IN LEAD 13330 GOSUB 9490'FIND OUT ABOUT RUNNING CHANCES 13340 IF R0<1.2 THEN 13500'CANT RUN 13350 LET Q8=15 13360 FOR S0=1 TO 4 13370 IF A(S0,0)=0 THEN 13480'VIOD, ON TO NEXT 13380 IF S0<>2 THEN 13410'ONLY HEARTS IS TRICKY 13390 IF S(0,2)<>0 THEN 13410'BUT ONLY IF HEARTS NOT BROKEN YET. 13400 IF A(2,0)<>H(Z,0) THEN 13480'NO REPRIVE BEACUSE THERE IS A CHOICE 13410 IF W(S0,4)-(W(S0,1)/15)>Q8 THEN 13480'NOT GOOD ENOUGH 13420 IF S0<>1 THEN 13450'THIS SUIT IS NOT SPADES 13430 IF A(S0,1)<>11 THEN 13450'QUEEN IS NOT MY HIGHEST 13440 IF R0=3 THEN 13460'DONT PLAY QUEEN IF ITS A SHAKEY RUN 13450 LET Q8=W(S0,4)-(W(S0,1)/15) 13460 LET Q2=((S0-1)*13)+A(S0,1) 13470 LET X9=13440 13480 NEXT S0 13490 RETURN 13500 REM RUN NOT POSSIBLE 13510 IF U(1,11)<>0 THEN 13890'X IF IN NO QUEEN DANGER 13520 LET E0=1 13530 LET E1=11 13540 GOSUB 12250'EVAL SPADES 13550 IF E2=1 THEN 13670'GOT THE QUEEN 13560 IF E3=0 THEN 13890'NO LOW SPADES, IN QUEEN DANGER X 13570 IF E4=0 THEN 13590'NO HIGH SPADES. PLAY A LOW ONE 13580 IF E3<(13-(U(1,0)+A(1,0)))/(O(1,0)-1) THEN 13890'NOT ENOUGH LOW SPADES TO LEAD 13590 13600 REM GONNA LEAD A SPADE 13610 FOR Q8=A(1,0) TO 1 STEP -1 13620 IF A(1,Q8)>10 THEN 13650 13630 LET Q2=A(1,Q8) 13640 LET X9=13610 13650 NEXT Q8 13660 RETURN 13670 13680 REM I HAVE LEAD AND I HAVE QS 13690 IF S(Z,2)=13 THEN 14640'PLAY QS CAUSE I HAVE 13 PTS ALREADY 13700 LET E0=1 13710 LET E1=11 13720 GOSUB 12260'EVALUATE SPADES IN MY HAND 13730 FOR E0=1 TO 13 13740 IF U(1,E0)<>0 THEN 13790'SORRY, THAT SPADE ALREADY PLGONE 13750 IF E0>=11 THEN 13770'NOT A LOW SPADE 13760 LET E3=E3-1 'TALLY UP A LOW SPADE 13770 IF E0<=11 THEN 13790'NOT A HIGH SPADE 13780 LET E4=E4-1 'TALLY UP A HIGH SPADE 13790 NEXT E0 13800 LET E3=E3*(-1) 13810 LET E4=E4*(-1) 13820 LET E2=E3+E4 'TOTAL # SPADES OUTSIDE MY HAND 13830 IF E4<1 THEN 13880'NO HIGH SPADES OUTSIDE MY HAND 13840 IF (.5*(E4/E2))<(E3/(O(1,0)-1)) THEN 13880'DONT PLAY QS. HIGH SPADE RATIO TOO LOW 13850 GOSUB 11060'SEE IF ANYONE IS RUNNING 13860 IF Q8<3 THEN 14640'NO SERIOUS RUN THREAT. PLAY QS 13870 IF O(1,Q6)=0 THEN 14640'RUNNER DIDNT FOLLOW SPADES. PLAY QS 13880 GOTO 10050'OTHERWISE PLAY HIGHEST IN SHORTEST 13890 13900 REM HERE IS FAMOUS X 13910 IF S(0,2)=0 THEN 13970'HEARTS NOT BROKEN YET 13920 IF A(2,0)=0 THEN 13970'I DONT HAVE ANY HEARTS 13930 IF W(2,0)>2.3 THEN 13970 13935 IF W(2,2)=0 THEN 13970 'I AM ONLY ONE WITH HEARTS 13940 LET Q2=(A(2,A(2,0))+13) 'PLAY LOWEST HEART 13950 LET X9=13915 13960 RETURN 13970 GOTO 10450'ITS A TEMPORARY X THO 13980 13990 REM FOLLOW 14000 LET Q3=G(Q,6) 'GET SUIT LED 14010 IF A(Q3,0)=0 THEN 7490'SLUFF CAUSE WE CANT FOLLOW 14020 IF Q3<>1 THEN 14120'NOT SPADES LEAD. FABS 14030 IF U(1,11)<>0 THEN 14120'QUEEN ALREADY PLAYED. FABS 14040 LET E0=1 14050 LET E1=11 14060 GOSUB 12250'EVALUATE SPADES 14070 IF E2=1 THEN 14430 14080 IF A3(1,0)<.05 THEN 12560'CHANCES OF QS ARE SLIM. USE B 14090 IF E3>=(W(1,2)/(O(1,0)-1)) THEN 13000'NOT ENOUGH SPADE DANGER TO TRY FUNNY STUFF, USE A-C 14100 IF A3(1,0)<.13 THEN 12560'SOME RISK, BUT MY SPADES ARE SHORT. USE B 14110 GOTO 13000'TOO MUCH RISK, USE A-C 14120 14130 REM FABS - FOLLOW ANYTHING BUT SPADES 14140 GOSUB 11050'FIND OUT ABOUT POINT DISTRIBUTION 14150 IF Q9=0 THEN 14270'NO POINTS ON TRICK 14160 IF Q8=0 THEN 13000'WITH NO RUN CHANCE, AVOID POINTS 14170 IF Q6<>Z THEN 14230'DANGER, AND IM NOT THE CAUSE 14180 IF Q9+S(Z,2)<>26 THEN 13000'TAKING DOES NOT GIVE A RUN 14190 LET Q2=A(Q3,1)+((Q3-1)*13) 'TAKING GIVES A RUN. PLAY HIGHEST 14200 LET E9=1 'TAKE IS IMPORTANT 14210 LET X9=14120 14220 RETURN 14230 14240 REM FOLLOWING WITH POINTS ON TRICK AND RUN DANGER 14250 IF Q9>4 THEN 13000'TOO MANY POINTS TO TRY A STOP 14260 GOTO 14380'IGNORE POINTS BECAUSE OF RUN DANGER 14270 14280 REM NO POINTS ON TRICK 14290 IF Q8>1 THEN 14380'PLAY LOW, RUN DANGER AND BAD TOO. 14300 IF U(Q3,0)+A(Q3,0)+A3(Q3,2)>12.9 THEN 13010'TRY TO DUCK DEAD SUITS 14310 IF W(Q3,0)<1 THEN 13010'CAN ALWAYS DUCK, SO DUCK. 14320 IF (13-(U(Q3,0)+A(Q3,0)))/(O(Q3,0)-1)>2 THEN 12560'LOOKS LIKE A SAFE SUIT 14330 IF A3(Q3,1)<.018 THEN 12560'USE B IF SLIM QS FALL CHANCE 14340 IF Q0=3 THEN 12890'IN 3RD POSITION USE PROCEDURE A-B 14350 IF A3(Q3,1)>.065 THEN 13010'IN PRETY BAD QS FALL TROUBLE, USE A-C 14360 GOTO 12700'USE C IF IN MODERATE TROUBLE 14370 14380 REM FOLLOW WITH NO POINTS ON TRICK, QUEEN GONE, BAD RUN DANGER 14390 LET E9=1 'WINNING THIS TRICK IS IMPORTANT 14400 IF A(Q3,1)11 THEN 14630'IF KING OR ACE IS WINNING, MAYBE DROP QUEEN 14450 IF A(1,A(1,0))=11 THEN 12560'MY QUEEN IS MY LOWEST SPADE 14460 IF Q9=0 THEN 14540 14470 IF Q8=0 THEN 14540 14480 IF Q6=Z THEN 14540 14490 IF A(1,0)=1 THEN 14600 14500 IF A(1,1)<>11 THEN 14600 14510 LET Q2=A(1,2) 14520 LET X9=14430 14530 RETURN 14540 FOR Q8=A(1,0) TO 1 STEP -1 14550 IF A(1,Q8)>10 THEN 14580 14560 LET Q2=A(1,Q8) 14570 LET X9=14480 14580 NEXT Q8 14590 IF Q2<>0 THEN 14620 14600 LET Q2=A(1,1) 14610 LET X9=14520 14620 RETURN 14630 IF S(G(Q,0),2)=13 THEN 14270'IF PERSON ALREADY HAS 13 PTS, DONT DROP IT 14640 LET Q2=11 'DROP THE QUEEN 14650 LET X9=14560 14660 RETURN 14670 14680 REM SUBROUTONE TO REDRAW THE SCREEN 14690 PRINT CHR$(27);CHR$(72);CHR$(27);CHR$(74); 14700 FOR I0=1 TO 4 14710 PRINT CHR$(27);CHR$(89);CHR$(N1(I0,1));CHR$(N1(I0,2));N$(I0) 14720 NEXT I0 14730 GOSUB 6470'PRINT OUT THE HAND 14740 RETURN 14750 14760 REM POSITION CURSOR FOR A QUESTION 14770 PRINT CHR$(27);CHR$(89);CHR$(50);CHR$(32);CHR$(27);CHR$(75); 14780 RETURN 14790 14800 REM HERE AFTER SUCSECSFULL INPUT 14810 PRINT CHR$(27);CHR$(89);CHR$(51);CHR$(32);CHR$(27);CHR$(74); 14820 RETURN 14830 14840 REM PLAYER NAME DATA 14850 DATA Ed Ryan ,Frank Gatulis ,Jimmy Carter ,Ray Shoop 14860 14870 REM HERE IS THE CURSOR CONTROL DATA 14880 DATA 1,30,3,35 14890 DATA 6,60,6,50 14900 DATA 11,30,9,35 14910 DATA 6,0,6,20 14920 14930 14940 REM HERE ARE A BUNCH OF FILE PRINTING ROUTINES 14950 14960 REM PRINT ALL 4 HANDS 14970 PRINT #2 14980 PRINT #2 14990 PRINT #2 15000 FOR Z=1 TO 4 15010 GOSUB 15580'DUMP HANDS CONTENTS 15020 PRINT #2," " 15030 NEXT Z 15040 RETURN 15050 15060 REM PRINT OUT A CARD PLAYED 15070 IF N$(3)<>"Debug" THEN 15390 15080 PRINT #2, " "; 15090 LET F0=FNS(Q2) 15100 LET F1=FNR(Q2) 15110 IF Q0<>1 THEN 15140 15120 PRINT #2, N$(Z),"LED THE "; 15130 GOTO 15150 15140 PRINT #2, N$(Z),"PLAYED THE "; 15150 GOSUB 15410 15160 PRINT #2, X9 15170 IF Z<>3 THEN 15390 15180 GOSUB 15850 15190 PRINT #2, " " 15200 PRINT #2, "HE THOUGHT THE QS CHANCES WERE..." 15210 FOR T8=1 TO 4 15220 PRINT #2, N$(T8);"'S CHANCE OF HAVING THE QS IS";A1(T8)*100 15230 FOR F0=1 TO 4 15240 GOSUB 15730'PRINT SUIT LETTER 15250 PRINT #2, "VOID CHANCE IS";A2(T8,F0)*100,"QS DROP CHANCE IS";A2(T8,F0)*A1(T8)*100 15260 NEXT F0 15270 NEXT T8 15280 PRINT #2, " " 15290 PRINT #2, "INFORMATION FROM THE A3 ARRAY" 15300 PRINT #2, " ","HAV QS","SLUF QS","AVR CRDS" 15310 FOR F0=1 TO 4 15320 GOSUB 15730'PRINT SUIT LETTER 15330 PRINT #2, " ", 15340 FOR T8=0 TO 2 15350 PRINT #2, (INT(A3(F0,T8)*1000)/1000), 15360 NEXT T8 15370 PRINT #2, " " 15380 NEXT F0 15390 RETURN 15400 15410 REM FILE PRINT VALUE OF A CARD. F0=SUIT, F1=RANK 15420 IF F1>8 THEN 15450 15430 PRINT #2, CHR$(32);CHR$(F1+49); 15440 GOTO 15550 15450 IF F1<>9 THEN 15470 15460 PRINT #2, "10"; 15470 IF F1<>10 THEN 15490 15480 PRINT #2, " J"; 15490 IF F1<>11 THEN 15510 15500 PRINT #2, " Q"; 15510 IF F1<>12 THEN 15530 15520 PRINT #2, " K"; 15530 IF F1<>13 THEN 15550 15540 PRINT #2, " A"; 15550 GOSUB 15730 15560 RETURN 15570 15580 REM HAND FILE PRINTING SUBROUTINE 15590 REM CALL WITH Z=HAND # 15600 GOSUB 5130'PUT CARDS INTO A ARRAY 15610 PRINT #2, "Version";V9$,"Game number";G9 15620 PRINT #2, N$(Z);" HAS..." 15630 FOR F0=1 TO 4 15640 IF A(F0,0)=0 THEN 15700 15650 FOR T1=1 TO A(F0,0) 15660 LET F1=A(F0,T1) 15670 GOSUB 15410 15680 NEXT T1 15690 PRINT #2 " " 15700 NEXT F0 15710 RETURN 15720 15730 REM FILE PRINT SUIT LETTER 15740 REM CALL WITH F0=SUIT # 15750 IF F0<>1 THEN 15770 15760 PRINT #2, "S "; 15770 IF F0<>2 THEN 15790 15780 PRINT #2, "H "; 15790 IF F0<>3 THEN 15810 15800 PRINT #2, "C "; 15810 IF F0<>4 THEN 15830 15820 PRINT #2, "D "; 15830 RETURN 15840 15850 REM DUMP ROUTINE FOR DEBUG 15860 PRINT #2, "THE W ARRAY FOR ";N$(Z);", TRICK #";Q 15870 PRINT #2, " ? TH AH AH TL AL AL QS" 15880 FOR D0=1 TO 4 15890 FOR D1=0 TO 9 15900 PRINT #2, W(D0,D1);" "; 15910 NEXT D1 15920 PRINT #2 15930 NEXT D0 15940 PRINT #2 15950 PRINT #2 15960 PRINT #2, " " 15970 RETURN 15980 15990 REM COME HERE TO END THE GAME 16000 PRINT "O.K. This was game number";G9 16010 REM GAME 214 SHOWS DEFICIENCIES IN PLAY OF HEART SUIT 16020 REM GAME 217 SHOWS HOW A SURE RUN CAN BE PASSED AWAY 16030 REM GAME 112 SHOWS FLAWS IN LEADING ROUTINE WHEN QS NOT IN HAND 16040 REM GAME 170 SHOWS FLAWS IN LEAD ROUTINE WHEN QS HELD IN HAND 16050 END