That's really cool.
It ran perfectly fine in DBC but I had the same issue as ghostkrashers when I ran it in DBPro, although it did "play again" if a pressed any key. I managed to fix it by adding a bit to the end of the "gameover" sub-routine:
sync on : sync rate 0 : cls : dim snake(3072,2) : dim food(2) : hide mouse
game:
set text size 10 : parts=1 : snake(1,1)=32 : snake(1,2)=24 : food(1)=rnd(63) : food(2)=rnd(47) : direction=0 : b=timer()
do
if upkey()=1 : direction=0 : endif : if rightkey()=1 : direction=1 : endif : if downkey()=1 : direction=2 : endif : if leftkey()=1 : direction=3 : endif
a=timer()
if a-b>100
for s=parts to 2 step -1 : snake(s,1)=snake(s-1,1) : snake(s,2)=snake(s-1,2) : next s
if direction=0 : snake(1,2)=snake(1,2)-1 : endif : if direction=1 : snake(1,1)=snake(1,1)+1 : endif : if direction=2 : snake(1,2)=snake(1,2)+1 : endif : if direction=3 : snake(1,1)=snake(1,1)-1 : endif
b=timer()
endif
if snake(1,1)<0 or snake(1,1)>63 or snake(1,2)<0 or snake(1,2)>47 then goto gameover
for s=2 to parts : if snake(1,1)=snake(s,1) and snake(1,2)=snake(s,2) : goto gameover : endif :next s : ink rgb(255,0,0),0 :for size=0 to 4 : circle (food(1)*10)+5,(food(2)*10)+5,size :next size :ink rgb(200,128,0),0
for s=1 to parts : box (snake(s,1)*10)+1,(snake(s,2)*10)+1,(snake(s,1)*10)+9,(snake(s,2)*10)+9 : next s : if snake(1,1)=food(1) and snake(1,2)=food(2) : inc parts : food(1)=rnd(63) : food(2)=rnd(47) : endif
ink rgb(255,255,255),0 : text 0,0,"Score: "+str$((parts-1)*100) : sync : cls : loop
gameover:
ink rgb(255,255,255),0 : set text size 25 : center text 320,100,"GAME OVER" : center text 320,200,"Your score was" : center text 320,300,str$((parts-1)*100) : center text 320,400,"Press the spacekey to try again!"
repeat : sync : until spacekey()=1 : goto game
This will work in both DBC and DBPro.