10 REM Roul8 20 REM by Graham Kendall 30 : 40 GOSUB 140 :REM Init_1 Procedure 50 WHILE NEWGAME% = 0 60 GOSUB 240 :REM Init_2 Routine 70 GOSUB 380 :REM Initial Screen Routine 80 GOSUB 990 :REM Game Control Routine 90 GOSUB 6000 :REM Press Space Routine 100 GOSUB 7000 : REM Ask Question Routine 110 WEND 120 END 130 : 140 REM Init_1 Routine 150 DIM NUMCTRL%(3), BETCTRL%(3,7), COLOURS$(36), CRNTBET%(3), STAKEPLAN%(2), MONEY%(3), DESC$(3,2), LOSSES%(3), WINS%(3) 160 FOR I% = 0 TO 36:READ COLOURS$(I%):NEXT I% 170 FOR I% = 1 TO 3 180 FOR P% = 1 TO 2 190 READ DESC$(I%,P%) 200 NEXT P% 210 NEXT I% 220 RETURN 230 : 240 REM Init_2 Routine 250 NUM$ = "" 260 FOR INDEX% = 1 TO 3 270 MONEY%(INDEX%) = 0 280 LOSSES%(INDEX%) = 0 290 WINS%(INDEX%) = 0 300 GOSUB 1270 :REM Reset Routine 310 NEXT INDEX% 320 GOSUB 560 :REM How many Losses Routine 330 GOSUB 660 :REM Starting Stake Routine 340 GOSUB 790 :REM Action after Win Routine 350 GOSUB 890 :REM Action after Loss Routine 360 RETURN 370 : 380 REM Initial Screen Routine 390 CLS:GOSUB 6500 :REM Print Heading Routine 400 TEXT$ = "Number of Losses =" + STR$(LOSSLIMIT%) 410 DOWN% = 4:ACROSS% = 1:GOSUB 5500 :REM Print Text Routine 420 TEXT$ = "Initial Stake =" + STR$(INITSTAKE%) 430 DOWN% = 5:ACROSS% = 1:GOSUB 5500 :REM Print Text Routine 440 TEXT$ = "Action after WIN = " + STR$(STAKEPLAN%(1)) 450 DOWN% = 6:ACROSS% = 1:GOSUB 5500 :REM Print Text Routine 460 TEXT$ = "Action after LOSS = " + STR$(STAKEPLAN%(2)) 470 DOWN% = 7:ACROSS% = 1:GOSUB 5500 :REM Print Text Routine 480 TEXT$ = LEFT$("Odd/Even" + STRING$(15," "),15) 490 TEXT$ = LEFT$(TEXT$ + "High/Low" + STRING$(15," "),30) 500 TEXT$ = LEFT$(TEXT$ + "Red/Black" + STRING$(15," "),45) 510 DOWN% = 8:ACROSS% = 30:GOSUB 5500 :REM Print Text Routine 520 TEXT$ = "Numbers that appeared" 530 DOWN% = 20:ACROSS% = 1:GOSUB 5500 :REM Print Text Routine 540 RETURN 550 : 560 REM How Many Losses Routine 570 LOSSLIMIT% = 0 580 WHILE LOSSLIMIT% < 1 590 CLS:GOSUB 6500 :REM Print Heading Routine 600 TEXT$ = "How many Losses before stopping betting ( >0 )" 610 DOWN% = 10:GOSUB 2130 :REM Centre Text Routine 620 INPUT LOSSLIMIT% 630 WEND 640 RETURN 650 : 660 REM Starting Stake Routine 670 CRNTBET%(1) = 0 680 WHILE CRNTBET%(1) < 1 690 CLS:GOSUB 6500 :REM Print Heading Routine 700 TEXT$ = "What should the first stake be ( >0 )" 710 DOWN% = 10:GOSUB 2130 :REM Centre Text Routine 720 INPUT CRNTBET%(1) 730 WEND 740 CRNTBET%(2) = CRNTBET%(1) 750 CRNTBET%(3) = CRNTBET%(1) 760 INITSTAKE% = CRNTBET%(1) 770 RETURN 780 : 790 REM Action After Win Routine 800 STAKEPLAN%(1) = -101 810 WHILE (STAKEPLAN%(1) > 100) OR (STAKEPLAN%(1) < -100) 820 CLS:GOSUB 6500 :REM Print Heading Routine 830 TEXT$ = "How should the bet be adjusted after a WIN (100 to -100)" 840 DOWN% = 10:GOSUB 2130 :REM Centre Text Routine 850 INPUT STAKEPLAN%(1) 860 WEND 870 RETURN 880 : 890 REM Action after Loss Routine 900 STAKEPLAN%(2) = -101 910 WHILE (STAKEPLAN%(2) > 100) OR (STAKEPLAN%(2) < -100) 920 CLS:GOSUB 6500 :REM Print Heading Routine 930 TEXT$ = "How should the bet be adjusted after a LOSS (100 to -100)" 940 DOWN% = 10:GOSUB 2130 :REM Centre Text Routine 950 INPUT STAKEPLAN%(2) 960 WEND 970 RETURN 980 : 990 REM Game Control Routine 1000 STOPBETTING% = 0 1010 WHILE STOPBETTING% =0 1020 GOSUB 7500 :REM Random Number Routine 1030 GOSUB 1130 :REM Classify Numbers Routine 1040 FOR INDEX% = 1 TO 3 1050 IF BETCTRL%(INDEX%,1) >0 THEN GOSUB 1440 :REM Bet Control Routine 1060 IF BETCTRL%(INDEX%,1) =0 THEN GOSUB 1200 :REM Monitor Bets Routine 1070 NEXT INDEX% 1080 GOSUB 1730 :REM Update Screen Routine 1090 IF (BETCTRL%(1,1) = -1) AND (BETCTRL%(2,1) = -1) AND (BETCTRL%(3,1) = -1) THEN STOPBETTING% = -1 1100 WEND 1110 RETURN 1120 : 1130 REM Classify Numbers Routine 1140 IF INT((NUM%)/2)*2 = NUM% THEN NUMCTRL%(1) = 1 ELSE NUMCTRL%(1) = 2 1150 IF NUM% > 18 THEN NUMCTRL%(2) = 1 ELSE NUMCTRL%(2) = 2 1160 IF COLOURS$(NUM%) = "R" THEN NUMCTRL%(3) = 1 ELSE NUMCTRL%(3) = 2 1170 IF NUM% = 0 THEN FOR I% = 1 TO 3:NUMCTRL%(I%) = 0:NEXT 1180 RETURN 1190 : 1200 REM Monitor Bets Routine 1210 BETCTRL%(INDEX%,BETCTRL%(INDEX%,2)) = NUMCTRL%(INDEX%) 1220 IF BETCTRL%(INDEX%,2) > 5 THEN GOSUB 1370 :REM Work Out Bet Routine 1230 BETCTRL%(INDEX%,2) = BETCTRL%(INDEX%,2) +1 1240 IF NUM% = 0 THEN GOSUB 1270 :REM Reset Routine 1250 RETURN 1260 : 1270 REM Reset Routine 1280 BETCTRL%(INDEX%,1) = 0 1290 BETCTRL%(INDEX%,2) = 5 1300 BETCTRL%(INDEX%,3) = 0 1310 BETCTRL%(INDEX%,4) = 0 1320 BETCTRL%(INDEX%,5) = 0 1330 BETCTRL%(INDEX%,6) = 0 1340 BETCTRL%(INDEX%,7) = 0 1350 RETURN 1360 : 1370 REM Work Out Bet Routine 1380 IF BETCTRL%(INDEX%,5) + BETCTRL%(INDEX%,6) = 2 THEN BETCTRL%(INDEX%,1) = 1 1390 IF (BETCTRL%(INDEX%,5) + BETCTRL%(INDEX%,6) = 4) AND (BETCTRL%(INDEX%,2) = 6) THEN BETCTRL%(INDEX%,1) = 1 1400 IF BETCTRL%(INDEX%,5) = BETCTRL%(INDEX%,7) THEN BETCTRL%(INDEX%,1) = 2 1410 IF BETCTRL%(INDEX%,1) = 0 AND BETCTRL%(INDEX%,2) = 7 THEN BETCTRL%(INDEX%,1) = 1 1420 RETURN 1430 : 1440 REM Bet Control Routine 1450 IF BETCTRL%(INDEX%,1) = 1 THEN GOSUB 1480 ELSE GOSUB 1520 :REM Back same Bet ELSE Alternate Bet 1460 RETURN 1470 : 1480 REM Back Same Bet Routine 1490 IF BETCTRL%(INDEX%,6) = NUMCTRL%(INDEX%) THEN GOSUB 1570 ELSE GOSUB 1640 :REM Win or Lose Routine 1500 RETURN 1510 : 1520 REM Alternate Bet Routine 1530 IF BETCTRL%(INDEX%,7) = 1 THEN BETCTRL%(INDEX%,7) = 2 ELSE BETCTRL%(INDEX%,7) = 1 1540 IF BETCTRL%(INDEX%,7) = NUMCTRL%(INDEX%) THEN GOSUB 1570 ELSE GOSUB 1640 :REM Win or Lose Routine 1550 RETURN 1560 : 1570 REM Win Routine 1580 WINS%(INDEX%) = WINS%(INDEX%) +1 1590 MONEY%(INDEX%) = MONEY%(INDEX%) + CRNTBET%(INDEX%) 1600 CRNTBET%(INDEX%) = CRNTBET%(INDEX%) + STAKEPLAN%(1) 1610 IF CRNTBET%(INDEX%) < 1 THEN CRNTBET%(INDEX%) = INITSTAKE% 1620 RETURN 1630 : 1640 REM Lose Routine 1650 LOSSES%(INDEX%) = LOSSES%(INDEX%) +1 1660 MONEY%(INDEX%) = MONEY%(INDEX%) - CRNTBET%(INDEX%) 1670 CRNTBET%(INDEX%) = CRNTBET%(INDEX%) + STAKEPLAN%(2) 1680 IF CRNTBET%(INDEX%) < 1 THEN CRNTBET%(INDEX%) = INITSTAKE% 1690 BETCTRL%(INDEX%,4) = BETCTRL%(INDEX%,4) +1 1700 IF BETCTRL%(INDEX%,4) = LOSSLIMIT% THEN BETCTRL%(INDEX%,1) = -1 1710 RETURN 1720 : 1730 REM Update Screen Routine 1740 TEXT$ = LEFT$("Betting on" + STRING$(29," "),29) 1750 FOR I% = 1 TO 3 1760 IF BETCTRL%(I%,1) = -1 THEN TEMP$ = LEFT$("Stopped" + STRING$(15," "),15) 1770 IF BETCTRL%(I%,1) = 0 THEN TEMP$ = LEFT$("Nothing" + STRING$(15," "),15) 1780 IF BETCTRL%(I%,1) = 1 THEN TEMP$ = LEFT$(DESC$(I%,BETCTRL%(I%,6)) + STRING$(15," "),15) 1790 IF BETCTRL%(I%,1) = 2 THEN TEMP$ = LEFT$("Alternate" + STRING$(15," "),15) 1800 TEXT$ = TEXT$ + TEMP$ 1810 NEXT I% 1820 DOWN% = 9:ACROSS% = 1:GOSUB 5500 :REM Print Text Routine 1830 TEXT$ = LEFT$("Number of Wins" + STRING$(29," "),29) 1840 FOR I% = 1 TO 3 1850 TEXT$ = TEXT$ + LEFT$(STR$(WINS%(I%)) + STRING$(15," "),15) 1860 NEXT I% 1870 DOWN% = 11:ACROSS% = 1:GOSUB 5500 :REM Print Text Routine 1880 TEXT$ = LEFT$("Number of Losses" + STRING$(29," "),29) 1890 FOR I% = 1 TO 3 1900 TEXT$ = TEXT$ + LEFT$(STR$(LOSSES%(I%)) + STRING$(15," "),15) 1910 NEXT I% 1920 DOWN% = 12:ACROSS% = 1:GOSUB 5500 :REM Print Text Routine 1930 TEXT$ = LEFT$("Money" + STRING$(29," "),29) 1940 FOR I% = 1 TO 3 1950 TEXT$ = TEXT$ + LEFT$(STR$(MONEY%(I%)) + STRING$(15," "),15) 1960 NEXT I% 1970 DOWN% = 14:ACROSS% = 1:GOSUB 5500 :REM Print Text Routine 1980 TEXT$ = LEFT$("Current Bet" + STRING$(29," "),29) 1990 FOR I% = 1 TO 3 2000 TEXT$ = TEXT$ + LEFT$(STR$(CRNTBET%(I%)) + STRING$(15," "),15) 2010 NEXT I% 2020 DOWN% = 15:ACROSS% = 1:GOSUB 5500 :REM Print Text Routine 2030 TOTALMONEY% = 0 2040 FOR I% = 1 TO 3 2050 TOTALMONEY% = TOTALMONEY% + MONEY%(I%) 2060 NEXT I% 2070 TEXT$ = LEFT$("Total Value of Bank = " + STR$(TOTALMONEY%) + STRING$(28," "),28) 2080 DOWN% = 18:GOSUB 5000 :REM Centre Text Routine 2090 NUM$ = RIGHT$(NUM$ + " " + STR$(NUM%),79) 2100 TEXT$ = NUM$ 2110 DOWN% = 21:ACROSS% = 1:GOSUB 5500 :REM Print Text Routine 2120 RETURN 2130 : 5000 REM Print Centred Text Routine 5010 PRINT CHR$(11) 5020 FOR I% = 1 TO DOWN% -1:PRINT CHR$(10);:NEXT 5030 ACROSS% = (79-LEN(TEXT$))/2 5040 PRINT TAB(ACROSS%);TEXT$ 5050 RETURN 5060 : 5500 REM Print Text on Screen Routine 5510 PRINT CHR$(11) 5520 FOR I% = 1 TO DOWN% -1:PRINT CHR$(10);:NEXT 5530 PRINT TAB(ACROSS%);TEXT$ 5540 RETURN 5550 : 6000 REM Press Space Routine 6010 TEXT$ = "Press Space to Continue" 6020 DOWN% = 22:GOSUB 5000 : REM Centre Text Routine 6030 WHILE INKEY$ <> " " 6040 WEND 6050 RETURN 6060 : 6500 REM Print Heading Routine 6510 TEXT$ = "Roulette Program 8" 6520 DOWN% = 2:GOSUB 5000 : REM Centre Text Routine 6530 RETURN 6540 : 7000 REM Ask Question Routine 7010 A% = 0 7020 WHILE A% = 0:CLS:GOSUB 6500 :REM Print Heading Routine 7030 TEXT$ = "Do you want to play again?" 7040 DOWN% = 10:GOSUB 5000 :REM Centre Text Routine 7050 A$ = "" 7060 WHILE INSTR(" YyNn",A$) <2 7070 A$=INKEY$ 7080 WEND 7090 A%=INSTR("YyNn",A$) 7100 WEND 7110 IF A%=3 OR A%=4 THEN NEWGAME% = -1 7120 RETURN 7130 : 7500 REM Random Number Routine 7510 RANDOMIZE TIMER 7520 NUM% = INT(RND*(36+1)) 7530 RETURN 7540 : 7550 DATA X, R, B, R, B, R, B, R, B, R, B, B, R, B, R, B, R, B, R, R, B, R, B, R, B, R, B, R, B, B, R, B, R, B, R, B, R 7560 DATA "Even", "Odd", "High", "Low", "Red", "Black"