CLOSE TO COMPLETE: VERY PLAYABLE
Posted: Sat Apr 22, 2023 1:03 am
Its only taken me a month to recreate something I did over 30 years ago.... LOL
The one 30 years ago never had random dice location or any sound...
Wrote it for a Mainframe system that used dumb terminals.....
I still welcome anyone to jump in with better Sound Effects...
I'm thinking in 1 to 2 weeks I'm calling this done and moving on to another project...
I'm pretty happy with the game actually.. Spent about 2 hrs tonight just playing
it and seeing if anything would break....
Only 1 TODO left.
2, 3 and 6 dice look different depending what side they fall on..
Got to make that visual enhancement.
The one 30 years ago never had random dice location or any sound...
Wrote it for a Mainframe system that used dumb terminals.....
I still welcome anyone to jump in with better Sound Effects...
I'm thinking in 1 to 2 weeks I'm calling this done and moving on to another project...
I'm pretty happy with the game actually.. Spent about 2 hrs tonight just playing
it and seeing if anything would break....
Only 1 TODO left.
2, 3 and 6 dice look different depending what side they fall on..
Got to make that visual enhancement.
Code: Select all
REM THIS IS THE CRAPS PROGRAM
REM THESE ARE THE TEMPORARY DICE VALUES
10 DIM DI(2)
15 TL$=""
16 FOR I = 1 TO 70:TL$=TL$+" ":NEXT I
REM GAME MESSAGES.
20 DIM MSG$(18)
REM STRINGS TO DISPLAY THE DICE
22 DIM D$(10)
23 D$(1) = CHR$($D5):FOR I = 1 TO 5:D$(1)=D$(1)+CHR$($60):NEXT I
24 D$(1) = D$(1) + + CHR$($C9)
25 D$(7) = CHR$($6A):FOR I = 1 TO 5:D$(7)=D$(7)+CHR$($60):NEXT I
26 D$(7) = D$(7) + CHR$($6B)
REM FLAG IS GENERAL PURPOSE VALUE TO COMMUNICATE BETWEEN GOSUBS AND CALLING CODE
30 FLAG = 0: DI(1) = RND(-TI):MP=0
REM SET MESSAGES TO BLANK STRING
31 GOSUB 6000
35 FMINIT:FMINST 3, 56:FMINST 7, 52: REM 127 INITIALIZE THE FM CHIP
40 PT = 5000: REM THIS IS THE USERS POT OF MONEY
45 GOSUB 5000:GOSUB 7500:REM BORDER SUB THEN SHOW THE POT
70 MSG$(2) = CHR$($9E)+"LETS PLAY A GAME OF CRAPS !"
75 MSG$(5) = CHR$($1E)+"PRESS ANY KEY TO START THE GAME"
80 GOSUB 7000: REM SHOW THE MESSAGES
82 GOSUB 8000: REM WAIT FOR KEYPRESS
83 GOTO 100
90 LOCATE 5,6:COLOR 5,0
91 PRINT " **";
92 COLOR 7,0:PRINT " LETS CONTINUE ";
93 COLOR 5,0:PRINT "**";
94 COLOR 1,0
100 REM GAME LOGIC STARTS HERE
310 GOSUB 2000: REM GET THE BET
315 GOSUB 6000: REM BLANK THE MESSAGES
316 GOSUB 7000: REM CLEAR MESSAGE AREA
320 IF B < PT THEN MSG$(2) = "YOUR BET IS "+CHR$($9E)++"$"+STR$(B)+".00"
325 IF B = PT THEN MSG$(2) = CHR$($9E)+"YOU BET IT ALL !!!!!!!!!!!"
326 IF B = 666 THEN MSG$(2)=MSG$(2)+CHR$($81)+ " (THAT BET IS FULL OF SIN)"
330 MSG$(4) = CHR$($1E) + "PRESS ANY KEY TO ROLL YOUR POINT"
335 GOSUB 7000: REM SHOW MESSAGES
340 GOSUB 8000: REM WAIT FOR KEYPRESS
350 GOSUB 3000: REM LOAD THE DICE
370 MP = 1
375 IF R = 7 OR R = 11 THEN MP = 0
380 IF R = 7 OR R = 11 THEN GOSUB 1500
390 IF R = 2 OR R = 3 OR R = 12 THEN LM$ = "YOU CRAPPED OUT !!! "
400 IF R = 2 OR R = 3 OR R = 12 THEN GOSUB 1700
420 IF R = 2 OR R = 3 OR R = 12 THEN MP = 0
470 P=R: REM POINT TO MAKE R IS THE VALUE OF THE DICE ROLL
480 IF PT = 0 THEN GOTO 1000
700 LOCATE 21, 10:COLOR 5, 0
710 IF MP=0 THEN PRINT "***";
715 IF MP=0 THEN COLOR 7,0
720 IF MP=0 THEN PRINT " PRESS ANY KEY TO CONTINUE ";
725 IF MP=0 THEN COLOR 5,0
730 IF MP=0 THEN PRINT "***";
760 IF MP=1 THEN PRINT "POINT TO MAKE IS:";
770 IF MP=1 THEN COLOR 7,0
775 IF MP=1 THEN PRINT P;:COLOR 5,0
780 IF MP=1 THEN PRINT " ANY KEY TO START YOUR ROLL ";
781 IF MP=1 THEN RS=0
785 COLOR 1,0
790 GOSUB 8000:GOSUB 6000:GOSUB 5330
800 IF MP=0 THEN GOTO 90
810 LOCATE 56, 5 : COLOR 5, 0
811 PRINT " ";
812 LOCATE 56, 5
813 PRINT "POINT TO MAKE IS:";
814 COLOR 7,0:PRINT P,
815 COLOR 5,0:PRINT "BET IS: ";
820 COLOR 7,0:PRINT "$";B;".00";
825 GOSUB 7500
830 GOSUB 3000
835 LOCATE 15, 12
840 IF P = R THEN PRINT "YOU MADE YOUR POINT !!!! "
850 IF P = R THEN GOSUB 1500
860 IF R = 7 THEN LM$= "*** YOU MISSED YOUR POINT! ***"
870 IF R = 7 THEN GOSUB 1700
880 IF P<>R AND R<>7 THEN GOTO 810
881 LOCATE 58,5:PRINT " ";
885 LOCATE 21, 12
890 COLOR 5,0
895 PRINT "***";
900 COLOR 7,0
905 PRINT" PRESS ANY KEY TO CONTINUE ";
910 COLOR 5,0:PRINT "***";:COLOR 1,0
940 GOSUB 8000:GOSUB 5330
950 MP=0
980 GOTO 90
1000 SCREEN 0:COLOR 1,0:CLS:PRINT
1005 COLOR 10, 0
1010 IF PT = 0 OR PT < 0 THEN PRINT "YOU LOST IT ALL !!!"
1015 COLOR 5,0
1020 PRINT
1025 IF PT > 0 THEN PRINT "YOU FINISHED WITH ";
1030 IF PT > 0 THEN COLOR 7,0
1040 IF PT > 0 THEN PRINT "$";PT;".00"
1050 COLOR 1, 0:PRINT
1110 PRINT "HOPE YOU ENJOYED PLAYING CRAPS !!"
1120 END
1500 PT = PT + B
1520 GOSUB 7500
1525 COLOR 7, 0:LOCATE 17, 12
1530 PRINT "YOU WON THE ROLL !!";
1540 FMPLAY 3,"T110 O4 ADABDBCA"
1560 COLOR 1,0:RETURN
1700 PT = PT - B
1710 GOSUB 7500
1720 COLOR 10, 0: LOCATE 17, 12
1730 PRINT LM$;
1740 FMPLAY 7, "T75 O2 GGGEDC"
1745 IF PT = 0 OR PT<0 THEN GOTO 1000
1750 COLOR 1,0:RETURN
1999 REM INPUT THE BET
2000 B$ = "":B = 0
2040 GOSUB 7500:LOCATE 56, 5
2060 FOR X = 1 TO 74:PRINT " ";:NEXT X
2070 LOCATE 56,5:COLOR 1, 0
2080 INPUT "ENTER YOUR BET : "; B$
2090 IF LEFT$(B$,1)="Q" THEN GOSUB 10000
2100 B = INT(VAL(B$))
2110 LOCATE 57, 5
2120 COLOR 10, 0
2130 IF B = 0 OR B < 0 THEN PRINT "MUST ENTER A POSITIVE BET !!, TRY AGAIN !! ";
2140 IF B > PT THEN PRINT "YOU CAN'T BET MORE THAN YOU HAVE !! TRY AGAIN !!";
2150 IF B > PT OR B = 0 THEN GOTO 2000
2160 IF B < 0 THEN GOTO 2000
2170 COLOR 1, 0
2180 LOCATE 56, 5:PRINT " ";
2190 LOCATE 57, 5:PRINT " ";
2200 RETURN
2999 REM LOAD THE DICE
3000 FOR I = 1 TO 2
3010 DI(I) = INT(RND(1)* 6) + 1
3020 NEXT I
3025 R = DI(1)+DI(2)
3030 GOSUB 4000
3050 RETURN
3999 REM DISPLAY THE ROLL
4000 GOSUB 9000: REM DRAW THE TABLE
4010 GOSUB 9500: REM SOUND EFFECT
4015 COLOR 0,1
4020 FOR SD = 1 TO 2
4025 FOR X = 2 TO 6:D$(X)=" ":NEXT X
4026 D$(3)= " ":D$(5)=" "
4030 D=DI(SD)
4040 IF D = 1 THEN D$(2) = " "
4050 IF D = 1 THEN D$(4) = " " + CHR$($71)+" "
4060 IF D = 1 THEN D$(6) = " "
4070 IF D = 2 OR D = 3 THEN D$(2)=" "+CHR$($71)
4080 IF D = 2 OR D = 3 THEN D$(6)=CHR$($71)+" "
4090 IF D = 3 OR D = 5 THEN D$(4)=" "+CHR$($71)+" "
4100 IF D = 5 OR D = 6 OR D = 4 THEN D$(2)=CHR$($71)+" "+CHR$($71)
4110 IF D = 5 OR D = 6 OR D = 4 THEN D$(6)=CHR$($71)+" "+CHR$($71)
4120 IF D = 6 THEN D$(4)=CHR$($71)+" "+CHR$($71)
4125 FOR U = 2 TO 6: D$(U)=CHR$($62) + D$(U)+CHR$($62):NEXT U
4130 IF SD = 2 THEN CL = L
4140 IF SD = 2 THEN CC = C
4150 L = INT(RND(0)*13) + 26
4160 C = INT(RND(0)*62) + 7
4170 IF SD = 1 THEN GOTO 4490
4175 IF CL > L+8 OR CL < L-8 THEN GOTO 4490
4190 IF CC > C+8 OR CC < C-8 THEN GOTO 4490
4200 GOTO 4150 : REM IF THEY OVERLAP TRY ANOTHER SET OF COORDINATES
4490 FOR X = 1 TO 7
4500 LOCATE L + X, C
4510 PRINT D$(X);
4520 NEXT X
4530 NEXT SD
4540 LOCATE 11, 12:COLOR 5,0
4545 PRINT " ";:LOCATE 11,12
4550 PRINT "YOU ROLLED :";
4555 COLOR 7,0:PRINT R;" ";
4560 LOCATE 13, 9:PRINT" ";:LOCATE 13, 9
4570 COLOR 5, 0
4580 IF MP=0 AND R=7 THEN PRINT "**";
4590 IF R=2 OR R=11 OR R=12 THEN PRINT "**";
4600 COLOR 7,0
4610 IF R=11 THEN PRINT " A NATURAL !! ";
4620 IF MP=0 AND R=7 THEN PRINT " LUCKY SEVEN !! ";
4630 IF R=2 THEN PRINT " SNAKE EYES !! ";
4640 IF R=12 THEN PRINT " BOXCARS !! ";
4650 COLOR 5,0
4660 IF MP=0 AND R=7 THEN PRINT "**";
4670 IF R=2 OR R=11 OR R=12 THEN PRINT "**";
4680 COLOR 1, 0
4690 GOSUB 9600
4700 RETURN
4990 REM THIS SUB DISPLAYS THE BORDER.
5000 SCREEN 0
5009 REM RED BORDER
5010 COLOR 2, 0 :CLS: REM RED FOREGROUND WHITE BACKGROUND
5020 FOR I = 1 TO 27:PRINT "*";:NEXT I
5021 COLOR 2, 6
5025 FOR I = 1 TO 26:PRINT "-";:NEXT I
5026 COLOR 2, 0
5030 FOR I = 1 TO 27:PRINT "*";:NEXT I
5040 FOR I = 2 TO 52
5045 LOCATE I, 1: PRINT "*";
5050 LOCATE I, 80: PRINT "*";
5060 NEXT I
5080 LOCATE 53, 1
5090 FOR I = 1 TO 80:PRINT "*";:NEXT I
5149 REM NEXT COLOR IS WHITE (RED WHITE & BLUE)
5150 COLOR 1,0
5151 LOCATE 2,2
5155 FOR I = 1 TO 26:PRINT "*";:NEXT I
5156 COLOR 1, 6
5160 PRINT " X16 CRAPS -- PETSCII ";
5161 COLOR 1, 0
5165 FOR I = 1 TO 26:PRINT "*";:NEXT I
5170 FOR I = 3 TO 51
5175 LOCATE I, 2: PRINT "*";
5180 LOCATE I, 79: PRINT "*";
5190 NEXT I
5200 LOCATE 52, 2
5210 FOR I = 1 TO 78: PRINT "*"; :NEXT I
5219 REM NEXT COLOR IS BLUE
5220 COLOR 14, 0
5230 LOCATE 3,3
5240 FOR I = 1 TO 25:PRINT "*";:NEXT I
5245 COLOR 14, 6
5250 FOR I = 1 TO 26:PRINT "-";:NEXT I
5255 COLOR 14, 0
5260 FOR I = 1 TO 25:PRINT "*";:NEXT I
5270 FOR I = 4 TO 50
5290 LOCATE I, 3: PRINT "*";
5300 LOCATE I, 78: PRINT "*";
5310 NEXT I
5320 LOCATE 51,3
5322 FOR I = 1 TO 76:PRINT "*"; :NEXT I
5323 LOCATE 52, 54:COLOR 1, 6:PRINT " USE THE Q KEY TO QUIT ";
5324 COLOR 1,0
5330 FOR I = 4 TO 22 : REM CLEAR THE INNER AREA.
5340 LOCATE I, 4
5375 PRINT TL$;
5380 NEXT I
5385 GOSUB 9000:COLOR 1, 0
5390 RETURN
5999 REM TURN GAME MESSAGE STRINGS TO BLANK
6000 FOR I = 1 TO 18
6010 MSG$(I) = " "
6020 NEXT I
6030 RETURN
6999 REM SHOW MESSAGES
7000 COLOR 5, 0
7005 FOR I = 4 TO 20
7010 LOCATE I, 5
7015 M=INT(I-3)
7020 PRINT MSG$(M);
7030 NEXT I
7040 RETURN
7499 REM UPDATE POT
7500 COLOR 5,0: LOCATE 49, 6
7510 PRINT " ";
7520 LOCATE 49, 6
7540 PRINT "MONEY IN THE POT: ";
7550 COLOR 7,0:PRINT "$";STR$(PT);".00";
7560 RETURN
7999 REM WAIT FOR A KEY TO BE PRESSED, IF Q IS PRESSED ASK IF QUIT
8000 GET I$:IF I$<>"" THEN GOTO 8000 : REM FLUSH KEYBOARD BUFFER
8010 GET I$
8020 IF I$="Q" THEN GOSUB 10000
8025 IF I$="Q" THEN I$=""
8030 IF I$="" THEN GOTO 8010
8100 RETURN
8999 REM DRAW THE CRAPS TABLE
9000 LOCATE 23, 6:COLOR 10, 2
9010 FOR CT = 1 TO 70:PRINT CHR$($B9);:NEXT CT
9015 LOCATE 47, 6
9020 FOR CT = 1 TO 70:PRINT CHR$($B8);:NEXT CT
9045 COLOR 0, 5
9050 FOR CT = 24 TO 46
9075 LOCATE CT, 6
9080 PRINT TL$;
9090 NEXT CT
9150 RETURN
9499 REM ROLL START SOUND EFFECT
9500 FMDRUM 4, 25
9510 SLEEP 6
9520 FOR X = 1 TO 3:FMDRUM 4, 85:SLEEP 4:NEXT X
9550 RETURN
9599 REM ROLL COMPLETE SOUND EFFECT
9600 FOR X = 1 TO 2:FMDRUM 4, 77:SLEEP 3:NEXT X
9610 SLEEP 12
9650 RETURN
10000 LOCATE 56, 5
10005 PRINT " ";
10010 FLAG = 1
10020 LOCATE 56,5:COLOR 1,0
10030 INPUT "DO YOU REALLY WANT TO QUIT ? (ENTER Y OR N):"; B$
10040 AN$=LEFT$(B$,1)
10050 IF AN$="Y" THEN GOTO 1000
10060 IF AN$<> "N" THEN GOTO 10000
10070 LOCATE 56, 5
10075 PRINT " ";
10100 RETURN