日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

原生js+canvas實現貪吃蛇效果

瀏覽:177日期:2024-04-26 15:18:48

本文實例為大家分享了canvas實現貪吃蛇效果的具體代碼,供大家參考,具體內容如下

效果展示:

原生js+canvas實現貪吃蛇效果

源碼展示:

頁面布局展示:worm.html

<!DOCTYPE html><html> <head> <meta charset='utf-8'> <title>貪吃蛇</title> <style type='text/css'> canvas{ border: 1px solid black; } div{ width: 50px; height: 50px; border: 1px solid black; cursor: pointer; text-align: center; line-height: 50px; } </style> <script type='text/javascript' src='http://m.b3g6.com/bcjs/Node.js' ></script> <script type='text/javascript' src='http://m.b3g6.com/bcjs/Worm.js' ></script> <script src='http://m.b3g6.com/bcjs/Stage.js' type='text/javascript' charset='utf-8'></script> <script type='text/javascript'> function load () { //創建一個舞臺 調用print方法打印 stage=new Stage(); //獲取ctx var mCanvas=document.getElementById('mCanvas'); ctx=mCanvas.getContext(’2d’); stage.print(ctx); startPrint(); } function changeDir(dir){ DIR=dir; } var task; var stage; var ctx; function startPrint () { task=window.setInterval(function () { stage.worm.step(); stage.print(ctx); }, SPEED); } function endPrint () { window.clearInterval(task); } </script> </head> <body onload='load()'> <canvas height='500'> </canvas> <table> <tr> <td></td> <td> <div onclick='changeDir(UP)'>UP</div> </td> <td></td> </tr> <tr> <td> <div onclick='changeDir(LEFT)'>LEFT</div> </td> <td></td> <td> <div onclick='changeDir(RIGHT)'>RIGHT</div> </td> </tr> <tr> <td></td> <td> <div onclick='changeDir(DOWN)'>DOWN</div> </td> <td></td> </tr> </table> </body></html>

節點類的js :Node.js

/* 節點類 */function Node (x, y) { this.x=x; this.y=y; this.equals=function (i, j) { return this.x==i && this.y==j; }; }

舞臺類js:Stage.js

/** 舞臺類 */function Stage () { this.width=50; this.height=50; this.worm=new Worm(); /* 在canvas中繪制舞臺的內容 */ this.print=function (ctx) { for(i=0; i<this.width; i++){ for(j=0; j<this.height; j++){ //如果當前節點是蛇身子的一部分 //那么換一種顏色繪制 if(this.worm.contains(i,j)){ ctx.fillStyle='#ab55ff'; ctx.fillRect(i*10, j*10, 10, 10); }else if(this.worm.food.equals(i, j)){ ctx.fillStyle='#000000'; ctx.fillRect(i*10, j*10, 10, 10); }else{ ctx.fillStyle='#dddddd'; ctx.fillRect(i*10, j*10, 10, 10); } } } //在舞臺的左上角繪制分數 ctx.font='30px Arial'; ctx.fillStyle='#880000'; ctx.fillText('score:'+SCORE, 10,40); };}

蛇類js:Worm.js

/** 蛇類 */var UP=0;var DOWN=1;var LEFT=2;var RIGHT=3; var DIR=UP; var SCORE=0;var SPEED=300;//蛇類初始化的形狀function Worm () { this.nodes=[]; this.nodes[this.nodes.length]=new Node(20,10); this.nodes[this.nodes.length]=new Node(20,11); this.nodes[this.nodes.length]=new Node(20,12); this.nodes[this.nodes.length]=new Node(20,13); this.nodes[this.nodes.length]=new Node(20,14); this.nodes[this.nodes.length]=new Node(20,15); this.nodes[this.nodes.length]=new Node(21,15); this.nodes[this.nodes.length]=new Node(22,15); this.nodes[this.nodes.length]=new Node(23,15); this.nodes[this.nodes.length]=new Node(24,15); this.nodes[this.nodes.length]=new Node(24,16); this.nodes[this.nodes.length]=new Node(24,17); this.nodes[this.nodes.length]=new Node(24,18); this.nodes[this.nodes.length]=new Node(24,19); /* 蛇會走一步 */ this.step=function () { //計算出頭結點 把頭節點添加到nodes數組中 var oldHead=this.nodes[0]; var newHead; switch (DIR){ case UP: if(oldHead.y-1<0){ newHead=new Node(oldHead.x, 49); }else{ newHead=new Node(oldHead.x, oldHead.y-1); } break; case DOWN: if(oldHead.y+1>49){ newHead=new Node(oldHead.x, 0); }else{ newHead=new Node(oldHead.x, oldHead.y+1); } break; case LEFT: if(oldHead.x-1<0){ newHead=new Node(49, oldHead.y); }else{ newHead=new Node(oldHead.x-1, oldHead.y); } break; case RIGHT: if(oldHead.x+1>49){ newHead=new Node(0, oldHead.y); }else{ newHead=new Node(oldHead.x+1, oldHead.y); } break; } this.nodes.unshift(newHead); if(!this.food.equals(newHead.x, newHead.y)){ //把尾節點刪掉 (在沒有吃到食物的時候) this.nodes.pop(); }else{ //吃到了食物 重新生成食物 this.food=this.randomFood(); SCORE+=10; SPEED-=50; endPrint(); startPrint(); } }; /* 判斷i,j節點是否是當前蛇身子的一部分 */ this.contains=function (i, j) { for(k=0; k<this.nodes.length; k++){ var node=this.nodes[k]; if(node.x==i && node.y==j){ return true; } } return false; }; //聲明生成食物的方法 this.randomFood=function () { var x; var y; do{ x=Math.floor(Math.random()*50); y=Math.floor(Math.random()*50); }while(this.contains(x, y)); return new Node(x, y); }; //聲明食物 this.food=this.randomFood(); }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
好看的av在线不卡观看| 另类亚洲自拍| 精品三级av在线导航| 国产精品亚洲综合在线观看| 国产调教一区二区三区| 国产专区精品| 亚洲午夜精品久久久久久app| 人人精品亚洲| 欧美一级专区| 国产精品天堂蜜av在线播放| 日韩1区2区| 91九色精品| 亚洲中午字幕| 久久国产三级| 亚洲h色精品| 免费高清在线一区| 国产精品99久久免费观看| 最近高清中文在线字幕在线观看1| 日韩欧美一区二区三区在线观看| 国产亚洲精品久久久久婷婷瑜伽| 日本中文字幕视频一区| 精品五月天堂| 欧美日韩国产探花| 国产精品一区二区免费福利视频| 色网在线免费观看| 三级在线观看一区二区 | 欧美日韩va| 91青青国产在线观看精品| 日韩一级网站| 久久精品国产亚洲一区二区三区| 国产高清一区| 美女在线视频一区| 日韩午夜在线| 欧美黄页在线免费观看| 伊人久久亚洲美女图片| 国产精品视频一区视频二区| 亚洲经典在线| 国产中文欧美日韩在线| 中文一区一区三区免费在线观| 久久伊人国产| 六月婷婷一区| 国产精品99一区二区三| 蜜桃视频在线观看一区| 午夜欧美巨大性欧美巨大| 日欧美一区二区| 精品成人免费一区二区在线播放| 深夜福利亚洲| 久久中文字幕二区| 国产精品115| 一区二区精彩视频| 久久国产影院| 国产在线一区不卡| 亚洲九九精品| 激情五月色综合国产精品| 国产精品1区| 日韩精品视频一区二区三区| 日韩久久精品| 国产精品大片| 综合视频一区| 婷婷综合五月| 日韩高清欧美| 麻豆精品蜜桃视频网站| 日韩一区二区三免费高清在线观看| 亚洲精品一区三区三区在线观看| 日韩国产精品久久久| 视频一区视频二区中文字幕| 蜜臀久久99精品久久久久宅男 | 成人午夜国产| 欧美黄色一区二区| 日韩激情中文字幕| 日韩在线成人| 一区在线观看| 99热精品久久| 中文字幕在线视频久| 麻豆一区二区在线| 国产情侣一区在线| 天堂va欧美ⅴa亚洲va一国产| 欧美日韩视频| 欧美一区二区性| 日本综合字幕| 国产一区二区三区91| 国产精品对白| 国产精品激情| 欧美日韩一区二区三区四区在线观看 | 日韩精品dvd| 久久青青视频| 中文在线中文资源| 国产精品蜜芽在线观看| 国产激情一区| 你懂的网址国产 欧美| 久久精品xxxxx| 国产伦理久久久久久妇女| 青青国产精品| 国产精品尤物| 国产精品xxx| 国产激情久久| 高清久久精品| av亚洲一区二区三区| 91精品国产乱码久久久久久久 | 91亚洲国产成人久久精品| 麻豆国产欧美日韩综合精品二区| 国产精品三p一区二区| 日韩高清一区| 日韩av黄色在线| 青青草国产精品亚洲专区无| 国产视频一区二| 久久精品国内一区二区三区| 精品国产99| 精品捆绑调教一区二区三区| 久久久精品午夜少妇| 91久久久精品国产| 激情综合自拍| 中文字幕一区二区精品区| 日韩超碰人人爽人人做人人添| 欧美日韩中出| 日本一二区不卡| 激情婷婷亚洲| 亚洲久久一区| 91av一区| 国产91在线播放精品| 极品日韩av| 亚洲欧美在线专区| 欧美激情视频一区二区三区在线播放| 成人影视亚洲图片在线| 久久亚洲专区| 日韩区欧美区| 国产精品一区二区三区www| 粉嫩av一区二区三区四区五区 | 亚洲伊人精品酒店| 日本v片在线高清不卡在线观看| 亚洲+小说+欧美+激情+另类| 日本午夜精品一区二区三区电影 | 亚洲成av在线| 日韩中文字幕一区二区三区| 四虎国产精品免费久久| 久久99精品久久久久久园产越南 | 岛国av免费在线观看| 在线成人直播| 日韩二区三区四区| 特黄毛片在线观看| 亚洲欧美视频| 国产精品jk白丝蜜臀av小说| 精品亚洲美女网站| 日韩精彩视频在线观看| 老司机免费视频一区二区| 亚洲a在线视频| 日本亚洲不卡| 91麻豆国产自产在线观看亚洲| 亚洲高清影视| 国产图片一区| 韩日一区二区三区| 麻豆精品新av中文字幕| 蜜乳av另类精品一区二区| 国产精品17p| 免费精品视频| 精品国产第一福利网站| 免费在线观看日韩欧美| 国产精品99视频| 日产欧产美韩系列久久99| 成人羞羞在线观看网站| 日韩二区三区四区| 九九综合在线| 久久久久久久欧美精品| 日韩不卡在线| 国产精品久久久免费| 日韩精品网站| 国产剧情一区二区在线观看| 日韩午夜av| 国产一区二区精品久| 亚洲精品影院在线观看| 亚洲www啪成人一区二区| 国产欧美成人| 久久午夜精品一区二区| 涩涩av在线| 国产精品欧美三级在线观看| 欧美特黄视频| 国产拍在线视频| 91成人精品观看| 蜜桃免费网站一区二区三区| 久久精品123| 久久不见久久见中文字幕免费| 国产女优一区| 久久中文字幕二区| 欧美日韩国产观看视频| 国产精品久久久久av蜜臀| 日韩中文欧美在线| 99精品电影| 91亚洲国产| 免费在线欧美黄色| 视频国产精品| 亚洲神马久久| 91精品国产福利在线观看麻豆| 国产精品成人国产| 97精品国产99久久久久久免费| 国产亚洲毛片| 久久国产直播| 日韩影院二区| 高潮一区二区| 国产网站在线| 国内揄拍国内精品久久|