rem Snake example game for Craft Basic rem by Gemino Smothers 2022 rem www.lucidapogee.com title "Snake!" define gfxx = 330, gfxy = 296 define upkey = 0, rightkey = 0, downkey = 0, leftkey = 0, esckey = 0 define speed = 0, delay = 0, score = 0, game = 1 define maxsize = 1000, size = 9, direction = int(rnd * 4) + 1 define rx = int(rnd * (gfxx - 24)) + 12 define ry = int(rnd * (gfxy - 40)) + 25 dim sx[maxsize] dim sy[maxsize] let sx[0] = gfxx / 2 let sy[0] = gfxy / 2 fill on bgcolor 128, 64, 0 cls graphics resize 0, 0, gfxx + 10, gfxy + 56 center formid 1 staticform 1, 1, 100, 14 fgcolor 255, 255, 0 bgcolor 0, 80, 0 colorform alert "Snake! by Gemino Smothers 2022" alert "Get the gray little rodents and avoid hitting yourself or walls." alert "Use arrow keys to move. Esc to exit." input "Enter game speed between 0 to 100+", speed fgcolor 0, 80, 0 rect 0, 0, gfxx, gfxy do button upkey, 38 button rightkey, 39 button downkey, 40 button leftkey, 37 button esckey, 27 if upkey = 1 and direction <> 3 then let direction = 1 endif if rightkey = 1 and direction <> 4 then let direction = 2 endif if downkey = 1 and direction <> 1 then let direction = 3 endif if leftkey = 1 and direction <> 2 then let direction = 4 endif fgcolor 0, 80, 0 oval sx[size], sy[size], 15, 15 let i = size + 1 do let i = i - 1 let c = i - 1 if sx[0] = sx[i] and sy[0] = sy[i] = 1 then let game = 0 endif let sx[i] = sx[c] let sy[i] = sy[c] fgcolor 0, 255, 0 oval sx[i], sy[i], 15, 15 loop i > 1 fgcolor 0, 0, 255 oval sx[0] + 5, sy[0] + 5, 3, 3 oval sx[0] + 9, sy[0] + 5, 3, 3 if direction = 1 then let sy[0] = sy[0] - 15 endif if direction = 2 then let sx[0] = sx[0] + 15 endif if direction = 3 then let sy[0] = sy[0] + 15 endif if direction = 4 then let sx[0] = sx[0] - 15 endif if sx[0] <= -10 or sx[0] >= gfxx or sy[0] <= -10 or sy[0] >= gfxy = 1 then let game = 0 endif if sx[0] + 15 >= rx and sx[0] <= rx + 15 and sy[0] + 15 >= ry and sy[0] <= ry + 15 = 1 then playwave "examples\tada.wav" fgcolor 0, 80, 0 rect 0, 0, gfxx, gfxy let rx = int(rnd * (gfxx - 24)) + 12 let ry = int(rnd * (gfxy - 40)) + 25 let size = size + 3 let score = score + 1 endif fgcolor 100,100,100 oval rx, ry, 15, 15 fgcolor 255, 0, 0 oval rx + 5, ry + 5, 3, 3 oval rx + 9, ry + 5, 3, 3 fgcolor 255, 255, 0 formid 1 formtext "Score: ", score updateform let delay = clock do wait loop clock < delay + speed loop esckey <> 1 and game = 1 playwave "examples\boom.wav" alert "Game over! Score: ", score