Javascript 簡易版貪食蛇

簡易版貪食蛇

  var canvas = document.getElementById("myCanvas"); //抓取元素 myCanvas dom
  var ctx = canvas.getContext("2d");//設置為2D
  var scoretext=document.getElementById("Score");//抓取分數dom
  var snack={body:[{x:180,y:140},{x:170,y:140},{x:160,y:140},{x:150,y:140},{x:140,y:140}],bodysize:5,direct:"right"};//設置snack身體 長度 方向
  var apple={};//設置蘋果位置
  var score=0;//分數
  move();//蛇移動
  applecreate();//創造蘋果
  var time=setInterval(move,100); //計時器

  document.addEventListener("keydown",function(e) //監聽按下的鍵盤事件
  {
   if(e.keyCode=="37")
   {
     snack.direct="left";
   }
   else if(e.keyCode=="39")
   {
     snack.direct="right";
   
   }
    else if(e.keyCode=="38")
   {
     snack.direct="top";
   
   }
    else if(e.keyCode=="40")
   {
     snack.direct="down";
   
   }
  });
  //snackmove
  function move()
  {
    updatescore(); //更新分數
    ctx.clearRect(0, 0, canvas.width, canvas.height); //清理畫布
    ctx.fillStyle = "#9fe8fa"; //填充顏色
    ctx.fillRect(0, 0, 300, 300);
    ctx.fillStyle = "#26baee"; //填充顏色
    ctx.fillRect(apple.x,apple.y, 10, 10); 
    ctx.fillStyle = "#FFE"; //填充顏色
    ctx.strokeStyle ="#26baee"; //填充邊框顏色
    ctx.lineWidth = 1; //邊框大小
    direction(); //判定方向
    //畫出蛇身體
    for(var i=0;i<snack.body.length;i++)
    {
    ctx.fillRect(snack.body[i].x,snack.body[i].y, 10, 10); 
    ctx.strokeRect(snack.body[i].x,snack.body[i].y, 10, 10);
    }
    //超過size陣列清掉
    for(var i=0;i<snack.body.length;i++)
    {
    if(i>=snack.bodysize)
    snack.body.pop();
    }
  }
  //蛇方向
  function direction()
  {
   if(snack.direct=="left")
   {
    snack.body.unshift({x:snack.body[0].x-10,y:snack.body[0].y});
   }
   else if(snack.direct=="top")
   {
     snack.body.unshift({x:snack.body[0].x,y:snack.body[0].y-10});
   }
   else if(snack.direct=="down")
   {
     snack.body.unshift({x:snack.body[0].x,y:snack.body[0].y+10});
   }
   else if(snack.direct=="right")
   {
     snack.body.unshift({x:snack.body[0].x+10,y:snack.body[0].y});
   
   }
   eatapple();
   gameover();
  }
  //判斷是否死掉
  function gameover()
  {
   for(var i=1;i<snack.body.length;i++)
   {
     if(snack.body[0].x==snack.body[i].x&&snack.body[0].y==snack.body[i].y)
     {
        reset();
       break;
     }
   }
    if(snack.body[0].x<0||snack.body[0].x>=300||snack.body[0].y>=300||snack.body[0].y<0)
    {
      reset();
    }
  }
  //創造蘋果
  function applecreate()
  {
   var x=Math.floor(Math.random()*30)*10; //0~29之間在乘10
   var y=Math.floor(Math.random()*30)*10; //0~29之間在乘10
   //檢查蘋果是否在蛇身上
   for(var i=0;i<snack.body.length;i++)
   {
     if(x==snack.body[i].x&&y==snack.body[i].y)
     {
        x=Math.floor(Math.random()*30)*10;
        y=Math.floor(Math.random()*30)*10;
        i=0;
     }
   }
   apple.x=x;
   apple.y=y;
  }
  //吃掉蘋果
  function eatapple()
  {
     if(snack.body[0].x==apple.x&&snack.body[0].y==apple.y)//蛇碰到蘋果吃掉
     {
        applecreate();
        snack.bodysize++;
          score+=10;          
     }
  }
  //更新分數
  function updatescore()
  {
    scoretext.innerText=score;
  }
  //初始化
  function reset()
  {
   snack.body=[{x:180,y:140},{x:170,y:140},{x:160,y:140}, {x:150,y:140},{x:140,y:140}];
   snack.bodysize=5;
   snack.direct="right";
   move();
   applecreate();
   score=0;
  }

Demo:demo