<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了物件導向的貪吃蛇實現程式碼,供大家參考,具體內容如下
1 工具物件(Tools.js)
因為要隨機生成食物,所以先將生成min-max範圍內隨機整數的方法提取出來。randomNum屬性就是生成的亂數。
function Tools(min,max){ min = Math.ceil(min); max = Math.floor(max); this.randomNum=Math.floor(Math.random() * (max - min + 1)) + min; //含最大值,含最小值 }
2 食物物件(Food.js)
//為避免命名衝突,使用自呼叫函數 (function(){ var foodDivs=[]; //1 定義食物物件 function Food(options){ options=options||{};//封裝屬性的物件 this.backgroundColor=options.backgroundColor||'green'; this.width=options.width||20; this.height=options.height||20; this.x=options.x||0; this.y=options.y||0; } //2 渲染到map上 Food.prototype.render=function(map){ removeFood(); var div=document.createElement('div'); this.x=new Tools(0,map.offsetWidth/this.width-1).randomNum; this.y=new Tools(0,map.offsetHeight/this.height-1).randomNum; div.style.width=this.width+'px'; div.style.height=this.height+'px'; div.style.backgroundColor=this.backgroundColor; div.style.left=this.x*this.width+'px'; div.style.top=this.y*this.height+'px'; div.style.position = 'absolute'; map.appendChild(div); foodDivs.push(div); } function removeFood(){ for(var i=foodDivs.length-1;i>=0;i--){ foodDivs[i].parentNode.removeChild(foodDivs[i]);//先從頁面刪除 foodDivs.splice(i,1);//刪除指定位置元素 //再從陣列實際刪除 } } window.Food=Food;//暴露Food,外部才能存取 })();
3 蛇物件(Snake.js)
(function(){ var snakeDivs=[]; //1 蛇建構函式 function Snake(options){ options=options||{}; this.body=[ {x:3,y:2,bgc:'red'}, {x:2,y:2,bgc:'blue'}, {x:1,y:2,bgc:'blue'} ]; this.width=options.width||20; this.height=options.height||20; this.direction=options.direction||'right'; } //2 渲染到map上 Snake.prototype.render=function(map){ removeSnake(); for(var i=0;i<this.body.length;i++){ var block=this.body[i]; var div=document.createElement('div'); div.style.width=this.width+'px'; div.style.height=this.height+'px'; div.style.backgroundColor=block.bgc; div.style.left=block.x*this.width+'px'; div.style.top=block.y*this.height+'px'; div.style.position = 'absolute'; map.appendChild(div); snakeDivs.push(div);//新增蛇divs } } //3 蛇的移動 Snake.prototype.move=function(food,map){ //邏輯上從後往前 先蛇身再蛇頭 //蛇身每一節替換上次的位置 for(var i=this.body.length-1;i>0;i--){ this.body[i].x=this.body[i-1].x; this.body[i].y=this.body[i-1].y; } //蛇頭移動 var head=this.body[0]; switch(this.direction){ case 'left': head.x-=1; break; case 'up': head.y-=1; break; case 'right': head.x+=1; break; case 'down': head.y+=1; break; } if(head.x===food.x&&head.y===food.y){//蛇頭與食物重合 var last=this.body[this.body.length-1]; this.body.push({ x:last.x, y:last.y, bgc:last.bgc }); food.render(map);//這裡就包括移除前面的食物這一操作 } } function removeSnake(){ for(var i=snakeDivs.length-1;i>=0;i--){ snakeDivs[i].parentNode.removeChild(snakeDivs[i]);//先從頁面刪除 snakeDivs.splice(i,1);//刪除指定位置元素 //再從陣列實際刪除 } } window.Snake=Snake; })();
4 遊戲物件(Game.js)
主要是控制遊戲的開始,以及按鍵對應的行為在遊戲中的含義,將蛇和食物這兩個物件組織在一起。
(function(){ var that; function Game(){ this.food=new Food(); this.snake=new Snake(); that=this; } Game.prototype.start=function(map){ this.snake.render(map); this.food.render(map); var head=this.snake.body[0]; var span=document.getElementById('tag'); var timerId=setInterval(function(){ that.snake.move(that.food,map); that.snake.render(map); if((head.x>map.offsetWidth/that.snake.width-2)||head.x<=0){ clearInterval(timerId); span.style.display='block';//提示Game Over } if((head.y>map.offsetHeight/that.snake.height-2)||head.y<=0){ clearInterval(timerId); span.style.display='block';//提示Game Over } },150); console.log(map.offsetWidth/this.snake.width-1); bindKey(); } function bindKey(){ document.addEventListener('keydown',function(e){ switch(e.keyCode){//left 37 up 38 right 39 down 40 case 37: that.snake.direction='left'; break; case 38: that.snake.direction='up'; break; case 39: that.snake.direction='right'; break; case 40: that.snake.direction='down'; break; } }); } window.Game=Game; })() var Game=new Game(); var map=document.getElementById('map'); Game.start(map);
5 index.html
顯示的html頁面
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>Page Title</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <style> #map{ background-color: lightgray; width: 800px; height: 500px; margin: 0 auto; position: relative; } #tag{ width: 200px; height: 100px; background-color: gray; position: absolute; left:300px; top:200px; line-height: 100px; text-align: center; display: none; } </style> </head> <body> <div id='map'> <span id='tag'>Game Over</span> </div> <script src="js/Tools.js"></script> <script src="js/Food.js"></script> <script src="js/Snake.js"></script> <script src="js/Game.js"></script> </body> </html>
6 執行介面
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45