利用Canvas+js編寫貪吃蛇遊戲
阿新 • • 發佈:2019-02-06
//拿到畫板 行內
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();
}