Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
QB64 Roulette
#1
Unzip the file and extract the folder into your PEQB64 directory.  In the IDE make sure that you have the Run Option “Save EXE in source folder” checked.

.zip   QB64 Roulette.zip (Size: 3.47 MB / Downloads: 13)


   
This program is a graphical simulation of the game of Roulette where bets are placed against a ball falling into slots of a spinning wheel.

You place bets and await the outcome.  The number and types of bets you can place in the game are complex, and so a User Manual in included if you wish to play seriously.

.pdf   QB64 Roulette User Manual.pdf (Size: 359.84 KB / Downloads: 12)

Good luck!

The video shows the running program:





Code: (Select All)
'Roulette Simulation by Magdha 2025-12-15 ex Qwerkey
'Clipart & Images from ripleys.com
'Sounds from freesfx.co.uk & findsounds.com

CONST False = 0, True = NOT False
CONST Sector! = (2 * _PI) / 38, BallHalfDiam%% = 18, XScreen% = 1300, YScreen% = 820
CONST XRoule% = 400, YRoule% = 410, RRoule% = 390, Inset! = 0.87, SlotInset! = 0.5, WinSize% = 80, RienSize% = 120
DIM Slots%%(38), TheBets%%(62, 37), BettingOdds!(63), PlacedStake%%(2, 3), Dollars&(9), Posn1%(62, 1), Posn2%(37, 1)
_TITLE ("QB64 Roulette")

'Images
$EXEICON:'.\roulette.ico'
Wheel& = _LOADIMAGE("Roulette Wheel.png", 33)
Ball& = _LOADIMAGE("Billiard Ball.png", 33)
W% = _WIDTH(Wheel&) - 1
TempImg& = _NEWIMAGE(XScreen%, YScreen%, 32)
_DEST TempImg&
COLOR _RGB32(200, 200, 200), _RGB32(34, 91, 121)
CLS
_PUTIMAGE (842, 0)-(XScreen% - 1, YScreen% - 1), _LOADIMAGE("Roulette Table.png", 32)
BackGround& = HardwareImage&(TempImg&)
TempImg& = _NEWIMAGE(51, 51, 32)
_DEST TempImg&
COLOR _RGB32(205, 127, 50)
CIRCLE (25, 25), 25
PAINT (25, 25)
FOR N%% = 1 TO 24
    Phi! = 2 * N%% * _PI / 24
    PSET (25 + CINT(25 * COS(Phi!)), 25 + CINT(25 * SIN(Phi!))), _RGB32(103, 63, 25)
NEXT N%%
CIRCLE (25, 25), 23, _RGB32(103, 63, 25)
COLOR _RGB32(103, 63, 25), _RGB32(205, 127, 50)
_PRINTSTRING (18, 18), "10"
Bronze& = HardwareImage&(TempImg&)
TempImg& = _NEWIMAGE(51, 51, 32)
_DEST TempImg&
COLOR _RGB32(205, 127, 50), _RGB32(10, 10, 10)
CLS
CIRCLE (25, 25), 25
PAINT (25, 25)
FOR N%% = 1 TO 24
    Phi! = 2 * N%% * _PI / 24
    PSET (25 + CINT(25 * COS(Phi!)), 25 + CINT(25 * SIN(Phi!))), _RGB32(103, 63, 25)
NEXT N%%
CIRCLE (25, 25), 23, _RGB32(103, 63, 25)
COLOR _RGB32(103, 63, 25), _RGBA32(205, 127, 50, 0)
_PRINTSTRING (18, 18), "10"
_SETALPHA 90
_SETALPHA 0, _RGBA32(10, 10, 10, 90)
AlphaBronze& = HardwareImage&(TempImg&)
TempImg& = _NEWIMAGE(51, 51, 32)
_DEST TempImg&
COLOR _RGB32(196, 199, 206)
CIRCLE (25, 25), 25
PAINT (25, 25)
FOR N%% = 1 TO 24
    Phi! = 2 * N%% * _PI / 24
    PSET (25 + CINT(25 * COS(Phi!)), 25 + CINT(25 * SIN(Phi!))), _RGB32(98, 100, 103)
NEXT N%%
CIRCLE (25, 25), 23, _RGB32(98, 100, 103)
COLOR _RGB32(98, 100, 103), _RGB32(196, 199, 206)
_PRINTSTRING (18, 18), "20"
Silver& = HardwareImage&(TempImg&)
TempImg& = _NEWIMAGE(51, 51, 32)
_DEST TempImg&
COLOR _RGB32(196, 199, 206), _RGB32(10, 10, 10)
CLS
CIRCLE (25, 25), 25
PAINT (25, 25)
FOR N%% = 1 TO 24
    Phi! = 2 * N%% * _PI / 24
    PSET (25 + CINT(25 * COS(Phi!)), 25 + CINT(25 * SIN(Phi!))), _RGB32(98, 100, 103)
NEXT N%%
CIRCLE (25, 25), 23, _RGB32(98, 100, 103)
COLOR _RGB32(98, 100, 103), _RGB32(196, 199, 206)
_PRINTSTRING (18, 18), "20"
_SETALPHA 90
_SETALPHA 0, _RGBA32(10, 10, 10, 90)
AlphaSilver& = HardwareImage&(TempImg&)
TempImg& = _NEWIMAGE(51, 51, 32)
_DEST TempImg&
COLOR _RGB32(212, 175, 55)
CIRCLE (25, 25), 25
PAINT (25, 25)
FOR N%% = 1 TO 24
    Phi! = 2 * N%% * _PI / 24
    PSET (25 + CINT(25 * COS(Phi!)), 25 + CINT(25 * SIN(Phi!))), _RGB32(106, 88, 28)
