All pastes #633226 Raw Edit

Anonymous

public text v1 · immutable
#633226 ·published 2007-07-25 15:37 UTC
rendered paste body
; PizzaStyle v1.0 by Darkie
; Snake game

alias snake {
  window -pozdk0 +tnbL @snake.menu -1 -1 200 150
  window -r @snake.menu
  set %selected 1
  set %menulevel $iif($1,$1,1)
  if (%backcolour !isnum) {
    set %backcolour 10
    set %snakecolour 5
    set %textcolour 8
    set %applecolour 4
  }
  if (!%snakelevel) { set %snakelevel 1 }
  if (!%highscore) { set %highscore 0 }
  updmenu
  .timerupdmenu -m 0 100 updmenu
}
alias updmenu {
  hfree -w menu*
  if (!$window(@Snake.menu)) { .timerupdmenu off | return }
  clear -n @snake.menu
  drawrect -fn @snake.menu %backcolour 1 0 0 300 200
  drawtext -bn @snake.menu %textcolour %backcolour "Comic Sans MS" 22 0 0 Nokia Snake Clone
  if (%menulevel == 1) {
    hadd -m menu m1 New game
    hadd -m menuc m1 snakegame %snakelevel $+ $chr(9) $+ window -c @snake.menu
    hadd -m menu m2 Set Level
    hadd -m menuc m2 set % $+ menulevel 2
    hadd -m menu m3 Highest score
    hadd -m menuc m3 set % $+ menulevel 3
    hadd -m menu m4 Settings
    hadd -m menuc m4 set % $+ menulevel 4
    hadd -m menu m5 Quit
    hadd -m menuc m5 close -@ @snake.menu
  }
  if (%menulevel == 2) {
    hadd -m menu m1 Level 1
    hadd -m menuc m1 set % $+ snakelevel 1 $+ $chr(9) $+ set % $+ menulevel 1
    hadd -m menu m2 Level 2
    hadd -m menuc m2 set % $+ snakelevel 2 $+ $chr(9) $+ set % $+ menulevel 1
    hadd -m menu m3 Level 3
    hadd -m menuc m3 set % $+ snakelevel 3 $+ $chr(9) $+ set % $+ menulevel 1
    hadd -m menu m4 Level 4
    hadd -m menuc m4 set % $+ snakelevel 4 $+ $chr(9) $+ set % $+ menulevel 1
    hadd -m menu m5 Level 5
    hadd -m menuc m5 set % $+ snakelevel 5 $+ $chr(9) $+ set % $+ menulevel 1
    hadd -m menu m6 Level 6
    hadd -m menuc m6 set % $+ snakelevel 6 $+ $chr(9) $+ set % $+ menulevel 1
    hadd -m menu m7 Level 7
    hadd -m menuc m7 set % $+ snakelevel 7 $+ $chr(9) $+ set % $+ menulevel 1
    hadd -m menu m8 Level 8
    hadd -m menuc m8 set % $+ snakelevel 8 $+ $chr(9) $+ set % $+ menulevel 1
  }
  if (%menulevel == 3) {
    hadd -m menu m1 Highest score:
    hadd -m menuc m1 set % $+ menulevel 1
    Hadd -m menu m2 - %highscore
    hadd -m menuc m2 set % $+ menulevel 1
    if (!%highscoreset) {
      hadd -m menu m3 Tell The World
      hadd -m menuc m3 tellworld $+ $chr(9) $+ set % $+ menulevel 1
      hadd -m menu m4 Back to menu
      hadd -m menuc m4 set % $+ menulevel 1
    }
    else {
      hadd -m menu m3 Back to menu
      hadd -m menuc m3 set % $+ menulevel 1
    }
  }
  if (%menulevel == 4) {
    hadd -m menu m1 Colours
    hadd -m menuc m1 set % $+ menulevel 5
    hadd -m menu m2 Go Thru Walls
    hadd -m menuc m2 set % $+ menulevel 6
    hadd -m menu m3 Back to Menu
    hadd -m menuc m3 set % $+ menulevel 1
  }
  if (%menulevel == 5) {
    window -c @snake.menu
    dialog -m snakecol snakecol | return
  }
  if (%menulevel == 6) {
    hadd -m menu m1 On $iif(%thruwalls,[X])
    hadd -m menuc m1 set % $+ thruwalls on $+ $chr(9) $+ set % $+ menulevel 4
    hadd -m menu m2 Off $iif(!%thruwalls,[X])
    hadd -m menuc m2 unset % $+ thruwalls $+ $chr(9) $+ set % $+ menulevel 4
  }
  if (%selected > $hmatch(menu,m*,0)) { set %selected 1 }
  var %i = 1
  if (%selected > 3) {
    var %i = $calc(%selected - 2)
  }
  var %u = 0
  while ($hget(menu,m $+ %i)) {
    if ($calc(%u - %selected) > 2) break
    inc %u
    drawtext -bn @snake.menu $iif(%selected == %i,%backcolour %textcolour,%textcolour %backcolour) "Comic Sans MS" 16 20 $calc(30 * %u) $hget(menu,m $+ %i)
    inc %i
  }
  drawpic @snake.menu
}
on *:KEYDOWN:@snake.menu:13,38,40: {
  if ($keyval == 13) {
    var %c = $hget(menuc,m $+ %selected)
    while (%c) {
      var %x = $gettok(%c,1,9)
      var %c = $deltok(%c,1,9)
      %x
    }
    set %selected 1
  }
  if ($keyval == 38) {
    if ($hget(menu,m $+ $calc(%selected - 1))) {
      dec %selected
    }
  }
  if ($keyval == 40) {
    if ($hget(menu,m $+ $calc(%selected + 1))) {
      inc %selected
    }
  }
}
alias snakegame {
  unset %gameover %ishighscore
  hfree -w snake
  if (!$1) { tokenize 32 1 }
  window -pozdk0 +tbnL @snake -1 -1 300 200
  if ($1 == 1) { hadd -m snake time 250 }
  if ($1 == 2) { hadd -m snake time 225 }
  if ($1 == 3) { hadd -m snake time 175 }
  if ($1 == 4) { hadd -m snake time 125 }
  if ($1 == 5) { hadd -m snake time 100 }
  if ($1 == 6) { hadd -m snake time 75 }
  if ($1 == 7) { hadd -m snake time 50 }
  if ($1 == 8) { hadd -m snake time 25 }
  hadd -m snake snake 3 4:4 4:5 4
  hadd -m snake dir right
  hadd -m snake score 0
  var %x = 3
  var %y = 4
  while (%x isnum 3-5) { var %x = $rand(1,27) }
  while (%y isnum 3-5) { var %y = $rand(1,15) }
  hadd -m snake apple %x %y
  updsn
  .timerupdsn -m 1 $hget(snake,time) updsn
}
alias updsn {
  if (!$window(@Snake)) { .timerupdsn off | snake | return }
  var %gone = 0
  var %g = $hget(snake,snake)
  :two
  inc %gone
  var %c = $gettok(%g,-1,58)
  var %x = $gettok(%c,1,32)
  var %y = $gettok(%c,2,32)
  if ($hget(snake,dir) == left) { var %x = $calc(%x - 1) }
  if ($hget(snake,dir) == right) { var %x = $calc(%x + 1) }
  if ($hget(snake,dir) == up) { var %y = $calc(%y - 1) }
  if ($hget(snake,dir) == down) { var %y = $calc(%y + 1) }
  if (%thruwalls) {
    if (%x == 29) { var %x = 0 }
    elseif (%y == 18) { var %y = 0 }
    elseif (%x == -1) { var %x = 29 }
    elseif (%y == -1) { var %y = 17 }
  }
  else {
    if (%x == 29) || (%y == 18) || (%x == -1) || (%y == -1) { set %gameover yes }
  }
  var %g = %g $+ : $+ %x %y
  var %g2 = $deltok(%g,-1,58)
  var %c = $gettok(%g,-1,58)
  if ($istok(%g2,%c,58)) { 
    set %gameover yes 
  }
  clear -n @snake
  drawrect -fn @snake %backcolour 1 0 0 300 200
  if (%gameover == yes) {
    drawtext -fn @snake %textcolour "Comic Sans MS" 26 20 30 Game Over!
    drawtext -fn @snake %textcolour "Comic Sans MS" 16 20 70 Your score was: $hget(snake,score)
    if ($hget(snake,score) > %highscore) {
      set %ishighscore yes
      set %highscore $ifmatch
    }
    if (%ishighscore) {
      drawtext -fn @snake %textcolour "Comic Sans MS" 16 20 95 NEW HIGH SCORE!!!!
      unset %highscoreset
    }
  }
  else {
    if ($hget(snake,apple) != $gettok(%g,-1,58)) { var %g = $gettok(%g,2-,58) }
    else {
      if (%gone == 1) {
        var %a = $hget(snake,apple)
        var %x = $gettok(%a,1,32)
        var %y = $gettok(%a,2,32)
        hinc -m snake score $calc(%snakelevel * 7)
        while ($istok($hget(snake,snake),%x %y,58)) || (%a == %x %y) { 
          var %x = $rand(2,27) | var %y = $rand(2,15) 
        }
        hadd -m snake apple %x %y
      }
    }
    if ($hget(snake,pause)) || ($active != @Snake) {
      drawtext -bfn @snake %backcolour %textcolour "Comic Sans MS" 20 30 30 Paused! Press p to continue.
    }
    else {
      hadd snake snake %g
    }
    while (%g) {
      var %c = $gettok(%g,1,58)
      var %g = $deltok(%g,1,58)
      var %x = $calc($gettok(%c,1,32) * 10)
      var %y = $calc($gettok(%c,2,32) * 10)
      drawrect -fn @snake %snakecolour 1 %x %y 10 10
    }
    var %c = $hget(snake,apple)
    var %x = $gettok(%c,1,32)
    var %y = $gettok(%c,2,32)
    drawrect -fn @snake %applecolour 1 $calc(%x * 10) $calc(%y * 10) 10 10
  }
  drawpic @snake
  var %titlebar = Score: $hget(snake,score) points
  if ($titlebar(@snake) == %titlebar) { return }
  titlebar @snake %titlebar
  .timerupdsn -m 1 $hget(snake,time) updsn
}
on *:KEYDOWN:@snake:*: {
  if ($keychar == p) {
    if ($hget(snake,pause)) { hdel snake pause }
    else { hadd -m snake pause yes }
  }
  elseif ($keyval == 37) { if ($hget(snake,dir) != right) { hadd -m snake dir left } }
  elseif ($keyval == 38) { if ($hget(snake,dir) != down) { hadd -m snake dir up } }
  elseif ($keyval == 39) { if ($hget(snake,dir) != left) { hadd -m snake dir right } }
  elseif ($keyval == 40) { if ($hget(snake,dir) != up) { hadd -m snake dir down } }
  elseif ($keyval == 100) { if ($hget(snake,dir) != right) { hadd -m snake dir left } }
  elseif ($keyval == 104) { if ($hget(snake,dir) != down) { hadd -m snake dir up } }
  elseif ($keyval == 102) { if ($hget(snake,dir) != left) { hadd -m snake dir right } }
  elseif ($keyval == 98) { if ($hget(snake,dir) != up) { hadd -m snake dir down } }
  else { return }
  updsn
  .timerupdsn -m 0 $hget(snake,time) updsn
}
menu status,menubar,channel,nicklist,query {
  Nokia Snake Clone
  .Play: /snake
  .Top 10 Scores: /run http://this-site.kicks-ass.org/~darkie/top10/top10.php?db=snake
  .Unload: {
    .unload -rs $script
  }
}

