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

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

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

瀏覽:176日期: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://www.b3g6.com/bcjs/Node.js' ></script> <script type='text/javascript' src='http://www.b3g6.com/bcjs/Worm.js' ></script> <script src='http://www.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| 婷婷综合社区| 久热re这里精品视频在线6| 久久亚洲欧美| 亚洲一区久久| 日韩和欧美一区二区三区| 久久精品99国产精品日本| 麻豆久久久久久| 亚洲成人不卡| 日韩精品一二三四| 欧美久久精品| 色欧美自拍视频| 久久国产电影| 日韩中文字幕麻豆| 国产精品一区二区精品视频观看 | 精品久久久中文字幕| 日韩在线综合| 久久福利毛片| 国产精品www.| 99久久久久久中文字幕一区| 蜜臀av一区二区三区| 久久99精品久久久久久园产越南| 日韩av福利| 中文字幕日韩欧美精品高清在线| 国产一卡不卡| 日韩免费久久| 日韩在线麻豆| 精品美女在线视频| 久久蜜桃av| 欧美天堂在线| 国产在线欧美| 国产精品天堂蜜av在线播放| 999国产精品999久久久久久| 日韩av在线免费观看不卡| 中文字幕在线免费观看视频| 国产模特精品视频久久久久| 国产精品亚洲片在线播放| 91精品推荐| 国产精品第一国产精品| 日韩网站在线| 国产成人精选| 亚洲欧洲日韩精品在线| 亚洲黄色中文字幕| 久久高清免费观看| 97精品一区| 婷婷视频一区二区三区| 日韩国产欧美| 91大神在线观看线路一区| 欧美日韩一二三四| 国产精品任我爽爆在线播放| 免费观看久久久4p| 日韩中文在线电影| 国产精品巨作av| 美女被久久久| 日本综合字幕| 美女视频网站久久| 欧美一区二区三区久久精品| 日韩午夜黄色| 国产v日韩v欧美v| 日本va欧美va精品发布| 黄色成人精品网站| 国产在线视频欧美一区| 欧美日韩调教| 五月国产精品| 美日韩精品视频| 日韩在线短视频| 精品中文在线| 国产精品传媒麻豆hd| 亚洲毛片一区| 亚洲欧美日韩一区在线观看| 日韩一区二区三区免费| 美女视频黄 久久| 欧美影院视频| 日韩欧美久久| 亚洲人成亚洲精品| 天堂网在线观看国产精品| 97精品国产福利一区二区三区| 欧美日韩精品一区二区三区视频| 影音先锋久久精品| 日韩精品一级二级| 亚洲在线网站| 亚洲激情中文在线| 人人精品亚洲| 日韩国产一区二区| 涩涩av在线| 日韩av免费| 麻豆视频在线看| 久久毛片亚洲| 国产成人调教视频在线观看| 国产成人精选| 韩国精品主播一区二区在线观看 | 岛国精品一区| 丰满少妇一区| 亚洲成人不卡| 激情偷拍久久| 日韩成人高清| 2023国产精品久久久精品双| 亚洲午夜在线| 在线一区视频| 亚洲三级网站| 欧美一级全黄| 国产精品网址| 久久精品毛片| 成人片免费看| 激情久久中文字幕| 香蕉视频成人在线观看| 中文字幕免费一区二区| 青青草国产精品亚洲专区无| 国产精品一区亚洲| 国产精品久久久久久久久久10秀 | 成人在线网站| 米奇777超碰欧美日韩亚洲| 裤袜国产欧美精品一区| 秋霞影视一区二区三区| 国产亚洲欧洲| 日本少妇精品亚洲第一区| 国产精品一区二区av交换 | 欧美日韩网址| 日韩综合在线| 亚洲精华国产欧美| 欧美一区二区三区久久| 国产成人精品一区二区三区视频| 亚洲天堂一区二区| 久久亚洲电影| 国产精品亚洲二区| 韩国精品主播一区二区在线观看| 亚洲一级在线| 久久一区欧美| 欧美 日韩 国产精品免费观看| 蜜芽一区二区三区| 麻豆视频一区二区| 激情欧美一区二区三区| 亚洲1区在线观看| 欧美精品影院| 久久九九精品| 日韩精品亚洲一区二区三区免费| 精品国产美女a久久9999| 亚洲国产一区二区在线观看 | 91久久午夜| 国产精品麻豆成人av电影艾秋 | 国产一区二区三区黄网站| 亚洲精品1区| 国产精品极品在线观看| 日韩视频一区| 丝袜亚洲精品中文字幕一区| 久久av一区二区三区| 欧美69视频| 亚洲成人精品| 国产日产精品一区二区三区四区的观看方式| 国产亚洲精品v| 在线午夜精品| 亚洲欧美日韩国产| 美女国产精品| 999精品一区| av不卡在线| 日本国产精品| 日韩在线麻豆| 亚洲激精日韩激精欧美精品| 欧美日韩激情| 91精品韩国| 亚洲深深色噜噜狠狠爱网站 | 91tv亚洲精品香蕉国产一区| av中文字幕在线观看第一页| 国产精品精品| 亚洲伦乱视频| 国产99亚洲| 群体交乱之放荡娇妻一区二区| 日韩免费高清| 国产精品日韩精品在线播放| 特黄特色欧美大片| 日本不卡一二三区黄网| 国产精品人人爽人人做我的可爱| 日韩高清欧美| 午夜一区在线| 夜夜精品视频| 国产欧美综合一区二区三区| 欧美+日本+国产+在线a∨观看| 国产一区二区三区天码| 日本a口亚洲| 免费成人性网站| 亚洲午夜91| 欧美a一区二区| 久久亚洲国产| 国产韩日影视精品| 五月精品视频| 国产精品久久久久蜜臀| 国产黄色精品| 久久精品国产久精国产| 欧美在线亚洲综合一区| 欧美在线精品一区| 美女亚洲一区| 欧洲激情综合| 欧美xxxx性| 国产精品99一区二区三区| 欧美久久香蕉| 国产亚洲一区| 福利一区和二区|