title: javascript array problem
body: <p>i have written a snake program using javascript..
  the problem is that the snake does not grow more than 2 blocks size....</p>
  
  <pre><code>&lt;html&gt;
  &lt;head&gt;
  &lt;script type="text/javascript"&gt;
  
  var matrix, body, dir, key, lastx, lasty, start, applex, appley, eat, hal;
  
  
  function node(x, y) {
      this.x = x;
      this.y = y;
  }
  
  
  function draw() {
      var str;
      for (var i = 0; i &lt; body.length; i++) {
          matrix[body[i].x * 50 + body[i].y].bgColor = "black";
      }
  
  }
  
  
  function halt() {
      hal = 1 - hal;
      if (hal == 0) automove();
  }
  
  
  function check_status() {
      if (start == 1 &amp;&amp; hal == 0) {
  
          var ch;
          if (eat == 1) {
              do {
                  ch = 0;
                  applex = Math.round(49 * Math.random());
                  appley = Math.round(49 * Math.random());
                  for (var i = 0; i &lt; body.length; i++)
                  if (body[i].x == applex &amp;&amp; body[i].x == appley) ch = 1;
              } while (ch == 1);
  
  
              matrix[applex * 50 + appley].bgColor = "blue";
              eat = 0;
          }
  
  
  
          lastx = body[body.length - 1].x;
          lasty = body[body.length - 1].y;
          for (var i = 1; i &lt; body.length; i++) {
              body[i].x = body[i - 1].x;
              body[i].y = body[i - 1].y;
          }
  
  
          if (dir == 1)--body[0].x;
          else if (dir == -1)++body[0].x;
          else if (dir == 2)--body[0].y;
          else if (dir == -2)++body[0].y;
  
          if (body[0].x == -1 || body[0].x == 50 || body[0].y == 50 || body[0].y == -1) {
              alert("GAME OVER!!");
              start = 0;
          }
  
  
          for (var i = 1; i &lt; body.length; i++) {
              if (body[0].x == body[i].x &amp;&amp; body[0].y == body[i].y) {
                  alert("GAME OVER!!");
                  start = 0;
                  i = 10000;
              }
          }
  
  
          if (body[0].x == applex &amp;&amp; appley == body[0].y) {
              eat = 1;
              body[body.length] = new node(lastx, lasty);
          }
          matrix[lastx * 50 + lasty].bgColor = "white";
          draw();
      }
  }
  
  
  
  function automove() {
      if (start == 1 &amp;&amp; hal == 0) {
          if (key != -dir) dir = key;
          check_status();
          window.setTimeout("automove()", 200);
      }
  }
  
  
  function init() {
      start = 1;
      var x = document.getElementById("mine");
      var str = "&lt;table id='tab' align='center' height='500px' cellSpacing='0' cellPadding='0' width='500px' border='4' &gt;";
  
  
      for (var i = 0; i &lt; 50; i++) {
          str += "&lt;tr&gt;";
          for (var j = 0; j &lt; 50; j++)
          str += "&lt;td&gt;&lt;/td&gt;";
          str += "&lt;/tr&gt;";
      }
      str += "&lt;/table&gt;";
      x.innerHTML = str;
  
  
      matrix = document.getElementsByTagName("td");
      body = new Array();
      body[0] = new node(0, 0);
      draw();
      dir = key = -1;
  
      eat = 1;
      v = 0;
      hal = 0;
      automove();
  }
  
  
  function keypress(e) {
      if ((e.keyCode == 38) || ((e.which) &amp;&amp; (e.which == 38))) //up
      key = 1;
      else if ((e.keyCode == 40) || ((e.which) &amp;&amp; (e.which == 40))) //down
      key = -1;
      else if ((e.keyCode == 37) || ((e.which) &amp;&amp; (e.which == 37))) //left
      key = 2;
      else if ((e.keyCode == 39) || ((e.which) &amp;&amp; (e.which == 39))) //right
      key = -2;
      check_status();
  }
  
  &lt;/script&gt;
  &lt;/head&gt;
  &lt;body onkeydown=keypress(event)&gt;
  &lt;br/&gt;
  &lt;input type="button" onClick="init()" value="play"&gt;
  &lt;input type="button" onClick="halt()" value="pause"&gt;
  &lt;p id="mine"&gt;&lt;/p&gt;
  &lt;br&gt;&lt;h5 id="score"&gt;&lt;/h5&gt;
  &lt;/body&gt;
  &lt;/html&gt;
  </code></pre>