This file is part of Miscellaneous Programs
. Download the collection to get this file.
Slot machine simulator. It’s probably as rigged as Las Vegas.
Content
Source Code
600 GO TO 4000
1000 REM FLASH AND INKEY$
1010 PRINT AT R,C; OVER N1; FLASH N1;S$
1020 LET I$=INKEY$: IF I$="" THEN GO TO 1020
1030 PRINT AT R,C; PAPER CL;T$: RETURN
1110 IF NOT IN THEN RETURN
1115 FOR I=SGN IN TO IN STEP SGN IN
1120 PRINT AT N0,7;MO+I;" ": BEEP .1,40: NEXT I
1130 LET MO=MO+IN: RETURN
1200 REM remove doubles
1210 LET DO=N0: PRINT AT 6,11; PAPER N2;" "
1220 DIM C(4): FOR I=N1 TO 4: PRINT AT 7,D(I);W$(I): NEXT I: RETURN
1300 REM CLEAR LINE
1310 PRINT AT 21,N0;TAB 31;: RETURN
1400 REM jackpot
1410 FOR T=N1 TO 4: FOR C=N1 TO JC: PRINT AT N0,11+C;" ": NEXT C
1420 FOR C=N1 TO JC: BEEP .1,10+N2*C: PRINT AT N0,11+C;"J": NEXT C
1430 NEXT T: RETURN
1500 REM FLASH POSS HOLDS AND GET INKEY$
1510 FOR I=N1 TO PI: IF NOT H(I) THEN PRINT AT 11,P(I); FLASH N1; PAPER N2; INK 7; OVER N1;"H"
1520 NEXT I: LET HO=N0
1530 LET I$=INKEY$: IF I$="" THEN GO TO 1530
1540 IF I$<>"1" AND I$<>"2" AND I$<>"3" THEN GO TO 1570
1550 LET I=VAL I$: PRINT AT 11,P(I); PAPER N2; INK 7;"H"
1560 LET HO=N1: LET H(I)=N1: GO TO 1530
1570 FOR I=N1 TO PI: IF NOT H(I) THEN PRINT AT 11,P(I); PAPER N2;" "
1580 NEXT I: LET NH=NH+HO: RETURN
2000 REM play
2010 FOR I=N1 TO PI: IF H(I) THEN GO TO 2040
2020 LET O(I)=V(I): LET FI=INT (RND*100)+N1: LET V(I)=FI: IF FI<5 THEN GO TO 2040
2030 LET V(I)=5+(FI>7)+(FI>10)+(FI>13)+(FI>36)+(FI>49)+(FI>68)+(FI>87)
2040 NEXT I
2050 FOR C=6 TO 9: PRINT AT C,20;" ";AT C+N1,20; PAPER N2;" "
2060 GO SUB 2880: NEXT C
2070 FOR C=10 TO 7 STEP -N1: PRINT AT C,20; PAPER N3;" ";AT C-N1,20; PAPER N2;" "
2080 GO SUB 2880: NEXT C
2090 DIM F(N3)
2100 FOR I=N0 TO 70: FOR J=N1 TO PI
2110 IF H(J)=N1 THEN GO TO 2160
2120 IF F(J)=N1 THEN GO TO 2150
2130 LET O(J)=O(J)+N1: IF O(J)>13 THEN LET O(J)=N1
2140 IF I>10+13*J AND O(J)=V(J) THEN LET F(J)=N1: BEEP .02,8*J
2150 PRINT AT 9,P(J); PAPER 6;W$(O(J))
2160 NEXT J: NEXT I: RETURN
2300 REM reset variables
2310 LET NT=NT+N1: IF WI>N0 THEN LET HB=N1: LET WI=N0
2320 DIM H(N3): FOR I=N1 TO PI: PRINT AT 11,P(I); PAPER N2;" ": NEXT I
2330 IF DO THEN GO TO 2380
2340 FOR I=N1 TO I: IF NOT C(I) THEN GO TO 2370
2350 LET C(I)=C(I)-N1: IF C(I)>N0 THEN GO TO 2370
2360 LET NJ=NJ+N1: PRINT AT 7,D(I);W$(I)
2370 NEXT I: GO TO 2390
2380 LET DC=DC-N1: IF NOT DC THEN GO SUB 1200
2390 IF JA THEN PRINT AT N0,11+JC;" ": LET JC=JC-N1: IF NOT JC THEN LET JA=N0
2400 IF MO>MM THEN LET MM=MO
2410 RETURN
2500 REM NOT enough $
2510 LET HB=N1 : GO SUB 1200
2520 LET JA=N0: PRINT AT N0,10;TAB 31;
2530 GO SUB 1300: PRINT AT 21,8; PAPER 5;"INSERT OR END"
2540 LET S$="INSERT (I)": LET T$=B$: LET CL=7: LET R=N2: LET C=N0: GO SUB 1000
2550 IF I$="P" OR I$="p" THEN GO TO 2540
2560 RETURN
2600 REM can hold
2610 GO SUB 1300: PRINT AT 21,PI; PAPER 5;"INSERT, HOLD, PLAY OR END"
2620 GO SUB 1500: RETURN
2700 REM CANNOT HOLD
2710 GO SUB 1300: PRINT AT 21,5; PAPER 5;"INSERT, PLAY OR END"
2720 GO SUB 2870: RETURN
2800 REM handle winnings
2820 GO SUB 1300: IF NOT HB THEN PRINT AT 21,4; PAPER 5;"HOLD, "
2840 PRINT AT 21,7; PAPER 5;"GAMBLE OR COLLECT"
2850 GO SUB 2870: RETURN
2870 LET S$="???": LET T$=" ": LET CL=N1: LET R=18: LET C=13: GO SUB 1000: RETURN
2880 FOR I=N1 TO 15: NEXT I: RETURN
3100 REM handle jokers
3110 LET JO=N0: FOR I=N1 TO PI: LET V=V(I)
3120 IF V>4 THEN LET FV=V: GO TO 3150
3130 LET JW=I: LET JO=JO+N1: IF C(V)>N0 THEN GO TO 3150
3140 PRINT AT 7,D(V); PAPER N3;" ": LET C(V)=20: LET NJ=NJ-N1
3150 NEXT I: LET DO=(NJ=N0): IF DO THEN LET DC=15: PRINT AT 6,11;"DOUBLE!";
3160 REM RETURN
3200 REM compute winnings
3210 LET HV=5: GO TO (3220 AND JO=N0)+(3250 AND JO=N1)+(3220 AND JO=N2)+(3270 AND JO=N3)
3220 LET HV=FV
3230 GO TO 3270
3250 LET V(4)=15: LET JR=JW+N1: LET JL=JW-N1: IF NOT JL THEN LET JL=4
3260 LET HV=V(JR): IF V(JR)>V(JL) THEN LET HV=V(JL)
3270 FOR I=N1 TO N3: LET K(I)=V(I): IF V(I)<5 THEN LET K(I)=HV
3280 NEXT I: IF K(N1)<>K(N2) OR K(N2)<>K(N3) THEN GO TO 3300
3290 IF J(K(N1)) THEN LET JA=N1: LET JC=15: GO SUB 1400
3300 LET W1=N0: LET W2=N0
3310 FOR I=N1 TO N3: IF K(I)=13 THEN LET W1=W1+N1
3320 NEXT I: LET NS=N1+(K(N1)=K(N2))+(K(N2)=K(N3)): LET W2=R(NS,K(N2))
3330 LET W1=W2: IF W1>WI THEN LET WI=W1
3340 IF JA AND WI>N0 AND WI<10 THEN LET WI=10
3350 IF DO THEN LET WI=WI*N2
3360 RETURN
3400 REM bet here
3410 LET DT=N1: LET G(N1)=WI*N2: LET G(N2)=N0: LET G(N3)=INT (N3*WI/N2): LET G(4)=INT (WI/N2)
3420 LET NG=NG+N1: GO SUB 1300: PRINT AT 21,12; PAPER 5;"STOP"
3430 FOR I=N1 TO PI: PRINT AT I,8; PAPER 6;" ": NEXT I
3440 LET R=R+N1: IF R>4 THEN LET R=N1
3450 PRINT AT E(R,N1),E(R,N2); PAPER 6;G(R): BEEP .003,10+3*R
3460 IF I$<>"S" AND I$<>"s" THEN LET I$=INKEY$: GO TO 3480
3470 LET DT=(N1+RND*250)
3475 FOR I=N1 TO DT: NEXT I: IF DT>200 THEN GO TO 3490
3480 PRINT AT E(R,N1),E(R,N2); PAPER 6;" ": GO TO 3440
3490 FOR I=N1 TO PI: PRINT AT I,8;TAB 31;: NEXT I
3500 LET GW=GW+G(R)-WI: LET WI=G(R): RETURN
4000 REM MAIN PROGRAM
4010 GO SUB 6000: REM SET UP
4020 GO SUB 2300: REM ADAPT
4030 LET CA=N2*HB+(MO>N1)+N1: GO SUB (2500 AND CA=N1)+(2600 AND CA=N2)+(2500 AND CA=N3)+(2700 AND CA=4)
4040 PRINT AT PI,8;TAB 31;: LET CA=(I$="I" OR I$="i")+N2*(I$="P" OR I$="p")+N3*(I$="E" OR I$="e")
4050 GO TO (4030 AND CA=N0)+(4100 AND CA=N1)+(4200 AND CA=N2)+(4700 AND CA=N3)
4100 LET NI=NI+N1: LET IN=4: GO SUB 1100: IF MO>MM THEN LET MM=MO
4110 GO TO 4030
4200 LET IN=-N2: GO SUB 1100
4210 GO SUB 2000: REM play
4230 GO SUB 3100: REM joker
4240 REM GO SUB 3200: REM winnings
4250 IF H(N1)+H(N2)+H(N3)>N0 THEN GO TO 4270
4260 LET HB=N0: LET LW=WI: GO TO (4290 AND WI>N0)+(4020 AND WI<=N0)
4270 LET HB=N1: IF WI>LW THEN GO TO 4290
4275 IF NOT LW THEN GO TO 4020
4290 PRINT AT N3,10; PAPER 6;"YOU WON ";WI: FOR I=N1 TO WI: BEEP .1,20: NEXT I
4300 IF MO<N2 THEN LET HB=N1
4310 GO SUB 2800: REM get instructions
4320 LET CA=((I$="H" OR I$="h") AND NOT HB)+N2*(i$="G" OR I$="g")+N3*(i$="C" OR i$="c")
4330 GO TO (4310 AND CA=N0)+(4600 AND CA=N1)+(4500 AND CA=N2)+(4400 AND CA=N3)
4400 LET IN=WI: GO SUB 1100: GO TO 4020
4500 LET HB=N1: GO SUB 3400: REM gamble
4510 IF WI>N0 THEN GO TO 4290
4520 GO TO 4280
4600 LET WI=N0: GO TO 4020
5600 REM STOP GAME
5610 CLS : PRINT '"AMOUNT OF MONEY"''
5620 PRINT " PUT IN :";: LET X=NI: GO SUB 5800
5630 PRINT " GOT BACK:";: LET X=MO/4: GO SUB 5800
5640 PRINT " MAX AT ONE TIME:";: LET X=MM/4: GO SUB 5800
5650 IF GW>=n0 THEN PRINT " WON BY GAMBLING:";: LET X=GW/4: GO SUB 5800
5660 IF GW<n0 THEN PRINT " LOST BY GAMBLING:";: LET X=-GW/4: GO SUB 5800
5670 PRINT ''"NUMBER OF HOLDS:";: LET X=NH: GO SUB 5900
5680 PRINT "NUMBER OF GAMBLES:";: LET X=NG: GO SUB 5900
5700 STOP
5800 LET L=LEN STR$ X-LEN STR$ INT X
5805 PRINT TAB 18;"$";
5810 LET X$=STR$ X+("0" AND L=N2)+(".00" AND L=N0)
5820 FOR I=LEN X$ TO 5: PRINT " ";: NEXT I: PRINT X$: RETURN
5900 PRINT TAB 19;: FOR I=LEN STR$ X TO N2: PRINT " ";: NEXT I: PRINT X: RETURN
6000 READ N0,N1,N2,N3,W$
6100 DIM R(N3,13): DIM J(13): LET J(5)=N1: LET J(6)=N1: LET J(7)=N1
6110 DATA 0,1,2,3,"AKQJ7*$0/=+#%"
6120 FOR I=5 TO 12: READ R(N2,I),R(N3,I): NEXT I
6130 DATA 8,40,8,40,7,30,5,25,N3,20,N3,20,N2,10,N2,10
6140 DIM H(N3): DIM P(N3): DIM C(4): DIM D(4)
6150 DIM K(N3): DIM V(4): DIM O(N3): DIM A(N3)
6160 DIM F(N3): DIM G(4): DIM E(4,N2)
6170 FOR I=N1 TO PI: READ P(I): LET V(I)=INT (RND*14): NEXT I
6180 FOR i=N1 TO 4: READ d(i),e(i,N1),e(i,N2): NEXT i
6190 DATA 12,14,16,12,N1,14,13,N2,20,15,N3,14,16,N2,9
6200 LET b$=" "
6209 READ NT,NJ,NI,WI,HB,DO,DC,JA,JC,MO,MM,R,GW,NH,NG
6211 DATA -N1,4,N0,N0,N0,N0,N0,N0,N0,N0,N0,N0,N0,N0,N0
6245 FOR I=N0 TO 7: READ A
6250 POKE USR "\a"+I,A: NEXT I
6260 DATA 8,8,20,32,32,20,8,8
6300 REM DRAW SCREEN$
6310 CLS : PRINT AT 4,13;"25\a";TAB 11; PAPER N3;" "
6315 PRINT TAB 20; PAPER N2;" "
6320 FOR I=N1 TO 4: PRINT TAB 10; PAPER N3;" "; PAPER N2;" "; PAPER N3;" ";
6325 PRINT TAB 20; PAPER N3;" ": NEXT I
6330 PRINT AT 10,19; PAPER N3;" "
6335 PRINT TAB 11; PAPER 5;" "
6340 FOR I=N0 TO N2: PRINT AT 9,12+N2*I; PAPER 6;" "
6360 PRINT AT 11,12+N2*I; PAPER N2;" ": NEXT I
6370 FOR I=N0 TO 4: PRINT TAB 12; PAPER 5;" ": NEXT I
6371 PRINT TAB 11; PAPER N1;" ": PRINT TAB 10; PAPER N1;" "
6400 PRINT AT 8,N0;"--%- = 1";
6410 FOR I=12 TO 5 STEP -N1
6420 LET I$=W$(I)
6430 PRINT AT 21-I,N0;"-";I$;I$;"- = ";R(N2,I);AT 21-I,22;I$;I$;I$;" =";R(N3,I);
6440 IF J(I) THEN PRINT "+J"
6450 NEXT I: RETURN
6500 SAVE "SLOT" LINE PI
Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.
