Type /snake to start. Arrow keys to move. Keeps track of highscores and has 3 difficulties. I made this about a year ago, there may be some inefficiencies in it. ;D Enjoy.
alias -l checksnake {
if (!$window(@snake)) {
.timersnake off
.timerscore off
.timerchecksnake off
}
}
alias snake {
if (!$window(@snake)) {
window -dfp +bfx @snake -1 -1 301 321
.timerchecksnake 0 1 checksnake
}
if ($hget(snake)) { hfree snake }
if (!$hget(snake)) { hmake snake 10 }
set %snake.menu Easy
hadd snake gameon 1
hdel snake nostart
drawrect -fr @snake 16777215 1 0 0 301 321
drawtext -r @snake 37632 Fixedsys 9 130 30 SNAKE
drawtext -r @snake 9671424 Fixedsys 9 114 50 By fluppy
drawtext -r @snake 32764 Fixedsys 9 134 90 Easy
drawtext -r @snake 0 Fixedsys 9 126 110 Medium
drawtext -r @snake 0 Fixedsys 9 134 130 Hard
drawtext -pr @snake 0 Fixedsys 9 106 160 High Scores
drawtext -pr @snake 0 Fixedsys 9 $calc(150 - ($iif(%snake.hiscore.1,$width($gettok(%snake.hiscore.1,1,32),fixedsys,9),0) /2) - 24) 180 1.
drawtext -pr @snake 0 Fixedsys 9 $calc(150 - ($iif(%snake.hiscore.2,$width($gettok(%snake.hiscore.2,1,32),fixedsys,9),0) /2) - 24) 220 2.
drawtext -pr @snake 0 Fixedsys 9 $calc(150 - ($iif(%snake.hiscore.3,$width($gettok(%snake.hiscore.3,1,32),fixedsys,9),0) /2) - 24) 260 3.
if (%snake.hiscore.1) {
drawtext -pr @snake $gettok(%snake.hiscore.1,3,32) Fixedsys 9 $calc(150 - ($iif($gettok(%snake.hiscore.1,1,32),$width($gettok(%snake.hiscore.1,1,32),fixedsys,9),0) /2)) 180 $gettok(%snake.hiscore.1,1,32)
drawtext -pr @snake $gettok(%snake.hiscore.1,3,32) Fixedsys 9 $calc(150 - ($iif($gettok(%snake.hiscore.1,2,32),$width($gettok(%snake.hiscore.1,2,32),fixedsys,9),0) /2)) 200 $gettok(%snake.hiscore.1,2,32)
}
if (%snake.hiscore.2) {
drawtext -pr @snake $gettok(%snake.hiscore.2,3,32) Fixedsys 9 $calc(150 - ($iif($gettok(%snake.hiscore.2,1,32),$width($gettok(%snake.hiscore.2,1,32),fixedsys,9),0) /2)) 220 $gettok(%snake.hiscore.2,1,32)
drawtext -pr @snake $gettok(%snake.hiscore.2,3,32) Fixedsys 9 $calc(150 - ($iif($gettok(%snake.hiscore.2,2,32),$width($gettok(%snake.hiscore.2,2,32),fixedsys,9),0) /2)) 240 $gettok(%snake.hiscore.2,2,32)
}
if (%snake.hiscore.3) {
drawtext -pr @snake $gettok(%snake.hiscore.3,3,32) Fixedsys 9 $calc(150 - ($iif($gettok(%snake.hiscore.3,1,32),$width($gettok(%snake.hiscore.3,1,32),fixedsys,9),0) /2)) 260 $gettok(%snake.hiscore.3,1,32)
drawtext -pr @snake $gettok(%snake.hiscore.3,3,32) Fixedsys 9 $calc(150 - ($iif($gettok(%snake.hiscore.3,2,32),$width($gettok(%snake.hiscore.3,2,32),fixedsys,9),0) /2)) 280 $gettok(%snake.hiscore.3,2,32)
}
}
alias -l snake.game {
hadd snake colour $replace($1,130,32764,75,255,35,16515072)
clear @snake
write -c snake.been.txt
hdel snake gameon 1
hadd snake xbeg 151
hadd snake ybeg 91
hadd snake timer $1
drawrect -fr @snake 16777215 1 0 0 301 321
var %x 5
while (%x >= 1) {
drawrect -fr @snake 37632 1 $hget(snake,xbeg) $calc($hget(snake,ybeg) -((10* %x)-10)) 10 10
write snake.been.txt $hget(snake,xbeg) $calc($hget(snake,ybeg) -((10* %x)-10))
dec %x
}
drawline -r @snake 0 1 0 0 0 301
drawline -r @snake 0 1 0 0 301 0
drawline -r @snake 0 1 301 0 301 301
drawline -r @snake 0 1 0 301 301 301
drawtext -r @snake 0 Fixedsys 9 5 302 Score: 0
snake.addfood
}
alias -l snake.addfood {
var %z 1
while (%z) {
var %x $calc($rand(0,29) * 10 + 1)
var %y $calc($rand(0,29) * 10 + 1)
if (!$read(snake.been.txt,w,%x %y)) {
hadd snake food %x %y
unset %z
}
}
drawrect -fr @snake $hget(snake,colour) 1 %x %y 10 10
hadd snake fscore 80
.timerscore -m 79 100 hdec snake fscore
}
on *:keydown:@snake:*:{
if (!$hget(snake,nostart)) {
if ($hget(snake,gameon)) {
if ($keyval == 40) {
if (%snake.menu == Easy) {
drawtext -r @snake 255 Fixedsys 9 126 110 Medium
drawtext -r @snake 0 Fixedsys 9 134 90 Easy
set %snake.menu Medium
halt
}
if (%snake.menu == Medium) {
drawtext -r @snake 16515072 Fixedsys 9 134 130 Hard
drawtext -r @snake 0 Fixedsys 9 126 110 Medium
set %snake.menu Hard
halt
}
if (%snake.menu == Hard) {
drawtext -r @snake 32764 Fixedsys 9 134 90 Easy
drawtext -r @snake 0 Fixedsys 9 134 130 Hard
set %snake.menu Easy
halt
}
}
if ($keyval == 38) {
if (%snake.menu == Easy) {
drawtext -r @snake 16515072 Fixedsys 9 134 130 Hard
drawtext -r @snake 0 Fixedsys 9 134 90 Easy
set %snake.menu Hard
halt
}
if (%snake.menu == Medium) {
drawtext -r @snake 32764 Fixedsys 9 134 90 Easy
drawtext -r @snake 0 Fixedsys 9 126 110 Medium
set %snake.menu Easy
halt
}
if (%snake.menu == Hard) {
drawtext -r @snake 255 Fixedsys 9 126 110 Medium
drawtext -r @snake 0 Fixedsys 9 134 130 Hard
set %snake.menu Medium
halt
}
}
if ($keyval == 32) || ($keyval == 13) {
snake.game $replace(%snake.menu,easy,130,medium,75,hard,35)
}
}
else {
if (!$hget(snake,started)) {
if ($keyval == 37) || ($keyval == 39) || ($keyval == 40) {
hadd snake started 1
hadd snake keyval2 $keyval
snake.go
.timersnake -m 0 $hget(snake,timer) snake.go
}
}
elseif $&
(($keyval == 37) && ($hget(snake,keyval) != 39)) || $&
(($keyval == 38) && ($hget(snake,keyval) != 40)) || $&
(($keyval == 39) && ($hget(snake,keyval) != 37)) || $&
(($keyval == 40) && ($hget(snake,keyval) != 38)) {
hadd snake keyval2 $keyval
}
}
}
elseif ($keyval == 32) {
clear @snake
snake
}
}
alias -l snake.go {
hadd snake keyval $hget(snake,keyval2)
drawrect -fr @snake 37632 1 $hget(snake,xbeg) $hget(snake,ybeg) 10 10
if ($hget(snake,keyval) == 40) { hadd snake ybeg $calc($hget(snake,ybeg) + 10) }
if ($hget(snake,keyval) == 38) { hadd snake ybeg $calc($hget(snake,ybeg) - 10) }
if ($hget(snake,keyval) == 37) { hadd snake xbeg $calc($hget(snake,xbeg) - 10) }
if ($hget(snake,keyval) == 39) { hadd snake xbeg $calc($hget(snake,xbeg) + 10) }
if ($hget(snake,xbeg) < 0) || ($hget(snake,xbeg) >= 300) || ($hget(snake,ybeg) < 0) || ($hget(snake,ybeg) >= 300) {
beep 7
drawreplace -r @snake 0 13816530
drawreplace -r @snake 37632 13816530
drawreplace -r @snake $hget(snake,colour) 13816530
drawtext -r @snake 0 Fixedsys 9 114 130 GAME OVER
drawtext -r @snake 0 Fixedsys 9 62 170 Press space to restart
hdel snake started
hdel snake gameon
hadd snake nostart 1
.timersnake off
.timerscore off
snake.hiscore
return
}
if ($read(snake.been.txt,w,$hget(snake,xbeg) $hget(snake,ybeg))) {
beep 7
drawreplace -r @snake 0 13816530
drawreplace -r @snake 37632 13816530
drawtext -r @snake 0 Fixedsys 9 114 130 GAME OVER
drawtext -r @snake 0 Fixedsys 9 62 170 Press space to restart
hdel snake started
hdel snake gameon
hadd snake nostart 1
.timersnake off
.timerscore off
snake.hiscore
return
}
if ($hget(snake,xbeg) $hget(snake,ybeg) == $hget(snake,food)) {
beep 1
drawrect -r @snake 37632 1 $hget(snake,xbeg) $hget(snake,ybeg) 10 10
write snake.been.txt $hget(snake,xbeg) $hget(snake,ybeg)
drawrect -fr @snake 37632 1 $hget(snake,food) 10 10
drawrect -r @snake 37632 1 $hget(snake,food) 10 10
hadd snake score $calc($hget(snake,score) + $hget(snake,fscore))
drawrect -fr @snake 16777215 1 61 302 139 20
drawtext -r @snake 0 Fixedsys 9 61 302 $hget(snake,score)
.timerscore off
hdel snake fscore
snake.addfood
}
else {
drawrect -fr @snake 37632 1 $hget(snake,xbeg) $hget(snake,ybeg) 10 10
drawrect -fr @snake 16777215 1 $read(snake.been.txt,1) 10 10
write -dl1 snake.been.txt
write snake.been.txt $hget(snake,xbeg) $hget(snake,ybeg)
}
}
alias -l snake.hiscore {
if ($hget(snake,score) > $iif(%snake.hiscore.3,$gettok(%snake.hiscore.3,2,32),0)) {
while (!%name) {
var %name $mid($remove($input(You got a high score! Enter your name here,eo,New high score!,Enter your name),$chr(32)),1,30)
}
if ($hget(snake,score) > $iif(%snake.hiscore.2,$gettok(%snake.hiscore.2,2,32),0)) {
if ($hget(snake,score) > $iif(%snake.hiscore.1,$gettok(%snake.hiscore.1,2,32),0)) {
set %snake.hiscore.3 %snake.hiscore.2
set %snake.hiscore.2 %snake.hiscore.1
set %snake.hiscore.1 %name $hget(snake,score) $replace(%snake.menu,easy,32764,medium,255,hard,16515072)
}
else {
set %snake.hiscore.3 %snake.hiscore.2
set %snake.hiscore.2 %name $hget(snake,score) $replace(%snake.menu,easy,32764,medium,255,hard,16515072)
}
}
else {
set %snake.hiscore.3 %name $hget(snake,score) $replace(%snake.menu,easy,32764,medium,255,hard,16515072)
}
}
unset %snake.menu
}