All pastes #476240 Raw Edit

Unnamed

public text v1 · immutable
·published 2007-05-07 23:07 UTC
rendered paste body
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)
}