This file is part of Miscellaneous Programs
. Download the collection to get this file.
Play the card game on your computer.
Content
Source Code
1 REM SAVE "DEAL A" AT B35
5 FOR I=1 TO 4: READ X$: FOR J=0 TO 7: READ X: POKE USR X$+J,X: NEXT J: NEXT I
10 DATA "H",34,119,127,127,62,62,28,8,"C",28,28,8,107,127,107,8,8,"D",8,28,62,127,62,28,8,0,"S",8,28,62,127,127,127,107,8
15 GO TO 670
20 LET ED=ED+1: LET F$="": IF ED=17 THEN LET ED=1: REM PRINT HAND/SUIT ROUTINE TO...
25: FOR R=A TO A+12: LET X=A(R): LET Y=X-B: IF Y>0 AND Y<14 THEN GO TO 40
30 NEXT R
35 PRINT E$(ED): LET G$(ED)=E$(ED): LET V=V+1: RETURN
40 LET F$=F$+(D$(Y) AND Y<5)+("10" AND Y=5)+(D$(Y+1) AND Y>5): LET E$(ED)=F$
45 GO TO 30: REM HERE
60 RESTORE 75: FOR A=1 TO 40 STEP 13: READ V: READ H: FOR B=0 TO 39 STEP 13: PRINT INK (2 AND (B=13 OR B=26));AT V,H;I$(B/13+1);;V$;: GO SUB 20
65 NEXT B: NEXT A: GO TO 250
75 DATA 0,12,8,20,16,12,8,0
80 FOR X=20 TO 21: FOR Y=0 TO 31: PRINT AT X,Y;V$: NEXT Y: NEXT X: GO TO 60
100 LET C=12: REM FLOAT SORT, SYNC 4:2,20; TO...
110 LET K=A: LET Q=A(A)
115 FOR S=A+1 TO A+C: IF A(S)<Q THEN GO TO 130
120 LET Q=A(S): LET K=S
130 NEXT S
135 LET Z=A(A+C): LET A(A+C)=A(K): LET A(K)=Z
140 LET C=C-1: IF C=0 THEN RETURN
150 GO TO 110: REM HERE
250 LET O$="NESWNSHDC1234567": DIM C(4)
255 LET A=14: LET K=13: LET Q=12: LET J=11
260 LET N=0: LET E=1: LET S=2: LET W=3
265 LET H=2: LET D=3: LET C=4
270 LET I=1: LET TR=1: LET II=0
275 INPUT "DECLARER?";H$;"CONTRACT?";K$;T$
280 LET J$=H$: FOR R=1 TO 4: IF H$=O$(R) THEN GO TO 290
285 NEXT R: GO TO 275
290 FOR R=10 TO 16: IF K$=O$(R) THEN GO TO 300
295 NEXT R: GO TO 275
300 FOR R=5 TO 9: IF T$=O$(R) THEN GO TO 310
305 NEXT R: GO TO 275: REM END ERROR TRAPS
310 FOR M=1 TO 5: READ M$: READ N$: PRINT AT 21,0;H$;": ";K$; INK (2 AND (T$="H" OR T$="D"));N$ AND M$=T$: NEXT M
315 DATA "S","\s","H","\h","D","\d","C","\c","N","NT"
320 RESTORE 315
330 FOR R=1 TO 4: IF H$=O$(R) THEN GO TO 340: REM PASS PLAY ROUTINE TO...
335 NEXT R
340 LET H$=O$(R+1): REM HERE
345 PRINT AT 20,0;H$;" TO PLAY"
350 IF I>1 THEN GO TO 395
352 LET VV=0: REM ONE-SUIT HAND ROUTINE...
355 FOR T=1 TO 4: IF E$(VAL H$*4+T,1)=V$ THEN GO TO 365
360 LET TT=T: GO TO 367
365 LET VV=VV+1
367 NEXT T
369 IF VV=3 THEN LET S$=O$(TT+5)
370 IF VV=3 THEN GO TO 385: REM TO HERE
375 INPUT "SUIT?";S$: IF S$="X" THEN GO TO 495
380 IF S$<>"S" AND S$<>"H" AND S$<>"D" AND S$<>"C" THEN GO TO 375
385 IF I=1 THEN LET W$=S$: REM W$ IS LEAD;L$ IS WORKING SUIT
390 LET L$=S$
395 IF L$="S" THEN LET Z=VAL H$*4+1: REM "S" ALREADY VALUED FOR SOUTH
400 IF L$="S" THEN GO TO 410
405 LET Z=VAL H$*4+VAL L$
410 FOR R=1 TO 10: IF E$(Z,R)=V$ THEN GO TO 420: REM R-1 IS # OF VISIBLE CHARACTERS IN PROCRUSTEAN E$
415 NEXT R
420 LET R$=E$(Z,1 TO R-1)
425 IF LEN R$=0 THEN GO TO 352: REM VOIDS
430 IF R$="10" OR LEN R$=1 THEN LET C$=R$: GO TO 440: REM SINGLETONS
435 INPUT "CARD?";C$: IF C$="X" THEN GO TO 495
440 IF LEN C$>1 AND C$<>"10" THEN GO TO 435
445 IF C$="" THEN GO TO 435
450 FOR R=1 TO LEN R$: IF R$(R TO R+LEN C$-1)=C$ THEN GO TO 460
455 NEXT R: GO TO 435
460 LET E$(Z)=R$( TO R-1)+R$(R+LEN C$ TO )
465 PRINT AT Z-1+(4 AND H$="E")+(8 AND H$="S")-(4 AND H$="W"),14+(8 AND H$="E")-(12 AND H$="W");E$(Z)+((V$+V$) AND E$(Z)=""): REM REMOVES CARD FROM HAND AND CLOSES UP SUIT
470 LET C(VAL H$+1)=(VAL C$ AND L$=W$)
475 IF L$=T$ THEN LET C(VAL H$+1)=VAL C$+13
476 FOR M=1 TO 4: READ M$: READ N$: IF M$=L$ THEN GO TO 480: REM READS 315
477 NEXT M
480 LET V=10+(2 AND H$="S")-(2 AND H$="N"): LET HZ=14+(2 AND H$="E")-(2 AND H$="W")
481 PRINT AT V,HZ; INK (2 AND (L$="H" OR L$="D"));N$; INK 0;C$;V$: REM PLAYS CARD TO CENTER
483 RESTORE 315
485 LET I=I+1: IF I<5 THEN GO TO 575
495 LET I=1: FOR X=8 TO 12 STEP 2: FOR Y=12 TO 18: PRINT AT X,Y;V$: NEXT Y: NEXT X: IF C$="X" OR S$="X" THEN GO TO 80: REM PICKS UP TRICK WITH ACCEPTABLE DELAY
500 LET R=1: FOR X=2 TO 4: IF C(R)>C(X) THEN GO TO 510
505 LET R=X
510 NEXT X
515 LET H$=O$(R): PRINT AT 21,20;"E-W": PRINT AT 21,12;"N-S": IF R=1 OR R=3 THEN GO TO 545: REM PASSES LEAD TO WINNER;E-W TRICK ROUTINE
520 LET II=II+1: PRINT AT 21,24;II: IF J$="S" OR J$="N" THEN GO TO 535
525 BEEP .25,30: IF II=VAL K$+6 THEN BEEP 1,0
530 GO TO 565
535 BEEP .25,-20: IF II=8-VAL K$ THEN BEEP 1,-60
540 GO TO 565
545 PRINT AT 21,16;TR-II: IF J$="E" OR J$="W" THEN GO TO 560: REM N-S TRICK ROUTINE
550 BEEP .25,30: IF TR-II=VAL K$+6 THEN BEEP 1,0
555 GO TO 565
560 BEEP .25,-20: IF TR-II=8-VAL K$ THEN BEEP 1,-60
565 LET TR=TR+1: IF TR=14 THEN GO TO 900
570 GO TO 345
575 LET L$=W$: GO TO 330: REM TO FOLLOW LEAD RATHER THAN LAST SUIT PLAYED
600 LET A$="01020304050607080910111213141516171819202122232425262728293031323334353637383940414243444546474849505152"
602 LET ED=0: DIM E$(16,10): DIM G$(16,10): REM WORKING AND RECORDING SUIT STRINGS
603 LET D$="AKQJ1098765432": LET V$=" "
605 DIM B$(52,2): DIM A(52)
610 FOR X=1 TO 52
615 LET R=(INT (RND*(53-X))+1)*2-1
620 IF LEN A$=2 THEN LET A(X)=VAL A$
625 IF LEN A$=2 THEN RETURN
630 LET B$(X)=A$(R TO R+1)
635 LET A$=A$( TO R-1)+A$(R+2 TO )
640 LET A(X)=VAL B$(X): REM CONVERT TO NUMBERS
645 NEXT X: REM SYNC 4:2,10
670 PRINT TAB 5;"PRACTICE BRIDGE HANDS"'
671 LET I$="\s\h\d\c": FOR I=1 TO 4: PRINT INK (2 AND (I=2 OR I=3));AT 1,I*4+5;I$(I): NEXT I
672 PRINT : PRINT "Decide how hand should be bid."''
674 PRINT "Enter contract. Enter suit and"
676 PRINT "card to play hand. Forced plays"
678 PRINT "are automatic."''
680 PRINT "Input denomination of spot cards"
682 PRINT "and initial letter of suits and"
684 PRINT "face cards; then press ENTER."''
686 PRINT "Illegal inputs will not ENTER."''
687 PRINT "To change unENTERED input, use"
688 PRINT "R/L arrows and retype."''
689 PRINT "To return to trick 1, press ""X""."'''
690 GO SUB 600
694 FOR A=1 TO 40 STEP 13: GO SUB 100
695 NEXT A
696 PRINT "Press ""ENTER"" to deal hand."
697 INPUT U$
699 CLS : GO TO 60
900 CLS : PRINT "Press R for a new deal."
905 PRINT "Press ""X"" for last hand."
910 IF INKEY$="X" THEN GO TO 920
912 IF INKEY$="R" THEN RUN
915 GO TO 910
920 CLS : GO TO 60
Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.

