1. 程式人生 > >利用Canvas+js編寫貪吃蛇遊戲

利用Canvas+js編寫貪吃蛇遊戲

//拿到畫板 行內 var canvas = document.getElementById("canvas"); //獲取畫板許可權 var ctx = canvas.getContext("2d"); var width=15; //初始化的蛇的長度 var snakeCount = 6; //定義一條蛇 var snake = []; var foodX = 0; var foodY = 0; var toGo=3; //定義分數 var score = 0; //定義難度 var diff = 0
; //定義的一個畫窗格方法 function drawRect(){ for(var i=0;i<30;i++){ ctx.beginPath();//開始路徑 //起點 ctx.moveTo(i*15,0); //終點 ctx.lineTo(i*15,450); //橫向 ctx.moveTo(0,i*15); //縱向 ctx.lineTo(450,i*15); ctx.closePath();//結束路徑
//繪製線 ctx.stroke(); //ctx.strokeStyle="#000"; 定義線的顏色 } //畫蛇 for(var i=0;i<snakeCount;i++){ ctx.fillStyle="#000"; if(i==snakeCount-1)ctx.fillStyle="red"; //繪製矩形 ctx.fillRect(snake[i].x,snake[i].y,15,15); } //繪製食物 矩形
ctx.fillStyle="#66ff99"; ctx.fillRect(foodX,foodY,15,15); ctx.fill(); } //定義蛇的座標 function start(){ //遍歷蛇的長度 for(var i=0;i<snakeCount;i++){ snake[i] = {x:i*15,y:0}; } addFood(); drawRect(); } //新增食物 function addFood(){ //隨機座標 math.floor 向下取整20.99999=20 foodX = Math.floor(Math.random()*30)*15; foodY = Math.floor(Math.random()*30)*15; for(var i=0;i<snakeCount-1;i++){ if(foodX==snake[i].x&&foodY==snake[i].y){ addFood(); } } } //蛇的移動方向 function move(){ switch(toGo){ case 1:snake.push({x:snake[snakeCount-1].x-15,y:snake[snakeCount-1].y});break;//向左 case 2:snake.push({x:snake[snakeCount-1].x,y:snake[snakeCount-1].y-15});break;//向上 case 3:snake.push({x:snake[snakeCount-1].x+15,y:snake[snakeCount-1].y});break;//向右 case 4:snake.push({x:snake[snakeCount-1].x,y:snake[snakeCount-1].y+15});break;//向下 } //刪除第一個元素 snake.shift(); //重新繪製 ctx.clearRect(0,0,450,450); isDead(); isEat(); drawRect(); } function keyDown(e){ switch(e.keyCode){ case 37:toGo=1;break; case 38:toGo=2;break; case 39:toGo=3;break; case 40:toGo=4;break; } } function btnstart(diff){ setInterval(move,diff); //監聽鍵盤事件 document.onkeydown = function(e){ //瀏覽器的相容性 var e = e||window.event; //console.log(e.keyCode);//獲取鍵盤的鍵碼值 keyDown(e); } } //定義遊戲的規則 function isDead(){ //判斷邊界 if(snake[snakeCount-1].x>435||snake[snakeCount-1].y>435|| snake[snakeCount-1].x<0||snake[snakeCount-1].y<0){ alert("你已撞牆,遊戲結束!分數是:"+score); window.location.reload(); } //判斷自身 遍歷蛇身上所有的座標 判斷是否與尾巴重疊 for(var i=0;i<snakeCount-1;i++){ if(snake[snakeCount-1].x==snake[i].x&&snake[snakeCount-1].y==snake[i].y){ alert("你咬住自己的尾巴,遊戲結束!分數是:"+score); window.location.reload(); } } } //可以吃食物 function isEat(){ if(snake[snakeCount-1].x==foodX&&snake[snakeCount-1].y==foodY){ addFood(); snakeCount++; snake.unshift({x:-15,y:-15}); score+=50;//score = score+50; } } //當頁面載入完成執行這個方法 window.onload = function(){ start(); }