JavaScript面向对象怎么实现贪吃蛇游戏
JavaScript面向对象怎么实现贪吃蛇游戏
本篇内容介绍了“JavaScript面向对象怎么实现贪吃蛇游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
1 工具对象(Tools.js)
因为要随机生成食物,所以先将生成min-max范围内随机整数的方法提取出来。randomNum属性就是生成的随机数。
functionTools(min,max){min=Math.ceil(min);max=Math.floor(max);this.randomNum=Math.floor(Math.random()*(max-min+1))+min;//含最大值,含最小值}
2 食物对象(Food.js)
//为避免命名冲突,使用自调用函数(function(){varfoodDivs=[];//1定义食物对象functionFood(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();vardiv=document.createElement('div');this.x=newTools(0,map.offsetWidth/this.width-1).randomNum;this.y=newTools(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);}functionremoveFood(){for(vari=foodDivs.length-1;i>=0;i--){foodDivs[i].parentNode.removeChild(foodDivs[i]);//先从页面删除foodDivs.splice(i,1);//删除指定位置元素//再从数组实际删除}}window.Food=Food;//暴露Food,外部才能访问})();
3 蛇对象(Snake.js)
(function(){varsnakeDivs=[];//1蛇构造函数functionSnake(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(vari=0;i<this.body.length;i++){varblock=this.body[i];vardiv=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(vari=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;}//蛇头移动varhead=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){//蛇头与食物重合varlast=this.body[this.body.length-1];this.body.push({x:last.x,y:last.y,bgc:last.bgc});food.render(map);//这里就包括移除前面的食物这一操作}}functionremoveSnake(){for(vari=snakeDivs.length-1;i>=0;i--){snakeDivs[i].parentNode.removeChild(snakeDivs[i]);//先从页面删除snakeDivs.splice(i,1);//删除指定位置元素//再从数组实际删除}}window.Snake=Snake;})();
4 游戏对象(Game.js)
主要是控制游戏的开始,以及按键对应的行为在游戏中的含义,将蛇和食物这两个对象组织在一起。
(function(){varthat;functionGame(){this.food=newFood();this.snake=newSnake();that=this;}Game.prototype.start=function(map){this.snake.render(map);this.food.render(map);varhead=this.snake.body[0];varspan=document.getElementById('tag');vartimerId=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';//提示GameOver}if((head.y>map.offsetHeight/that.snake.height-2)||head.y<=0){clearInterval(timerId);span.style.display='block';//提示GameOver}},150);console.log(map.offsetWidth/this.snake.width-1);bindKey();}functionbindKey(){document.addEventListener('keydown',function(e){switch(e.keyCode){//left37up38right39down40case37:that.snake.direction='left';break;case38:that.snake.direction='up';break;case39:that.snake.direction='right';break;case40:that.snake.direction='down';break;}});}window.Game=Game;})()varGame=newGame();varmap=document.getElementById('map');Game.start(map);
5 index.html
显示的html页面
<!DOCTYPEhtml><html><head><metacharset="utf-8"/><metahttp-equiv="X-UA-Compatible"content="IE=edge"><title>PageTitle</title><metaname="viewport"content="width=device-width,initial-scale=1"><style>#map{background-color:lightgray;width:800px;height:500px;margin:0auto;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><divid='map'><spanid='tag'>GameOver</span></div><scriptsrc="js/Tools.js"></script><scriptsrc="js/Food.js"></script><scriptsrc="js/Snake.js"></script><scriptsrc="js/Game.js"></script></body></html>
6 运行界面
“JavaScript面向对象怎么实现贪吃蛇游戏”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注恰卡编程网网站,小编将为大家输出更多高质量的实用文章!
推荐阅读
-
JavaScript闭包用多会造成内存泄露吗
-
javascript中文乱码如何解决
-
PHP学习第十五天——JavaScript入门DOM对象:二
-
Node.js基本内容和知识点
简单的说node.js就是运行在服务端的JavaScript,起初段定位是后端开发语言,由于技术的不够成熟,一般小型项目...
-
PHP与Node.js:一个史诗般开发者的分享
-
JavaScript 中 find() 和 filter() 方法的区别
JavaScript在ES6上有很多数组方法,每种方法都有独特的用途和好处。在开发应用程序时,大多使用数组方法来获...
-
js怎么跟php结合使用
-
简单说说Node.js和JavaScript
Node.js是一个开源和跨平台的JavaScript运行时环境,在浏览器之外运行V8JavaScript引擎(...
-
前端开发工程师专业技能简历范文
-
JavaScript怎么实现淘宝网图片的局部放大功能