I saw some other minesweeper game in DBpro. but i cound't execute it in DBC, so i decided to make one on my own in DBC...
What do u think?
`*************************************************
`minesweeper
`*************************************************
`coded by Sven B.
`*************************************************
sync on : sync rate 60
restart:
`set vars
bombes=20
`dim command
dim size(2)
size(1)=10
size(2)=15
xsize=size(1)
ysize=size(2)
dim board(10,25)
dim checked(2,10,25)
`random bombes in the field
for i=1 to bombes
repeat
x=1+rnd(size(1)-1)
y=1+rnd(size(2)-1)
until board(x,y)=0
board(x,y)=1
next i
`calculate surrounding bombes
for x=1 to size(1)
for y=1 to size(2)
if board(x,y)=0
surr_check(x,y)
endif
checked(2,x,y)=0
next y
next x
`loop
do
`clear screen
cls
total=0
`handle bombes
for x=1 to size(1)
for y=1 to size(2)
`check if field is activated
if checked(2,x,y)=1
`display 3Dbox
3Dbox_in(x*15,y*15)
inc total
`when activated field=1 and there's a bomb, go to dead:
if board(x,y)>0 then goto dead
`if field=0 then clear surrounding fields too
if checked(1,x,y)=0
if x>1
checked(2,x-1,y)=1
if y>1 then checked(2,x-1,y-1)=1
if y<size(2) then checked(2,x-1,y+1)=1
endif
if x<size(1)
checked(2,x+1,y)=1
if y>1 then checked(2,x+1,y-1)=1
if y<size(2) then checked(2,x+1,y+1)=1
endif
if y>1 then checked(2,x,y-1)=1
if y<size(2) then checked(2,x,y+1)=1
else
`display surrounding bombes when nr is not 0
ink rgb(0,0,0),0 : center text x*15+7,y*15,str$(checked(1,x,y))
endif
else
`display 3Dbox
3Dbox_out(x*15,y*15)
`check if clicked on field
if check(x*15,y*15)=1 and hold=0 then checked(2,x,y)=1 : hold=1
`mark bombes
if check(x*15,y*15)=2 and hold=0
hold=1
if checked(2,x,y)=0
checked(2,x,y)=2
else
checked(2,x,y)=0
endif
endif
endif
`display marked bombes
ink rgb(255,0,0),0
if checked(2,x,y)=2 then center text x*15+7,y*15,"X"
next y
next x
`HUD
ink rgb(200,200,200),0
box 0,size(2)*15+20,100,size(2)*15+50
message$=str$(total)+" / "+str$(size(1)*size(2)-bombes)
ink rgb(0,0,0),0
text 9,size(2)*15+26,message$
ink rgb(255,255,255),0
text 10,size(2)*15+27,message$
if total=size(1)*size(2)-bombes then goto win
if mouseclick()=0 then hold=0
sync
loop
dead:
`undim
undim checked
undim board
`clear screen
cls
`display "you lost" message
ink rgb(255,255,255),0
center text 320,240,"you lost"
suspend for key
`restart the game
goto restart
win:
`undim
undim checked
undim board
`clear screen
cls
`display "you win" message
ink rgb(255,255,255),0
center text 320,240,"you win"
suspend for key
`restart the game
goto restart
`*********
`functions
`*********
`draw 3Dbox1
function 3Dbox_out(x,y)
ink rgb(255,255,255),0
box x,y,x+13,y+13
ink rgb(25,25,25),0
box x+1,y+1,x+14,y+14
ink rgb(200,200,200),0
box x+1,y+1,x+13,y+13
endfunction
`draw 3Dbox2
function 3Dbox_in(x,y)
ink rgb(25,25,25),0
box x,y,x+13,y+13
ink rgb(255,255,255),0
box x+1,y+1,x+14,y+14
ink rgb(200,200,200),0
box x+1,y+1,x+13,y+13
endfunction
`check mouse-over
function check(x,y)
check=0
if mousex()>x and mousex()<x+14
if mousey()>y and mousey()<y+14
if mouseclick()=1 then check=1
if mouseclick()=2 then check=2
endif
endif
endfunction check
`checks surrounding fields
`*******************************
`* * * *
`* x-1,y-1 * x ,y-1 * x+1,y-1 *
`* * * *
`*******************************
`* * * *
`* x-1,y * x ,y * x+1,y *
`* * * *
`*******************************
`* * * *
`* x-1,y+1 * x ,y-1 * x+1,y+1 *
`* * * *
`*******************************
function surr_check(x,y)
if x>1
checked(1,x,y)=checked(1,x,y)+board(x-1,y)
if y>1
checked(1,x,y)=checked(1,x,y)+board(x-1,y-1)
endif
if y<size(2)
checked(1,x,y)=checked(1,x,y)+board(x-1,y+1)
endif
endif
if x<size(1)
checked(1,x,y)=checked(1,x,y)+board(x+1,y)
if y>1
checked(1,x,y)=checked(1,x,y)+board(x+1,y-1)
endif
if y<size(2)
checked(1,x,y)=checked(1,x,y)+board(x+1,y+1)
endif
endif
if y>1
checked(1,x,y)=checked(1,x,y)+board(x,y-1)
endif
if y<size(2)
checked(1,x,y)=checked(1,x,y)+board(x,y+1)
endif
endfunction
Comments would be welcome, like how to make the code shorter...
greetz