NEXT N%%
CIRCLE (25, 25), 23, _RGB32(106, 88, 28)
COLOR _RGB32(106, 88, 28), _RGB32(212, 175, 55)
_PRINTSTRING (18, 18), "50"
Gold& = HardwareImage&(TempImg&)
TempImg& = _NEWIMAGE(51, 51, 32)
_DEST TempImg&
COLOR _RGB32(212, 175, 55), _RGB32(10, 10, 10)
CLS
CIRCLE (25, 25), 25
PAINT (25, 25)
FOR N%% = 1 TO 24
    Phi! = 2 * N%% * _PI / 24
    PSET (25 + CINT(25 * COS(Phi!)), 25 + CINT(25 * SIN(Phi!))), _RGB32(106, 88, 28)
NEXT N%%
CIRCLE (25, 25), 23, _RGB32(106, 88, 28)
COLOR _RGB32(106, 88, 28), _RGB32(212, 175, 55)
_PRINTSTRING (18, 18), "50"
_SETALPHA 90
_SETALPHA 0, _RGBA32(10, 10, 10, 90)
AlphaGold& = HardwareImage&(TempImg&)
TempImg& = _NEWIMAGE(80, 100, 32)
_DEST TempImg&
COLOR _RGB32(170, 170, 170), _RGB32(34, 91, 171)
CLS
F& = _LOADFONT("tahomabd.ttf", 26)
_FONT F&
_PRINTSTRING (4, 8), "Q"
_PRINTSTRING (24, 28), "U"
_PRINTSTRING (42, 48), "I"
_PRINTSTRING (58, 68), "T"
_FONT 16
_FREEFONT F&
LINE (0, 0)-(79, 99), , B
LINE (1, 1)-(78, 98), , B
Quit& = HardwareImage&(TempImg&)
TempImg& = _NEWIMAGE(RienSize%, RienSize%, 32)
_DEST TempImg&
COLOR _RGB32(255, 255, 255), _RGB32(34, 91, 181)
CLS
F& = _LOADFONT("tahomabd.ttf", 30)
_FONT F&
_PRINTSTRING (16, 10), "Rien"
_PRINTSTRING (16, 44), "Ne Va"
_PRINTSTRING (16, 78), "Plus"
_FONT 16
_FREEFONT F&
FOR N%% = 1 TO 5
    LINE (N%% - 1, N%% - 1)-(RienSize% - N%%, RienSize% - N%%), , B
NEXT N%%
Rien& = HardwareImage&(TempImg&)
TempImg& = _NEWIMAGE(174, 62, 32)
_DEST TempImg&
COLOR _RGB32(200, 200, 200), _RGB32(34, 91, 171)
CLS
F& = _LOADFONT("tahomabd.ttf", 50)
_FONT F&
_PRINTSTRING (4, 6), "$"
LINE (0, 0)-(173, 61), , B
LINE (1, 1)-(172, 60), , B
_FONT 16
_FREEFONT F&
Riches& = HardwareImage&(TempImg&)
FOR N%% = 0 TO 9
    TempImg& = _NEWIMAGE(34, 62, 32)
    _DEST TempImg&
    COLOR _RGB32(200, 200, 200), _RGBA32(34, 91, 171, 0)
    CLS
    F& = _LOADFONT("tahomabd.ttf", 50)
    _FONT F&
    _PRINTSTRING (4, 6), LTRIM$(STR$(N%%))
    _FONT 16
    _FREEFONT F&
    Dollars&(N%%) = HardwareImage&(TempImg&)
NEXT N%%
TempImg& = _NEWIMAGE(2 * WinSize% + 1, 2 * WinSize% + 1, 32)
_DEST TempImg&
COLOR _RGB32(200, 200, 200), _RGB32(255, 255, 50)
CLS
F& = _LOADFONT("tahomabd.ttf", 60)
_FONT F&
_PRINTSTRING (20, 20), "You"
_PRINTSTRING (20, 90), "Win"
_FONT 16
_FREEFONT F&
LINE (0, 0)-(2 * WinSize%, 2 * WinSize%), _RGB32(200, 200, 0), B
LINE (1, 1)-(2 * WinSize% - 1, 2 * WinSize% - 1), _RGB32(215, 215, 0), B
LINE (1, 1)-(2 * WinSize% - 2, 2 * WinSize% - 2), _RGB32(230, 215, 0), B
Winner& = HardwareImage&(TempImg&)
'All data
FOR N%% = 1 TO 62
    SELECT CASE N%%
        CASE 1 TO 4, 61 TO 62
            Posn1%(N%%, 0) = 911
            SELECT CASE N%%
                CASE 61
                    Posn1%(N%%, 1) = 138
                CASE 62
                    Posn1%(N%%, 1) = 692
                CASE ELSE
                    Posn1%(N%%, 1) = 138 + N%% * 111
            END SELECT
        CASE 5 TO 7
            Posn1%(N%%, 0) = 990
            Posn1%(N%%, 1) = 120 + (N%% - 5) * 222
        CASE 8 TO 10
            Posn1%(N%%, 1) = 774
            Posn1%(N%%, 0) = 1055 + (N%% - 8) * 74
        CASE 11
            Posn1%(N%%, 0) = 990
            Posn1%(N%%, 1) = 65
        CASE 12 TO 23
            Posn1%(N%%, 0) = 1262
            Posn1%(N%%, 1) = 108 + CINT((N%% - 12) * 55.5)
        CASE 24 TO 26
            Posn1%(N%%, 1) = 81
            Posn1%(N%%, 0) = 1092 + (N%% - 24) * 37
        CASE 27
            Posn1%(N%%, 0) = 1128
            Posn1%(N%%, 1) = 49
        CASE 28 TO 49
            Posn1%(N%%, 0) = 1092 + ((N%% - 28) MOD 2) * 74
            Posn1%(N%%, 1) = 136 + CINT(((N%% - 28) \ 2) * 55.5)
        CASE ELSE '50 TO 60
            Posn1%(N%%, 0) = 1262
            Posn1%(N%%, 1) = 136 + CINT((N%% - 50) * 55.5)
    END SELECT
NEXT N%%
FOR N%% = 0 TO 37
    SELECT CASE N%%
        CASE 0
            Posn2%(N%%, 1) = 49
            Posn2%(N%%, 0) = 1073
        CASE 37
            Posn2%(N%%, 1) = 49
            Posn2%(N%%, 0) = 1185
        CASE ELSE
            Posn2%(N%%, 0) = 1055 + ((N%% - 1) MOD 3) * 74
            Posn2%(N%%, 1) = 108 + CINT(((N%% - 1) \ 3) * 55.5)
    END SELECT
