menu * { Snake .Snake:/Snake .MultiPlayer:/snake.multi .Make Levels:/MakeSnake } alias snake { unset %sn.* if ($window(@Snake)) window -c @Snake window -Ckpd +btn @Snake -1 -1 217 261 if (!$hget(Snake,Record)) hadd -m Snake Record 0 if (!$hget(Snake,Speed)) hadd -m Snake Speed 1 drawfill -r @snake $rgb(135,35,35) 1 1 1 set %sn.menu 1 hl } alias -l hl { drawfill -r @snake $rgb(135,35,35) 1 1 1 drawtext -ro @Snake $rgb(10,10,10) Arial 48 23 16 SNAKE drawtext -ro @Snake $rgb(250,250,250) Arial 48 19 12 SNAKE if (%sn.menu == 1) { drawrect -rf @Snake $rgb(250,100,100) 1 63 75 83 15 drawrect -r @Snake $rgb(200,150,150) 1 63 75 83 15 } drawtext -r @Snake $rgb(250,250,250) Fixedsys 8 64 75 Start Game if (%sn.menu == 2) { drawrect -rf @Snake $rgb(250,100,100) 1 60 111 90 15 drawrect -r @Snake $rgb(200,150,150) 1 60 111 90 15 } drawtext -r @Snake $rgb(250,250,250) Fixedsys 8 61 110 MultiPlayer if (%sn.menu == 3) { drawrect -rf @Snake $rgb(250,100,100) 1 60 126 $calc(67 + (8 * $len($hget(Snake,record)))) 15 drawrect -r @Snake $rgb(200,150,150) 1 60 126 $calc(67 + (8 * $len($hget(Snake,record)))) 15 } drawtext -r @Snake $rgb(250,250,250) Fixedsys 8 61 125 Record: $hget(Snake,record) if (%sn.menu == 4) { drawrect -rf @Snake $rgb(250,100,100) 1 67 196 72 15 drawrect -r @Snake $rgb(200,150,150) 1 67 196 72 15 } drawtext -r @Snake $rgb(250,250,250) Fixedsys 8 68 195 Exit Game } on *:keydown:@snake:13,32,37,38,39,40,80:{ if (%sn.ake == Game Over) halt if (!%sn.ake) { if ($istok(13.32.39,$keyval,46)) { if (%sn.menu == 2) { if ($hget(Snake,Speed) > 1) hdec Snake Speed else hinc Snake Speed 19 hl } if (%sn.menu == 1) { NewSnake } if (%sn.menu == 4) { window -c @snake unset %sn.* } if (%sn.menu == 2) { Snake.Multi } } if ($keyval == 40) { if (%sn.menu < 4) inc %sn.menu else dec %sn.menu 3 hl } if ($keyval == 38) { if (%sn.menu > 1) dec %sn.menu else inc %sn.menu 3 hl } } else { if (!%sn.pause) { if ($keyval == 37) && (%sn.dir != esq) set %sn.mov $iif(%sn.mov,$ifmatch esq,esq) elseif ($keyval == 40) && (%sn.dir != bai) set %sn.mov $iif(%sn.mov,$ifmatch bai,bai) elseif ($keyval == 39) && (%sn.dir != dir) set %sn.mov $iif(%sn.mov,$ifmatch dir,dir) elseif ($keyval == 38) && (%sn.dir != cim) set %sn.mov $iif(%sn.mov,$ifmatch cim,cim) } if ($keyval == 80) { if (%sn.pause) { unset %sn.pause } elseif (!%sn.pause) { set %sn.pause ON } } } } alias -l NewSnake { set %Sn.ake on drawrect -rf @snake $rgb(135,35,35) 1 0 0 $window(@snake).w $window(@Snake).h drawline -r @Snake 0 1 5 30 5 221 var %x = 1 while (%x < 21) { drawline -r @Snake 0 1 $calc(%x *10+5) 30 $calc(%x *10+5) 221 drawline -r @Snake 0 1 5 $calc((%x -1) *10+30) 205 $calc((%x -1) *10+30) inc %x 1 } set %sn.time 20 set %sn.pos 1x3 1x2 1x1 1x-1 set %sn.frame 0 set %sn.points 0 .timerSnake -m 0 100 DrawSnake } on *:CLOSE:@Snake: { unset %sn.* .timersnake off } alias -l DrawSnake { if (%sn.pause != on) { inc %sn.frame if (!%sn.dir) && (%sn.mov) set %sn.intime $ctime var %w = $gettok(%sn.mov,1,32), %x = $gettok($gettok(%sn.pos,1,32),1,120), %y = $gettok($gettok(%sn.pos,1,32),2,120) if (%w == dir) && (%sn.dir != dir) && (%sn.dir != esq) { set %sn.pos $+($calc(%x +1),x,%y) $deltok(%sn.pos,-1,32) | set %sn.dir dir } elseif (%w == esq) && (%sn.dir) && (%sn.dir != esq) && (%sn.dir != dir) { set %sn.pos $+($calc(%x -1),x,%y) $deltok(%sn.pos,-1,32) | set %sn.dir esq } elseif (%w == bai) && (%sn.dir != bai) && (%sn.dir != cim) { set %sn.pos $+(%x,x,$calc(%y +1)) $deltok(%sn.pos,-1,32) | set %sn.dir bai } elseif (%w == cim) && (%sn.dir) && (%sn.dir != cim) && (%sn.dir != bai) { set %sn.pos $+(%x,x,$calc(%y -1)) $deltok(%sn.pos,-1,32) | set %sn.dir cim } else { if (%sn.dir == dir) set %sn.pos $+($calc(%x +1),x,%y) $deltok(%sn.pos,-1,32) if (%sn.dir == esq) set %sn.pos $+($calc(%x -1),x,%y) $deltok(%sn.pos,-1,32) if (%sn.dir == bai) set %sn.pos $+(%x,x,$calc(%y +1)) $deltok(%sn.pos,-1,32) if (%sn.dir == cim) set %sn.pos $+(%x,x,$calc(%y -1)) $deltok(%sn.pos,-1,32) } var %x = $gettok($gettok(%sn.pos,1,32),1,120), %y = $gettok($gettok(%sn.pos,1,32),2,120) if (%x == $gettok(%sn.potion,1,32)) && (%y == $gettok(%sn.potion,2,32)) { unset %sn.potion set %sn.pos %sn.pos $+($calc((%x +1)/10-6),x,$calc((%y +1)/10-31)) inc %sn.points 10 } var %p = 2 while ($gettok(%sn.pos,%p,32)) { var %pos = $v1 if ($+(%x,x,%y) == %pos) { Game-Over | .timerSnake off | halt } inc %p } if (%y == 0) || (%x == 0) || (%y > 19) || (%x > 20) { Game-Over | .timerSnake off | halt } set %sn.mov $deltok(%sn.mov,1,32) var %n = $gettok(%sn.pos,0,32), %i = 1 while (%i <= %n) { var %x = $gettok($gettok(%sn.pos,%i,32),1,120), %y = $gettok($gettok(%sn.pos,%i,32),2,120) if (%i == 1) drawrect -rfd @Snake $rgb(200,230,190) 1 $calc((%x -1)*10+6) $calc((%y -1)*10+31) 9 9 2 2 else drawrect -rfd @Snake $rgb(150,180,140) 1 $calc((%x -1)*10+6) $calc((%y -1)*10+31) 9 9 2 2 if (%n == %i) drawrect -rfd @Snake $rgb(135,35,35) 1 $calc((%x -1)*10+6) $calc((%y -1)*10+31) 9 9 2 2 inc %i } if (!%sn.potion) { :pot var %n = $+($rand(1,20),x,$rand(1,19)) if (%n !isin %sn.pos) set %sn.potion $replace(%n,x,$chr(32)) else goto pot } apple if ($asctime($calc($ctime - %sn.intime),nn:ss) != 00:00) { drawrect -rf @Snake $rgb(135,35,35) 1 12 2 $window(@Snake).w 15 drawtext -ro @Snake $rgb(10,10,10) Arial 14 13 3 Points: %sn.points drawtext -ro @Snake $rgb(250,250,250) Arial 14 11 4 Points: %sn.points drawtext -ro @Snake $rgb(10,10,10) Arial 14 120 3 TIME: $iif(%sn.intime,$asctime($calc($ctime - %sn.intime),nn:ss),00:00) drawtext -ro @Snake $rgb(250,250,250) Arial 14 118 4 TIME: $iif(%sn.intime,$asctime($calc($ctime - %sn.intime),nn:ss),00:00) } } } alias -l Game-Over { drawrect -rfd @snake $rgb(0,0,0) 1 45 90 121 71 1 1 drawrect -rd @snake $rgb(255,255,255) 1 45 90 121 71 1 1 drawtext -r @snake $rgb(255,255,255) Terminal 8 78 95 Game Over if (%sn.points > $hget(Snake,Record)) { hadd -m Snake Record %sn.points drawtext -r @snake $rgb(255,255,255) Terminal 8 84 115 Record: } else drawtext -r @snake $rgb(255,255,255) Terminal 8 84 115 Points: drawtext -r @snake $rgb(255,255,255) Terminal 8 84 128 %sn.points drawtext -r @snake $rgb(255,255,255) Terminal 8 57 148 Click to restart set %sn.ake Game Over } menu @Snake { sclick { if (%sn.ake == Game Over) { unset %sn.* newsnake } } } alias -l apple { drawrect -rfe @Snake $rgb(250,0,0) 1 $calc(($gettok(%sn.potion,1,32) -1)*10+6) $calc(($gettok(%sn.potion,2,32) -1)*10+31) 9 9 drawrect -re @Snake $rgb(250,250,250) 1 $calc(($gettok(%sn.potion,1,32) -1)*10+6) $calc(($gettok(%sn.potion,2,32) -1)*10+31) 9 9 drawline -r @Snake $rgb(0,250,0) 1 $calc(($gettok(%sn.potion,1,32) -1)*10+10) $calc(($gettok(%sn.potion,2,32) -1)*10+31) $& $calc(($gettok(%sn.potion,1,32) -1)*10+10) $calc(($gettok(%sn.potion,2,32) -1)*10+34) }