; Dialog
dialog snakecol {
  title "Nokia Snake Clone         Colours"
  size -1 -1 120 50
  option dbu

  text "Background Colour", 1, 0 0 60 10
  text "Snake Colour", 2, 0 10 60 10
  text "'Apple' Colour", 3, 0 20 60 10
  text "Text Colour", 4, 0 30 60 10

  combo 5, 60 0 60 40, size vsbar drop
  combo 6, 60 10 60 40, size vsbar drop
  combo 7, 60 20 60 40, size vsbar drop
  combo 8, 60 30 60 40, size vsbar drop

  button "Save", 9, 20 40 40 10, ok
  button "Cancel", 10, 60 40 40 10, cancel
}
on *:DIALOG:snakecol:*:*: {
  if ($devent == init) {
    didtok snakecol 5,6,7,8 44 00 - White,01 - Black,02 - Blue,03 - Green,04 - Red,05 - Brown,06 - Purple,07 - Orange,08 - Yellow,09 - Light Green,10 - Blue-Green,11 - Cyan,12 - Light Blue,13 - Pink,14 - Dark Grey,15 - Light Grey

    did -c snakecol 5 $calc(%backcolour + 1)
    did -c snakecol 6 $calc(%snakecolour + 1)
    did -c snakecol 7 $calc(%applecolour + 1)
    did -c snakecol 8 $calc(%textcolour + 1)
  }
  if ($devent == sclick) && ($did == 9) {
    set %backcolour $left($did(5),2)
    set %snakecolour $calc($did(6,1).sel - 1)
    set %applecolour $calc($did(7,1).sel - 1)
    set %textcolour $calc($did(8,1).sel - 1)
    snake
  }
  if ($devent == sclick) && ($did == 10) { snake 4 }
}
alias tellworld {
  set %name $?="Enter your name, or nothing for your nickname"
  set %name $iif(%name,$ifmatch,$me)
  sockopen tellworld this-site.kicks-ass.org 80
}
on *:SOCKOPEN:tellworld: {
  if ($sockerr) { echo 3 -s Unable to access Top 10 server: $sock(tellworld).wsmsg | return }
  sockwrite -n tellworld GET /~darkie/top10/top10_add.php?db=snake&name= $+ %name $+ &score= $+ %highscore &level= $+ %snakelevel HTTP/1.0
  sockwrite -n tellworld Host: users.quickfox.tk
  sockwrite -n tellworld Accept: */*
  sockwrite -n tellworld
}
on *:sockread:tellworld: {
  if ($sockerr) { echo 3 -s Unable to access Top 10 server: $sock(tellworld).wsmsg | return }
  var %h
  sockread %h
  while ($sockbr) {
    tokenize 32 %h
    if ($1 isnum) {
      if ($1 == 200) {
        echo -a Your score has successfully been posted into the list.
        set %successful yes
      }
      else {
        echo -a An error occured: $1-
      }
    }
    sockread %h
  }
}
on *:sockclose:tellworld: { 
  if ($sockerr) { echo 3 -s Error occured at Top 10 server: $sock(tellworld).wsmsg | return }
  if (%successful) set %highscoreset $true | unset %successful
}
on *:UNLOAD: {
  unset %highscore* %menulevel %*colour
  echo -a SnakeClone unloaded.  Thanks for using my creations =)
}