NEXT N%%
'Slot Definitions
DATA 0,28,9,26,30,11,7,20,32,17,5,22,34,15,3,24,36,13,1,37,27,10,25,29,12,8,19,31,18,6,21,33,16,4,23,35,14,2
FOR N%% = 1 TO 38
    READ Slots%%(N%%)
NEXT N%%

'Betting Odds
DATA 2.1111,2.1111,2.1111,2.1111
'4
DATA 3.1667,3.1667,3.1667
'7
DATA 3.1667,3.1667,3.1667
'10
DATA 3.1667
'11
DATA 12.3333,12.3333,12.3333,12.3333,12.3333,12.3333,12.3333,12.3333,12.3333,12.3333,12.3333,12.3333
'23
DATA 12.3333,12.3333,12.3333
'26
DATA 7.6
'27
DATA 9.5,9.5,9.5,9.5,9.5,9.5,9.5,9.5,9.5,9.5,9.5
'38
DATA 9.5,9.5,9.5,9.5,9.5,9.5,9.5,9.5,9.5,9.5,9.5
'49
DATA 6.3333,6.3333,6.3333,6.3333,6.3333,6.3333,6.3333,6.3333,6.3333,6.3333,6.3333
'60
DATA 2.1111,2.1111
'62
DATA 38
'63
FOR N%% = 1 TO 63
    READ BettingOdds!(N%%)
NEXT N%%
'Bet Types
'We're not doing Split Bets (adjacent pairs) - already have too many bet types!
DATA 2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36
FOR N%% = 1 TO 18 'Evens Pair
    READ DummyNo%
    TheBets%%(1, DummyNo%) = True
NEXT N%%
DATA 1,3,5,7,9,12,14,16,18,19,21,23,25,27,30,32,34,36
FOR N%% = 1 TO 18 'Red Rouge
    READ DummyNo%
    TheBets%%(2, DummyNo%) = True
NEXT N%%
DATA 2,4,6,8,10,11,13,15,17,20,22,24,26,28,29,31,33,35
FOR N%% = 1 TO 18 'Black Noir
    READ DummyNo%
    TheBets%%(3, DummyNo%) = True
NEXT N%%
DATA 1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35
FOR N%% = 1 TO 18 'Odds Impair
    READ DummyNo%
    TheBets%%(4, DummyNo%) = True
NEXT N%%
DATA 1,2,3,4,5,6,7,8,9,10,11,12
FOR N%% = 1 TO 12 '1st 12 Premiere douzaine
    READ DummyNo%
    TheBets%%(5, DummyNo%) = True
NEXT N%%
DATA 13,14,15,16,17,18,19,20,21,22,23,24
FOR N%% = 1 TO 12 '2nd 12 Moyenne douzaine
    READ DummyNo%
    TheBets%%(6, DummyNo%) = True
NEXT N%%
DATA 25,26,27,28,29,30,31,32,33,34,35,36
FOR N%% = 1 TO 12 '3rd 12 Derniere douzaine
    READ DummyNo%
    TheBets%%(7, DummyNo%) = True
NEXT N%%
DATA 1,4,7,10,13,16,19,22,25,28,31,34
FOR N%% = 1 TO 12 '1st Column
    READ DummyNo%
    TheBets%%(8, DummyNo%) = True
NEXT N%%
DATA 2,5,8,11,14,17,20,23,26,29,32,35
FOR N%% = 1 TO 12 '2nd Column
    READ DummyNo%
    TheBets%%(9, DummyNo%) = True
NEXT N%%
DATA 3,6,9,12,15,18,21,24,27,30,33,36
FOR N%% = 1 TO 12 '3rd Column
    READ DummyNo%
    TheBets%%(10, DummyNo%) = True
NEXT N%%
DATA 1,5,9,12,14,16,19,23,27,30,32,34
FOR N%% = 1 TO 12 'Snake
    READ DummyNo%
    TheBets%%(11, DummyNo%) = True
NEXT N%%
DATA 1,2,3
FOR N%% = 1 TO 3 'Street1
    READ DummyNo%
    TheBets%%(12, DummyNo%) = True
NEXT N%%
DATA 4,5,6
FOR N%% = 1 TO 3 'Street2
    READ DummyNo%
    TheBets%%(13, DummyNo%) = True
NEXT N%%
DATA 7,8,9
FOR N%% = 1 TO 3 'Street3
    READ DummyNo%
    TheBets%%(14, DummyNo%) = True
NEXT N%%
DATA 10,11,12
FOR N%% = 1 TO 3 'Street4
    READ DummyNo%
    TheBets%%(15, DummyNo%) = True
NEXT N%%
DATA 13,14,15
FOR N%% = 1 TO 3 'Street5
    READ DummyNo%
    TheBets%%(16, DummyNo%) = True
NEXT N%%
DATA 16,17,18
FOR N%% = 1 TO 3 'Street6
    READ DummyNo%
    TheBets%%(17, DummyNo%) = True
NEXT N%%
DATA 19,20,21
FOR N%% = 1 TO 3 'Street7
    READ DummyNo%
    TheBets%%(18, DummyNo%) = True
NEXT N%%
DATA 22,23,24
FOR N%% = 1 TO 3 'Street8
    READ DummyNo%
    TheBets%%(19, DummyNo%) = True
NEXT N%%
DATA 25,26,27
FOR N%% = 1 TO 3 'Street9
    READ DummyNo%
    TheBets%%(20, DummyNo%) = True
NEXT N%%
DATA 28,29,30
FOR N%% = 1 TO 3 'Street10
    READ DummyNo%
    TheBets%%(21, DummyNo%) = True
NEXT N%%
DATA 31,32,33
FOR N%% = 1 TO 3 'Street11
    READ DummyNo%
    TheBets%%(22, DummyNo%) = True
