171 lines
2.6 KiB
Plaintext
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
|