RosettaCodeData/Task/Snake/Craft-Basic/snake.basic

171 lines
2.6 KiB
Plaintext

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