NEXT N%%
DATA 34,35,36
FOR N%% = 1 TO 3 'Street12
    READ DummyNo%
    TheBets%%(23, DummyNo%) = True
NEXT N%%
DATA 0,1,2
FOR N%% = 1 TO 3 'Trio1
    READ DummyNo%
    TheBets%%(24, DummyNo%) = True
NEXT N%%
DATA 0,2,37
FOR N%% = 1 TO 3 'Trio2
    READ DummyNo%
    TheBets%%(25, DummyNo%) = True
NEXT N%%
DATA 2,3,37
FOR N%% = 1 TO 3 'Trio3
    READ DummyNo%
    TheBets%%(26, DummyNo%) = True
NEXT N%%
DATA 0,1,2,3,37
FOR N%% = 1 TO 5 'Top Line
    READ DummyNo%
    TheBets%%(27, DummyNo%) = True
NEXT N%%
DATA 1,2,4,5
FOR N%% = 1 TO 4 'Corner1
    READ DummyNo%
    TheBets%%(28, DummyNo%) = True
NEXT N%%
DATA 2,3,5,6
FOR N%% = 1 TO 4 'Corner2
    READ DummyNo%
    TheBets%%(29, DummyNo%) = True
NEXT N%%
DATA 4,5,7,8
FOR N%% = 1 TO 4 'Corner3
    READ DummyNo%
    TheBets%%(30, DummyNo%) = True
NEXT N%%
DATA 5,6,8,9
FOR N%% = 1 TO 4 'Corner4
    READ DummyNo%
    TheBets%%(31, DummyNo%) = True
NEXT N%%
DATA 7,8,10,11
FOR N%% = 1 TO 4 'Corner5
    READ DummyNo%
    TheBets%%(32, DummyNo%) = True
NEXT N%%
DATA 8,9,11,12
FOR N%% = 1 TO 4 'Corner6
    READ DummyNo%
    TheBets%%(33, DummyNo%) = True
NEXT N%%
DATA 10,11,13,14
FOR N%% = 1 TO 4 'Corner7
    READ DummyNo%
    TheBets%%(34, DummyNo%) = True
NEXT N%%
DATA 11,12,14,15
FOR N%% = 1 TO 4 'Corner8
    READ DummyNo%
    TheBets%%(35, DummyNo%) = True
NEXT N%%
DATA 13,14,16,17
FOR N%% = 1 TO 4 'Corner9
    READ DummyNo%
    TheBets%%(36, DummyNo%) = True
NEXT N%%
DATA 14,15,17,18
FOR N%% = 1 TO 4 'Corner10
    READ DummyNo%
    TheBets%%(37, DummyNo%) = True
NEXT N%%
DATA 16,17,19,20
FOR N%% = 1 TO 4 'Corner11
    READ DummyNo%
    TheBets%%(38, DummyNo%) = True
NEXT N%%
DATA 17,18,20,21
FOR N%% = 1 TO 4 'Corner12
    READ DummyNo%
    TheBets%%(39, DummyNo%) = True
NEXT N%%
DATA 19,20,22,23
FOR N%% = 1 TO 4 'Corner13
    READ DummyNo%
    TheBets%%(40, DummyNo%) = True
NEXT N%%
DATA 20,21,23,24
FOR N%% = 1 TO 4 'Corner14
    READ DummyNo%
    TheBets%%(41, DummyNo%) = True
NEXT N%%
DATA 22,23,25,26
FOR N%% = 1 TO 4 'Corner15
    READ DummyNo%
    TheBets%%(42, DummyNo%) = True
NEXT N%%
DATA 23,24,26,27
FOR N%% = 1 TO 4 'Corner16
    READ DummyNo%
    TheBets%%(43, DummyNo%) = True
NEXT N%%
DATA 25,26,28,29
FOR N%% = 1 TO 4 'Corner17
    READ DummyNo%
    TheBets%%(44, DummyNo%) = True
NEXT N%%
DATA 26,27,29,30
FOR N%% = 1 TO 4 'Corner18
    READ DummyNo%
    TheBets%%(45, DummyNo%) = True
NEXT N%%
DATA 28,29,31,32
FOR N%% = 1 TO 4 'Corner19
    READ DummyNo%
    TheBets%%(46, DummyNo%) = True
NEXT N%%
DATA 29,30,32,33
FOR N%% = 1 TO 4 'Corner20
    READ DummyNo%
    TheBets%%(47, DummyNo%) = True
NEXT N%%
DATA 31,32,34,35
FOR N%% = 1 TO 4 'Corner21
    READ DummyNo%
    TheBets%%(48, DummyNo%) = True
NEXT N%%
DATA 32,33,35,36
FOR N%% = 1 TO 4 'Corner22
    READ DummyNo%
    TheBets%%(49, DummyNo%) = True
NEXT N%%
DATA 1,2,3,4,5,6
FOR N%% = 1 TO 6 'Double Street1
    READ DummyNo%
    TheBets%%(50, DummyNo%) = True
NEXT N%%
DATA 4,5,6,7,8,9
FOR N%% = 1 TO 6 'Double Street2
    READ DummyNo%
    TheBets%%(51, DummyNo%) = True
NEXT N%%
DATA 7,8,9,10,11,12
FOR N%% = 1 TO 6 'Double Street3
    READ DummyNo%
    TheBets%%(52, DummyNo%) = True
NEXT N%%
DATA 10,11,12,13,14,15
FOR N%% = 1 TO 6 'Double Street4
    READ DummyNo%
    TheBets%%(53, DummyNo%) = True
NEXT N%%
DATA 13,14,15,16,17,18
FOR N%% = 1 TO 6 'Double Street5
    READ DummyNo%
    TheBets%%(54, DummyNo%) = True
NEXT N%%
DATA 16,17,18,19,20,21
FOR N%% = 1 TO 6 'Double Street6
    READ DummyNo%
    TheBets%%(55, DummyNo%) = True
NEXT N%%
DATA 19,20,21,22,23,24
FOR N%% = 1 TO 6 'Double Street7
    READ DummyNo%
    TheBets%%(56, DummyNo%) = True
