Well, here is a gambling game I programmed last night... Enjoy!
Controls:
You have to flip all of the numbers to win.
Move the mouse to roll the dice.
click the mouse to let go of the dice.
Click on the number one of the dice show, or on the number that equals the sum of both dice.
Right-click to hide instruction tab.
EDIT : The code is messed up, I recommend you download the attached dba file
code:
rem DBC Challenges
rem Gambling challenge
rem by TheComet
rem setup screen
set display mode 800,600,32
sync on
sync rate 60
backdrop off
color backdrop 0
show mouse
autocam off
randomize timer()
rem dimensions
dim grav#(2)
dim dx#(2)
dim dy#(2)
dim block(9)
block(0)=1
rem generate media
gosub generate_dice
gosub generate_blocks
gosub generate_board
rem make sky
create bitmap 1,512,512
for t=0 to 10000
ink rgb(rnd(255),rnd(255),rnd(255)),0
dot rnd(512),rnd(512)
next t
get image 1,0,0,128,128
delete bitmap 1
make object sphere 30,200
position object 30,0,0,0
texture object 30,1
set object 30,1,0,0
delete image 1
rem make banner
make object plain 31,500,120
position object 31,0,211,400
lock object on 31
color object 31,0
rem line up blocks
for t=3 to 11
position object t,((t-3)*10)-40,0,0
next t
rem main loop
position camera 100,100,100
roll=1
ink rgb(255,255,255),0
set text size 25
help=1
do
rem toggle help
if mouseclick()=2 and toggle=0 then inc help:toggle=1:if help=2 then help=0
if mouseclick()=0 then toggle=0
if help=0 then hide object 31 else show object 31
rem rotate sky
rotate object 30,wrapvalue(object angle x(30)+2),wrapvalue(object angle y(30)+3),wrapvalue(object angle z(30)+1)
rem camera
set camera to follow 0,0,0,0,60,50,10,0
point camera 0,0,-20
rem roll dice
if roll=1
r=rnd(100)
if help=1
center text 400,20,"Shake mouse to roll dice..."
center text 400,50,"Click mouse to let go..."
endif
oldmovex=movex
oldmovey=movey
movex=abs(mousemovex()/4)
movey=abs(mousemovey()/4)
inc acc1,oldmovex-movex:inc accx,acc1
inc acc2,oldmovey-movey:inc accy,acc2
position object 1,-15,10,-30
position object 2,15,10,-30
rotate object 1,wrapvalue(object angle x(1)+accx),wrapvalue(object angle y(1)+accx),wrapvalue(object angle z(1)+accx)
rotate object 2,wrapvalue(object angle x(2)+accy),wrapvalue(object angle y(2)+accy),wrapvalue(object angle z(2)+accy)
if mouseclick()=1
if accx>20 or accx<-20
if accy>20 or accy<-20
roll=2
time=0
randomize r
else
if help=1 then center text 400,80,"Spin faster!"
endif
else
if help=1 then center text 400,80,"Spin faster!"
endif
endif
endif
rem drop dice
if roll=2
for t=1 to 2
x#=object position x(t)
y#=object position y(t)
z#=object position z(t)
grav#(t)=grav#(t)-0.1
inc y#,grav#(t)
if y#<-14.5
grav#(t)=0-(grav#(t)/1.2)
if grav#(t)<0 then grav#(t)=0
y#=-14.5
if t=1 then accx=accx/2:if accx<2 then accx=0:if set1=0 then rotate object 1,rnd(360),rnd(360),0:set1=1
if t=2 then accy=accy/2:if accy<2 then accy=0:if set2=0 then rotate object 2,rnd(360),rnd(360),0:set2=1
endif
position object t,x#,y#,z#
next t
if time<50
rotate object 1,wrapvalue(object angle x(1)+accx),wrapvalue(object angle y(1)+accx),0
rotate object 2,wrapvalue(object angle x(2)+accy),wrapvalue(object angle y(2)+accy),0
else
for t=1 to 2:rotate object t,curveangle(dx#(t),object angle x(t),20),curveangle(dy#(t),object angle y(t),20),0:next t
endif
rem destination angle
inc time
if time>50
for t=1 to 2
x#=object angle x(t)
y#=object angle y(t)
if x#<45 or x#=>315 then dx#(t)=0
if x#=>45 and x#<135 then dx#(t)=90
if x#=>135 and x#<225 then dx#(t)=180
if x#=>225 and x#<315 then dx#(t)=270
if y#<45 or y#=>315 then dy#(t)=0
if y#=>45 and y#<135 then dy#(t)=90
if y#=>135 and y#<225 then dy#(t)=180
if y#=>225 and y#<315 then dy#(t)=270
next t
endif
rem choose
if time>100 then roll=3
endif
rem determin numbers
if roll=3
rem dice 1
x=object angle x(1)
y=object angle y(1)
if x>80 and x<100 then x=90
if x>170 and x<190 then x=180
if x>260 and x<280 then x=270
if x>350 or x<10 then x=0
if y>80 and y<100 then y=90
if y>170 and y<190 then y=180
if y>260 and y<280 then y=270
if y>350 or y<10 then y=0
if x=0
n1=5
endif
if x=90
if y=0 then n1=2
if y=90 then n1=3
if y=180 then n1=1
if y=270 then n1=4
endif
if x=180
n1=6
endif
if x=270
if y=0 then n1=1
if y=90 then n1=4
if y=180 then n1=2
if y=270 then n1=3
endif
rem dice 2
x=object angle x(2)
y=object angle y(2)
if x>80 and x<100 then x=90
if x>170 and x<190 then x=180
if x>260 and x<280 then x=270
if x>350 or x<10 then x=0
if y>80 and y<100 then y=90
if y>170 and y<190 then y=180
if y>260 and y<280 then y=270
if y>350 or y<10 then y=0
if x=0
n2=5
endif
if x=90
if y=0 then n2=2
if y=90 then n2=3
if y=180 then n2=1
if y=270 then n2=4
endif
if x=180
n2=6
endif
if x=270
if y=0 then n2=1
if y=90 then n2=4
if y=180 then n2=2
if y=270 then n2=3
endif
roll=4
rem set block options
block1=n1
block2=n2
block3=n1+n2
if block3>9 then block3=0
endif
rem choose
if roll=4
rem user help
if help=1 then center text 400,20,"Click either "+str$(n1)+", "+str$(n2)+", or "+str$(n1+n2)
rem roll dice to a still-stand
for t=1 to 2
x#=object position x(t)
y#=object position y(t)
z#=object position z(t)
grav#(t)=grav#(t)-0.1
inc y#,grav#(t)
if y#<-14.5
grav#(t)=0-(grav#(t)/1.2)
if grav#(t)<0 then grav#(t)=0
y#=-14.5
endif
position object t,x#,y#,z#
next t
set1=0
set2=0
rem scale picked block bigger
x=mousex()
y=mousey()
success=1
lose=1
for t=3 to 11
if block(t-2)=0 then success=0
if t-2=block1 or t-2=block2 or t-2=block3
if block(t-2)=0
lose=0
rem scale bigger
dx=object screen x(t)
dy=object screen y(t)
dist=((x-dx)*(x-dx))+((y-dy)*(y-dy))
if dist<400
scale object t,140,140,140
else
scale object t,100,100,100
endif
rem select
if mouseclick()=1 and dist<400 then block(t-2)=1:scale object t,100,100,100:roll=1:exit
endif
endif
next t
if success=1 then win=1:lose=0
endif
rem rotate blocks
for t=3 to 11
if block(t-2)=1
xrotate object t,curveangle(235,object angle x(t),20)
else
xrotate object t,curveangle(90,object angle x(t),20)
endif
next t
rem loser
if lose=1
make object plain 21,500,500
position object 21,0,0,200
lock object on 21
color object 21,rgb(255,255,255)
ghost object on 21,1
for t=255 to 0 step -1
color object 21,rgb(t,t,t)
sync
next t
repeat
center text 400,280,"LOSER!!"
sync
until mouseclick()=1
roll=1
for t=1 to 9:block(t)=0:next t
lose=0
delete object 21
endif
rem winner
if win=1
make object plain 21,500,500
position object 21,0,0,200
lock object on 21
color object 21,rgb(255,255,255)
ghost object on 21,1
for t=255 to 0 step -1
color object 21,rgb(t,t,t)
sync
next t
repeat:until mouseclick()=0
repeat
center text 400,280,"Congratulations!!"
sync
until mouseclick()=1
roll=1
for t=1 to 9:block(t)=0:next t
lose=0
delete object 21
endif
rem refresh screen
sync
rem end of main loop
loop
rem *********************************************
rem * SUBROUTINES *
rem *********************************************
generate_dice:
rem generate dice images
create bitmap 1,64,64
ink rgb(255,255,255),0:box 0,0,63,63
ink 0,0:for t=0 to 3:circle 32,32,t:next t
get image 1,0,0,64,64
ink rgb(255,255,255),0:box 0,0,63,63
ink 0,0:for t=0 to 3:circle 16,16,t:circle 48,48,t:next t
get image 2,0,0,64,64
ink rgb(255,255,255),0:box 0,0,63,63
ink 0,0:for t=0 to 3:circle 16,16,t:circle 32,32,t:circle 48,48,t:next t
get image 3,0,0,64,64
ink rgb(255,255,255),0:box 0,0,63,63
ink 0,0:for t=0 to 3:circle 16,16,t:circle 48,48,t:circle 16,48,t:circle 48,16,t:next t
get image 4,0,0,64,64
ink rgb(255,255,255),0:box 0,0,63,63
ink 0,0:for t=0 to 3:circle 16,16,t:circle 48,48,t:circle 16,48,t:circle 48,16,t:circle 32,32,t:next t
get image 5,0,0,64,64
ink rgb(255,255,255),0:box 0,0,63,63
ink 0,0:for t=0 to 3:circle 16,16,t:circle 48,48,t:circle 16,48,t:circle 48,16,t:circle 16,32,t:circle 48,32,t:next t
get image 6,0,0,64,64
delete bitmap 1
rem generate dice
for t=1 to 2
make object plain t,0,0
restore dice
for limb=1 to 6
read flag
if flag=0
read sizex
read sizey
read x
read y
read z
read ax
read ay
read az
make object plain t+1,sizex,sizey
position object t+1,x,y,z
rotate object t+1,ax,ay,az
endif
make mesh from object 1,t+1
delete object t+1
add limb t,limb,1
delete mesh 1
next limb
next t
rem texture dice
for r=1 to 2:for t=1 to 6:texture limb r,t,t:next t:next r
rem delete images
for t=1 to 6:delete image t:next t
return
generate_blocks:
rem arrays
dim t$(8)
t$(0)="."
t$(1)="J"
t$(2)="A"
t$(3)="C"
t$(4)="K"
t$(5)="P"
t$(6)="O"
t$(7)="T"
t$(8)="."
rem make a wooden texture
create bitmap 1,32,64
ink rgb(90,49,6),0
box 0,0,31,63
for t=0 to 1000
ink rgb(rnd(60)+70,rnd(40),rnd(6)),0
sx=rnd(32)
sy=rnd(64)
ex=rnd(32)
ey=rnd(64)
f=rnd(1)
if f=1 then line sx,sy,sx,ey else line sx,sy,ex,sy
next t
get image 1,0,0,32,64
delete bitmap 1
rem print numbers 1-9 on texture
ink rgb(255,255,255),0
set text size 40
create bitmap 1,32,64
for t=2 to 10
paste image 1,0,0
center text 16,10,str$(t-1)
get image t,0,0,32,64
next t
delete bitmap 1
rem print letters .jackpot. onto texture
create bitmap 1,32,64
for t=11 to 19
paste image 1,0,0
center text 16,10,t$(t-11)
get image t,0,0,32,64
next t
delete bitmap 1
rem generate blocks
for t=3 to 11
make object plain t,0,0
restore block
for limb=1 to 22
read flag
if flag=0
read sizex
read sizey
read x
read y
read z
read ax
read ay
read az
make object plain t+1,sizex,sizey
position object t+1,x,y,z
rotate object t+1,ax,ay,az
endif
if flag=1
read x1
read y1
read z1
read x2
read y2
read z2
read x3
read y3
read z3
make object triangle t+1,x1,y1,z1,x2,y2,z2,x3,y3,z3
endif
make mesh from object 1,t+1
delete object t+1
add limb t,limb,1
delete mesh 1
next limb
set object t,1,0,0
texture object t,1
next t
rem texture blocks
for t=3 to 11
texture limb t,1,t-1
texture limb t,2,t+8
next t
rem clean up
for t=1 to 19:delete image t:next t
rem undim
undim t$(8)
return
generate_board:
rem make glass like stuff... uhm, It doesn't look like glass, but forget about that...
create bitmap 1,64,64
ink RGB(2,142,125),0
box 0,0,63,63
ink RGB(4,174,210),0
x=rnd(64):y=rnd(64)
for r=0 to 1:for t=0 to 20:circle x+r,y,t:next t:next r
ink RGB(3,126,152),0
x=rnd(64):y=rnd(64)
for r=0 to 1:for t=0 to 20:circle x+r,y,t:next t:next r
get image 1,0,0,64,64
delete bitmap 1
rem make red fur
create bitmap 1,128,128
ink RGB(154,20,1),0
box 0,0,127,127
for t=0 to 10000
ink rgb(rnd(50)+80,rnd(20),1),0
dot rnd(128),rnd(128)
next t
get image 2,0,0,128,128
delete bitmap 1
rem generate board
make object plain 12,0,0
restore board
for limb=1 to 5
read flag
if flag=2
read sizex
read sizey
read sizez
read x
read y
read z
make object box 13,sizex,sizey,sizez
position object 13,x,y,z
endif
make mesh from object 1,13
delete object 13
add limb 12,limb,1
delete mesh 1
next limb
rem texture board
texture limb 12,1,2
for t=2 to 5:texture limb 12,t,1:next t
rem clean up
delete image 1
delete image 2
return
rem *********************************************
rem * DATA STATEMENTS *
rem *********************************************
dice:
data 0,10,10,0,0,5,0,0,0,0,10,10,0,0,-5,0,0,0,0,10,10,5,0,0,0,90,0,0,10,10,-5,0
data 0,0,270,0,0,10,10,0,5,0,90,0,0,0,10,10,0,-5,0,270,0,0
block:
data 0,10,20,0,0,-2,0,0,0,0,10,20,0,0,2,180,0,0,0,4,20,-5,0,0,0,90,0,0,4,20,5
data 0,0,0,270,0,0,6,4,0,16,0,90,0,0,0,6,4,0,-16,0,270,0,0,1,-5,10,-2,-5,10,2,-3,16
data -2,1,-5,10,2,-3,16,2,-3,16,-2,1,-5,-10,-2,-5,-10,2,-3,-16,-2,1,-5,-10,2,-3,-16,2,-3,-16,-2,1
data 5,10,-2,5,10,2,3,16,-2,1,5,10,2,3,16,2,3,16,-2,1,5,-10,-2,5,-10,2,3,-16,-2,1,5,-10
data 2,3,-16,2,3,-16,-2,1,-5,10,-2,-3,16,-2,5,10,-2,1,-3,16,-2,5,10,-2,3,16,-2,1,-5,10,2,-3
data 16,2,5,10,2,1,-3,16,2,5,10,2,3,16,2,1,-5,-10,-2,-3,-16,-2,5,-10,-2,1,-3,-16,-2,5,-10,-2
data 3,-16,-2,1,-5,-10,2,-3,-16,2,5,-10,2,1,-3,-16,2,5,-10,2,3,-16,2
board:
data 2,90,1,50,0,-20,-17
data 2,90,20,16,0,-14,0
data 2,1,26,50,-45,-13,-17
data 2,1,26,50,45,-13,-17
data 2,90,26,1,0,-13,-42
Screenshot:
TheComet
Peachy, and the Chaos of the Gems
