canvas炒雞簡(jiǎn)單的貪吃蛇效果?υ? html+css+js

      網(wǎng)友投稿 797 2022-05-29

      一.話(huà)不多,先瞅效果:

      又在別的地方嫖到了這個(gè)效果研究了億下下,制作過(guò)程如下(超詳細(xì)):

      二.實(shí)現(xiàn)過(guò)程(源碼在最后):

      #canvas{ position: absolute; top: 50%; left: 50%; transform: translate(-50%,-50%); box-shadow: 0 0 10px rgb(150, 150, 150); }

      position: absolute; 絕對(duì)定位。

      top: 50%;

      left: 50%;

      canvas炒雞簡(jiǎn)單的貪吃蛇效果?υ? html+css+js

      transform: translate(-50%,-50%); 居中。

      box-shadow: 0 0 10px rgb(150, 150, 150); 陰影。

      var canvas = document.querySelector("#canvas"); var ctx = canvas.getContext('2d');

      //畫(huà)布寬 var wide=600; //畫(huà)布高 var high=600; // 變量,判斷一次渲染中只識(shí)別按鍵一次 var kd = 0; //當(dāng)前分?jǐn)?shù) var fraction =0; //速度,就是執(zhí)行定時(shí)器的時(shí)間參數(shù) var speed = 250; // 蛇的初始顏色 紅色 var yanse = `red`; // 蛇數(shù)組,組成蛇的每一個(gè)方塊 var snake = []; // 食物數(shù)組 var food = {}; // 蛇的移動(dòng)方向,x軸:1為向右,-1為向左;y軸:1為向下,-1為向上 。不能斜著走,所以0為某軸無(wú)方向。 var diretion = { x:-1, y:0 } // 給畫(huà)布寬高賦值 打算畫(huà)一個(gè)長(zhǎng)寬都是30個(gè)20px的方塊畫(huà)布 canvas.width = wide; canvas.height = high;

      function chushi(){ //蛇初始長(zhǎng)度為3個(gè)方塊,位置如下(這個(gè)隨意) for(let i =0;i<3;i++){ snake.push({ x: i+10, y: 10 }) } // 給食物一個(gè)隨機(jī)位置和隨機(jī)顏色 food = { x: parseInt(Math.random()*30), y: parseInt(Math.random()*30), color:`rgb(${Math.random()*255},${Math.random()*255},${Math.random()*255})` } }

      // 繪制圖形 function draw(){ // 繪制顯示當(dāng)前分?jǐn)?shù)的文字 ctx.fillStyle = 'rgba(255,255,255,0.5)'; ctx.font="50px 仿宋"; ctx.textAlign = 'center'; ctx.fillText("你的分?jǐn)?shù)為:"+fraction+" 分",300,300); // 繪制方格,長(zhǎng)寬都是30個(gè),都是19px*19px的方格 for(let i=0;i<30;i++){ for(let j=0;j<30;j++){ ctx.fillStyle = 'rgba(255, 255, 255,.3)'; ctx.fillRect(i*20,j*20,19,19); } } // 繪制蛇 for(let i=0;i

      //更新 function update(){ // 建一個(gè)對(duì)象head,這個(gè)為蛇的新頭,通過(guò)繪制新頭,去掉尾部實(shí)現(xiàn)移動(dòng)效果 var head = {}; //判斷蛇頭是否遇到邊界,到邊界則在另一邊重新繪制 x軸 switch (snake[0].x+diretion.x){ case -1: head.x=29;break; case 30: head.x=0;break; // 沒(méi)到邊界則為當(dāng)前位置加方向 default: head.x = snake[0].x+diretion.x; } //判斷蛇頭是否遇到邊界,到邊界則在另一邊重新繪制 y軸 switch (snake[0].y+diretion.y){ case -1: head.y=29;break; case 30: head.y=0;break; // 沒(méi)到邊界則為當(dāng)前位置加方向 default: head.y = snake[0].y+diretion.y; } // 判斷新蛇頭是否與食物重合,就是吃到食物 if(head.x==food.x&&head.y==food.y){ //蛇的顏色為吃到食物的顏色 yanse = food.color; // 重新給食物初始化 food = { x: parseInt(Math.random()*30), y: parseInt(Math.random()*30), color:`rgb(${Math.random()*255},${Math.random()*255},${Math.random()*255})` } //在蛇尾添加一節(jié) let temp = snake[length-1]; snake.push(temp); fraction+=1; // 吃完食物速度加快 if(speed>80){ //定時(shí)器間隔減10 speed = speed-10; // 清除原來(lái)定時(shí)器,重新繪制 clearInterval(time); time = setInterval(function () { kd = 0; ctx.clearRect(0, 0, wide, high); update(); draw(); }, speed); } } //添加新頭 snake.splice(0,0,head); //去掉尾部 snake.pop(); }

      //判斷點(diǎn)擊事件 document.addEventListener('keydown', event=>{ switch (event.keyCode){ // 按了向上鍵 case 38: // 判斷當(dāng)前不是向下移動(dòng)與還沒(méi)按過(guò)鍵,否則蛇會(huì)重疊 if(diretion.y!=1&&kd==0){ // 重新給移動(dòng)方向賦值 diretion.x=0; diretion.y=-1; kd=1; } break; // 下面以此類(lèi)推一樣的原理 case 39: if(diretion.x!=-1&&kd==0){ diretion.x=1; diretion.y=0; kd=1; } break; case 40: if(diretion.y!=-1&&kd==0){ diretion.x=0; diretion.y=1; kd=1; } break; case 37: if(diretion.x!=1&&kd==0){ diretion.x=-1; diretion.y=0; kd=1; } break; } })

      chushi(); var time = setInterval(function(){ kd=0; ctx.clearRect(0,0,wide,high); update(); draw(); },speed);

      三.完整代碼:

      Document

      四.總結(jié):

      最近又在聽(tīng)蕊希電臺(tái)了。干點(diǎn)雞湯~

      Canvas CSS HTML

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶(hù)投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:C Primer Plus 第02章 C語(yǔ)言概述 學(xué)習(xí)筆記及復(fù)習(xí)題、編程題解答
      下一篇:【Unity3D日常開(kāi)發(fā)】(三)實(shí)現(xiàn)角色移動(dòng)行走之跑酷游戲?qū)崿F(xiàn)
      相關(guān)文章
      亚洲成年人免费网站| 亚洲日本精品一区二区| 亚洲六月丁香婷婷综合| 亚洲欧洲一区二区| 亚洲今日精彩视频| 亚洲伦理一区二区| 久久精品夜色国产亚洲av| 国产精品亚洲一区二区三区在线| 亚洲日韩国产一区二区三区| 亚洲性久久久影院| 亚洲无线码在线一区观看| 亚洲精品字幕在线观看| 亚洲精品夜夜夜妓女网| 久久久久亚洲精品影视| 亚洲视频在线播放| 亚洲综合小说久久另类区| 亚洲喷奶水中文字幕电影| 33333在线亚洲| 中文字幕亚洲综合久久综合| 亚洲中文字幕乱码一区| 亚洲国产av玩弄放荡人妇| www亚洲精品久久久乳| 亚洲av无码天堂一区二区三区| 亚洲不卡无码av中文字幕| 中文字幕亚洲激情| 久久亚洲综合色一区二区三区| 亚洲AV无码久久精品色欲| 久久久亚洲欧洲日产国码aⅴ | 亚洲成在人线中文字幕| 亚洲成a人片在线不卡| 亚洲欧美日韩综合俺去了| 韩国亚洲伊人久久综合影院| 亚洲成av人在片观看| 最新亚洲成av人免费看| 亚洲AV无码精品色午夜在线观看| 亚洲欧洲国产日韩精品| 亚洲jizzjizz在线播放久| 久久精品国产亚洲av天美18| 亚洲日本韩国在线| 久久久亚洲精品视频| 亚洲国产午夜电影在线入口|