NEXT N%%
DATA 22,23,24,25,26,27
FOR N%% = 1 TO 6 'Double Street8
    READ DummyNo%
    TheBets%%(57, DummyNo%) = True
NEXT N%%
DATA 25,26,27,28,29,30
FOR N%% = 1 TO 6 'Double Street9
    READ DummyNo%
    TheBets%%(58, DummyNo%) = True
NEXT N%%
DATA 28,29,30,31,32,33
FOR N%% = 1 TO 6 'Double Street10
    READ DummyNo%
    TheBets%%(59, DummyNo%) = True
NEXT N%%
DATA 31,32,33,34,35,36
FOR N%% = 1 TO 6 'Double Street11
    READ DummyNo%
    TheBets%%(60, DummyNo%) = True
NEXT N%%
DATA 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18
FOR N%% = 1 TO 18 '1-18
    READ DummyNo%
    TheBets%%(61, DummyNo%) = True
NEXT N%%
DATA 19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36
FOR N%% = 1 TO 18 '19-36
    READ DummyNo%
    TheBets%%(62, DummyNo%) = True
NEXT N%%

'Routine to Set Mouse Button (First Time Only)
_TITLE ("Set Mouse Button")
IF NOT _FILEEXISTS("mouse.cfg") THEN
    Mousey& = _LOADIMAGE("Danger.png", 32)
    SCREEN _NEWIMAGE(500, 500, 32)
    _SCREENMOVE 100, 100
    _DEST 0
    CLS
    _PUTIMAGE (50, 100), Mousey&
    LOCATE 2, 7
    PRINT "Click on the mouse below with your normal button";
    LOCATE 3, 5
    PRINT "Click (not double-click) to make this screen disappear";
    LOCATE 5, 6
    PRINT "There may be a delay - Please wait for next screen";
    CorrectButton%% = False
    WHILE NOT CorrectButton%%
        _LIMIT 60
        'Assumes hardware has mouse buttons, value <=5
        IF _MOUSEINPUT THEN
            CorrectButton%% = False
            MouseButton%% = 1
            WHILE NOT CorrectButton%% AND MouseButton%% <= 5
                IF _MOUSEBUTTON(MouseButton%%) THEN
                    CorrectButton%% = True
                ELSE
                    MouseButton%% = MouseButton%% + 1
                END IF
            WEND
        END IF
    WEND
    _FREEIMAGE Mousey&
    OPEN "mouse.cfg" FOR OUTPUT AS #2
    PRINT #2, MouseButton%%
    CLOSE #2
    _DELAY 0.2
    DO 'Make sure that mouse button is released
        Dum%% = _MOUSEINPUT
    LOOP UNTIL NOT _MOUSEBUTTON(MouseButton%%)
    _AUTODISPLAY
    CLS
    'Also a routine to rate processor would be good for future version
ELSE
    OPEN "mouse.cfg" FOR INPUT AS #1
    INPUT #1, MouseButton%%
    CLOSE #1
END IF

_TITLE ("QB64 Roulette - Esc to Quit")
SCREEN _NEWIMAGE(XScreen%, YScreen%, 32)
_DEST 0
_SCREENMOVE 0, 0
_DISPLAYORDER _HARDWARE
RANDOMIZE (TIMER)
Theta! = 2 * _PI * RND
Kitty! = 1000
Gambol%% = True
k$ = ""
_SNDLOOP _SNDOPEN("Ambience.ogg")
Rolling& = _SNDOPEN("B0.mp3")
Bounce& = _SNDOPEN("B1.mp3")
Settle& = _SNDOPEN("B2.mp3")

WHILE Gambol%%
    RANDOMIZE (TIMER)
    Phi! = _PI / 2
    VBall! = -0.015 - RND * 0.02
    VStop! = -0.004 + 0.001 * RND
    BallRad! = RRoule% * Inset!
    SlotRad! = RRoule% * SlotInset!
    Devn! = BallRad! - SlotRad!
    BAngle! = 0
    Amp! = 1
    BDecn%% = False
    VDecn! = 0.99 * RND
    VWheelStart! = 0.015 + 0.004 * RND
    VWheel! = VWheelStart!
    Bouncy% = 0
    DoBounce%% = False
    FindSlot%% = False
    InSlot%% = False
    VousGagnez%% = False
    RollEm%% = True
    'Place Bets
    BetsPlaced%% = False
    PickedUp%% = False
    NoBets%% = 0
    WHILE NOT BetsPlaced%%
        _LIMIT 25
        _PUTIMAGE (0, 0), BackGround&
        _PUTIMAGE (20, 20), Quit&
        X0Dash! = -RRoule% * COS(Theta!) + RRoule% * SIN(Theta!)
        Y0Dash! = -RRoule% * SIN(Theta!) - RRoule% * COS(Theta!)
        X1Dash! = RRoule% * COS(Theta!) + RRoule% * SIN(Theta!)
        Y1Dash! = RRoule% * SIN(Theta!) - RRoule% * COS(Theta!)
        X2Dash! = -RRoule% * COS(Theta!) - RRoule% * SIN(Theta!)
        Y2Dash! = -RRoule% * SIN(Theta!) + RRoule% * COS(Theta!)
        X3Dash! = RRoule% * COS(Theta!) - RRoule% * SIN(Theta!)
        Y3Dash! = RRoule% * SIN(Theta!) + RRoule% * COS(Theta!)
        XBall! = BallRad! * SIN(Phi!)
        YBall! = -BallRad! * COS(Phi!)
        _MAPTRIANGLE (0, 0)-(W%, 0)-(0, W%), Wheel& TO(X0Dash! + XRoule%, Y0Dash! + YRoule%)-(X1Dash! + XRoule%, Y1Dash! + YRoule%)-(X2Dash! + XRoule%, Y2Dash! + YRoule%)
        _MAPTRIANGLE (W%, W%)-(0, W%)-(W%, 0), Wheel& TO(X3Dash! + XRoule%, Y3Dash! + YRoule%)-(X2Dash! + XRoule%, Y2Dash! + YRoule%)-(X1Dash! + XRoule%, Y1Dash! + YRoule%)
        _PUTIMAGE (XBall! + XRoule% - BallHalfDiam%%, YBall! + YRoule% - BallHalfDiam%%)-(XBall! + XRoule% + BallHalfDiam%%, YBall! + YRoule% + BallHalfDiam%%), Ball&
        IF Kitty! >= 10 THEN _PUTIMAGE (740, 10), Bronze&
        IF Kitty! >= 30 THEN _PUTIMAGE (810, 10), Silver&
        IF Kitty! >= 80 THEN _PUTIMAGE (880, 10), Gold&
        _PUTIMAGE (650, YScreen% - 70), Riches&
        Qty$ = LTRIM$(STR$(CINT(Kitty!)))
        FOR N%% = 1 TO LEN(Qty$)
            _PUTIMAGE (650 + 34 + 32 * (N%% - 1), YScreen% - 70), Dollars&(VAL(MID$(Qty$, N%%, 1)))
        NEXT N%%
        WHILE _MOUSEINPUT
            XMouse% = _MOUSEX: YMouse% = _MOUSEY
            IF _MOUSEBUTTON(MouseButton%%) THEN
                IF XMouse% >= 25 AND XMouse% <= 95 AND YMouse% >= 25 AND YMouse% <= 115 THEN
                    'Quit
                    BetsPlaced%% = True
                    RollEm%% = False
                    Gambol%% = False
                ELSEIF XMouse% >= 870 - RienSize% AND XMouse% <= 850 AND YMouse% >= 88 AND YMouse% <= 188 AND NoBets%% > 0 AND NOT PickedUp%% THEN
                    'Spin Wheel
                    BetsPlaced%% = True
                ELSEIF NOT PickedUp%% AND NoBets%% < 3 THEN
                    'If over token then pick up that token
                    IF XMouse% >= 747 AND XMouse% <= 783 AND YMouse% >= 17 AND YMouse% <= 53 AND Kitty! >= 10 THEN
                        PickedUp%% = True
                        Stake%% = 10
                    ELSEIF XMouse% >= 817 AND XMouse% <= 853 AND YMouse% >= 17 AND YMouse% <= 53 AND Kitty! >= 30 THEN
                        PickedUp%% = True
                        Stake%% = 20
                    ELSEIF XMouse% >= 887 AND XMouse% <= 923 AND YMouse% >= 17 AND YMouse% <= 53 AND Kitty! >= 80 THEN
                        PickedUp%% = True
                        Stake%% = 50
                    END IF
                ELSE
                    IF PickedUp%% THEN
                        BetType%% = 0
                        IF XMouse% >= 1033 AND XMouse% <= 1226 AND YMouse% >= 93 AND YMouse% <= 733 THEN
                            'Single & Corner bets
                            X1% = (XMouse% - 1033) \ 74: X2% = (XMouse% - 1033) MOD 74
                            Y1% = 2 * (YMouse% - 93) \ 111: Y2% = (2 * (YMouse% - 93) MOD 111) \ 2
                            IF X2% <= 44 AND Y2% <= 30 THEN
                                'Single Bet
                                BetType%% = 63
                                SelectedNo%% = 1 + X1% + 3 * Y1%
                            ELSEIF X2% >= 45 AND Y2% >= 31 AND XMouse% <= 1181 AND YMouse% <= 703 THEN
                                'Corner Bet
                                X3% = (XMouse% - 1077) \ 74
                                Y3% = 2 * (YMouse% - 123) \ 111
                                BetType%% = 28 + X3% + 2 * Y3%
                            ELSE
                                BetType%% = 0
                            END IF
                        ELSEIF XMouse% >= 1255 AND XMouse% <= 1272 AND YMouse% >= 93 AND YMouse% <= 733 THEN
                            'Street & Double Street
                            Y1% = 2 * (YMouse% - 93) \ 111: Y2% = (2 * (YMouse% - 93) MOD 111) \ 2
                            IF Y2% <= 30 THEN
                                BetType%% = 12 + Y1% 'Street Bet
                            ELSE
                                BetType%% = 50 + Y1% 'Double Street Bet
                            END IF
                        ELSEIF XMouse% >= 1031 AND XMouse% <= 1228 AND YMouse% >= 756 AND YMouse% <= 795 THEN
                            'Column Bets
                            X1% = (XMouse% - 1031) \ 74: X2% = (XMouse% - 1031) MOD 74
                            IF X2% <= 55 THEN
                                BetType%% = 8 + X1%
                            ELSE
                                BetType%% = 0
                            END IF
                        ELSEIF XMouse% >= 870 AND XMouse% <= 952 AND YMouse% >= 93 AND YMouse% <= 734 THEN
                            'Manque/Passe, Rouge/Noir, Pair/Impair Bets
                            Y1% = (YMouse% - 93) \ 111: Y2% = (YMouse% - 93) MOD 111
                            IF Y2% <= 90 THEN
                                IF Y1% = 0 THEN
                                    BetType%% = 61
                                ELSEIF Y1% = 5 THEN
                                    BetType%% = 62
                                ELSE
                                    BetType%% = Y1%
                                END IF
                            ELSE
                                BetType%% = 0
                            END IF
                        ELSEIF XMouse% >= 975 AND XMouse% <= 1006 AND YMouse% >= 93 AND YMouse% <= 734 THEN
                            'Douzaine Bets
                            Y1% = (YMouse% - 93) \ 222: Y2% = (YMouse% - 93) MOD 222
                            IF Y2% <= 197 THEN
                                BetType%% = 5 + Y1%
                            ELSE
                                BetType%% = 0
                            END IF
                        ELSEIF XMouse% >= 1031 AND XMouse% <= 1228 AND YMouse% >= 26 AND YMouse% <= 65 THEN
                            '0, 00 & top line
                            IF XMouse% <= 1113 THEN
                                '0
                                BetType%% = 63
                                SelectedNo%% = 0
                            ELSEIF XMouse% >= 1144 THEN
                                '00
                                BetType%% = 63
                                SelectedNo%% = 37
                            ELSE
                                'Top Line Bet (0-1-2-3-00)
                                BetType%% = 27
                            END IF
                        ELSEIF XMouse% >= 975 AND XMouse% <= 1006 AND YMouse% >= 56 AND YMouse% <= 75 THEN
                            'Snake Bet
                            BetType%% = 11
                        ELSEIF XMouse% >= 1077 AND XMouse% <= 1181 AND YMouse% >= 66 AND YMouse% <= 92 THEN
                            'Trio Bets 0/1/2, 0/2/00, 00/2/3
                            X1% = (XMouse% - 1077) \ 37: X2% = (XMouse% - 1077) MOD 37
                            IF X2% <= 30 THEN
                                BetType%% = 24 + X1%
                            ELSE
                                BetType%% = 0
                            END IF
                        ELSE
                            BetType%% = 0
                        END IF
                        IF BetType%% <> 0 THEN
                            'Place Token (drop token if not true here)
                            NoBets%% = NoBets%% + 1
                            PlacedStake%%(0, NoBets%%) = Stake%%
                            PlacedStake%%(1, NoBets%%) = BetType%%
                            Kitty! = Kitty! - Stake%%
                            IF BetType%% = 63 THEN PlacedStake%%(2, NoBets%%) = SelectedNo%%
                        END IF
                    END IF
                    PickedUp%% = False
                END IF
            END IF
        WEND
        IF NoBets%% > 0 THEN
            _PUTIMAGE (860 - RienSize%, 79), Rien&
            FOR N%% = 1 TO NoBets%%
                IF PlacedStake%%(1, N%%) = 63 THEN
                    XCoin% = Posn2%(PlacedStake%%(2, N%%), 0)
                    YCoin% = Posn2%(PlacedStake%%(2, N%%), 1)
                ELSE
                    XCoin% = Posn1%(PlacedStake%%(1, N%%), 0)
                    YCoin% = Posn1%(PlacedStake%%(1, N%%), 1)
                END IF
                SELECT CASE PlacedStake%%(0, N%%)
                    CASE 10
                        _PUTIMAGE (XCoin% - 25, YCoin% - 25), Bronze&
                    CASE 20
                        _PUTIMAGE (XCoin% - 25, YCoin% - 25), Silver&
                    CASE ELSE
                        _PUTIMAGE (XCoin% - 25, YCoin% - 25), Gold&
                END SELECT
            NEXT N%%
        END IF
        IF PickedUp%% THEN
            SELECT CASE Stake%%
                CASE 10
                    _PUTIMAGE (XMouse% - 25, YMouse% - 25), AlphaBronze&
                CASE 20
                    _PUTIMAGE (XMouse% - 25, YMouse% - 25), AlphaSilver&
                CASE ELSE
                    _PUTIMAGE (XMouse% - 25, YMouse% - 25), AlphaGold&
            END SELECT
        END IF
        k$ = INKEY$
        IF k$ <> "" THEN
            IF ASC(k$) = 27 THEN
                BetsPlaced%% = True
                RollEm%% = False
                Gambol%% = False
            END IF
        END IF
        _DISPLAY
    WEND

    _SNDPLAY Rolling&
    _SNDVOL Rolling&, 0.8
    WHILE RollEm%%
        _LIMIT 70
        _PUTIMAGE (0, 0), BackGround&
        X0Dash! = -RRoule% * COS(Theta!) + RRoule% * SIN(Theta!)
        Y0Dash! = -RRoule% * SIN(Theta!) - RRoule% * COS(Theta!)
        X1Dash! = RRoule% * COS(Theta!) + RRoule% * SIN(Theta!)
        Y1Dash! = RRoule% * SIN(Theta!) - RRoule% * COS(Theta!)
        X2Dash! = -RRoule% * COS(Theta!) - RRoule% * SIN(Theta!)
        Y2Dash! = -RRoule% * SIN(Theta!) + RRoule% * COS(Theta!)
        X3Dash! = RRoule% * COS(Theta!) - RRoule% * SIN(Theta!)
        Y3Dash! = RRoule% * SIN(Theta!) + RRoule% * COS(Theta!)
        XBall! = BallRad! * SIN(Phi!)
        YBall! = -BallRad! * COS(Phi!)
        _MAPTRIANGLE (0, 0)-(W%, 0)-(0, W%), Wheel& TO(X0Dash! + XRoule%, Y0Dash! + YRoule%)-(X1Dash! + XRoule%, Y1Dash! + YRoule%)-(X2Dash! + XRoule%, Y2Dash! + YRoule%)
        _MAPTRIANGLE (W%, W%)-(0, W%)-(W%, 0), Wheel& TO(X3Dash! + XRoule%, Y3Dash! + YRoule%)-(X2Dash! + XRoule%, Y2Dash! + YRoule%)-(X1Dash! + XRoule%, Y1Dash! + YRoule%)
        _PUTIMAGE (XBall! + XRoule% - BallHalfDiam%%, YBall! + YRoule% - BallHalfDiam%%)-(XBall! + XRoule% + BallHalfDiam%%, YBall! + YRoule% + BallHalfDiam%%), Ball&
        IF Kitty! >= 10 THEN _PUTIMAGE (740, 10), Bronze&
        IF Kitty! >= 30 THEN _PUTIMAGE (810, 10), Silver&
        IF Kitty! >= 80 THEN _PUTIMAGE (880, 10), Gold&
        _PUTIMAGE (650, YScreen% - 70), Riches&
        Qty$ = LTRIM$(STR$(CINT(Kitty!)))
        FOR N%% = 1 TO LEN(Qty$)
            _PUTIMAGE (650 + 34 + 32 * (N%% - 1), YScreen% - 70), Dollars&(VAL(MID$(Qty$, N%%, 1)))
        NEXT N%%
        FOR N%% = 1 TO NoBets%%
            IF PlacedStake%%(1, N%%) = 63 THEN
                XCoin% = Posn2%(PlacedStake%%(2, N%%), 0)
                YCoin% = Posn2%(PlacedStake%%(2, N%%), 1)
            ELSE
                XCoin% = Posn1%(PlacedStake%%(1, N%%), 0)
                YCoin% = Posn1%(PlacedStake%%(1, N%%), 1)
            END IF
            SELECT CASE PlacedStake%%(0, N%%)
                CASE 10
                    _PUTIMAGE (XCoin% - 25, YCoin% - 25), Bronze&
                CASE 20
                    _PUTIMAGE (XCoin% - 25, YCoin% - 25), Silver&
                CASE ELSE
                    _PUTIMAGE (XCoin% - 25, YCoin% - 25), Gold&
            END SELECT
        NEXT N%%
        IF VousGagnez%% THEN _PUTIMAGE (XRoule% - WinSize%, YRoule% - WinSize%), Winner&
        _DISPLAY
        Theta! = Theta! + VWheel!
        IF Theta! > 2 * _PI THEN Theta! = Theta! - 2 * _PI
        Phi! = Phi! + VBall!
        IF Phi! < 0 THEN
            Phi! = Phi! + 2 * _PI
        ELSEIF Phi! > 2 * _PI THEN
            Phi! = Phi! - 2 * _PI
        END IF
        IF NOT DoBounce%% THEN
            VBall! = VBall! * 0.9963
            IF VBall! > VStop! THEN DoBounce%% = True
        ELSEIF NOT FindSlot%% THEN
            'Move towards slots - with bounce
            BallRad! = SlotRad! + Devn!
            IF NOT BDecn%% THEN
                VBall! = VBall! * 0.995
            ELSE
                VBall! = VBall! * VDecn!
            END IF
            Amp! = Amp! * 0.9965
            Devn! = RRoule% * (Inset! - SlotInset!) * Amp! * COS(BAngle!)
            IF Devn! < 0 THEN
                Devn! = -Devn!
                IF NOT BDecn%% THEN
                    BDecn%% = True
                    _SNDVOL Rolling&, 0.5
                    _SNDPLAY Bounce&
                END IF
            END IF
            BAngle! = BAngle! + 0.0157
            Bouncy% = Bouncy% + 1
            IF Bouncy% = 300 THEN
                FindSlot%% = True
                Bouncy% = 0
                IF Phi! >= Theta! THEN
                    AngDiff! = (Phi! - Theta!) / Sector!
                ELSE
                    AngDiff! = (2 * _PI + Phi! - Theta!) / Sector!
                END IF
                SlotNo%% = INT(AngDiff!)
                IF AngDiff! - SlotNo%% >= 0.5 THEN SlotNo%% = SlotNo%% + 1
                SlotNo%% = SlotNo%% + 1
                IF SlotNo%% > 38 THEN
                    SlotNo%% = 1
                ELSEIF SlotNo%% < 1 THEN 'Probably shouldn't need this
                    SlotNo%% = 38
                END IF
                VBall! = 0
                _SNDSTOP Rolling&
                _SNDPLAY Settle&
            END IF
        ELSEIF NOT InSlot%% THEN
            'Move to final position
            RDevn! = BallRad! - SlotRad!
            FinalAngle! = Theta! + (SlotNo%% - 1) * Sector!
            IF FinalAngle! > 2 * _PI THEN FinalAngle! = FinalAngle! - 2 * _PI
            IF Phi! - FinalAngle! > _PI THEN Phi! = Phi! - 2 * _PI
            ADevn! = Phi! - FinalAngle!
            BallRad! = SlotRad! + RDevn! * (100 - Bouncy%) / 100
            Phi! = FinalAngle! + ADevn! * (100 - Bouncy%) / 100
            Bouncy% = Bouncy% + 1
            IF Bouncy% = 100 THEN
                InSlot%% = True
                BallRad! = SlotRad!
                Bouncy% = 0
            END IF
        ELSE
            'Ball In Slot
            Phi! = Theta! + (SlotNo%% - 1) * Sector!
            IF Phi! > 2 * _PI THEN Phi! = Phi! - 2 * _PI
            Bouncy% = Bouncy% + 1
            IF Bouncy% <= 100 THEN
                VWheel! = VWheelStart! * (100 - Bouncy%) / 100
                IF Bouncy% = 100 THEN
                    FOR N%% = 1 TO NoBets%%
                        IF PlacedStake%%(1, N%%) = 63 THEN
                            IF Slots%%(SlotNo%%) = PlacedStake%%(2, N%%) THEN
                                Kitty! = Kitty! + PlacedStake%%(0, N%%) * BettingOdds!(PlacedStake%%(1, N%%))
                                VousGagnez%% = True
                            END IF
                        ELSEIF TheBets%%(PlacedStake%%(1, N%%), Slots%%(SlotNo%%)) THEN
                            Kitty! = Kitty! + PlacedStake%%(0, N%%) * BettingOdds!(PlacedStake%%(1, N%%))
                            VousGagnez%% = True
                        END IF
                    NEXT N%%
                    IF Kitty! > 9999 THEN Kitty! = 9999
                    IF VousGagnez%% THEN
                        _SNDPLAYFILE "KerChing.mp3"
                        Pause% = 300
                    ELSE
                        Pause% = 200
                    END IF
                END IF
            ELSEIF Bouncy% = Pause% THEN
                RollEm%% = False
                Bouncy% = 0
            END IF
        END IF
        k$ = INKEY$
        IF k$ <> "" THEN
            IF ASC(k$) = 27 THEN
                RollEm%% = False
                Gambol%% = False
            END IF
        END IF
        DO 'make sure that mouse button is released
            Dum%% = _MOUSEINPUT
        LOOP UNTIL NOT _MOUSEBUTTON(MouseButton%%)
    WEND
WEND

SYSTEM

FUNCTION HardwareImage& (ImageName&)
    HardwareImage& = _COPYIMAGE(ImageName&, 33)
    _FREEIMAGE ImageName&
END FUNCTION
Reply


Messages In This Thread
QB64 Roulette - by Magdha - 12-15-2025, 10:13 AM

Forum Jump:


Users browsing this thread: 1 Guest(s)