JS原生代码(彩色贪吃蛇)

<!doctype html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style>
		body {
			margin:0;
			padding:0;
		}
		.min {
			width: 800px;
			height: 600px;
			margin:0 auto;
			position:relative;
		}
		#map {
			width: 800px;
			height: 600px;
			background: #ccc;
			position:relative;
		}
	</style>
</head>
<body>
	<div class="min">
		<div id="map">
		</div>
	</div>
	<button id="btn">开始游戏</button>
	<script type="text/javascript">
	//赋予map作为游戏的地图
		var map = document.getElementById("map");
		//创建一个小蛇的函数
		function Snake (){
			this.width=20;
			this.height=20;
			this.dir='right';
			this.body=
			[{x:2,y:0}, //蛇的头部
			 {x:1,y:0},	//蛇的身体
			 {x:0,y:0}];//蛇的第二个身体
			//用来显示出来小蛇的身体和头部
			this.display=function(){
				for(var i=0;i<this.body.length;i++){
					if(this.body[i].x!=null){
						var sBody=document.createElement('div');
						this.body[i].flag=sBody;
						sBody.style.width=this.width+'px';
						sBody.style.height=this.height+'px';
						sBody.style.left=this.body[i].x*this.width+'px';
						sBody.style.top=this.body[i].y*this.height+'px';
						//使小蛇脱标
						sBody.style.position='absolute';
						sBody.style.borderRadius='50%';
						//给小蛇的身体加上随机颜色
						sBody.style.background='rgb('+parseInt(Math.random()*255)+','+parseInt(Math.random()*255)+','+parseInt(Math.random()*255)+')';
						//添加小蛇到地图中
						map.appendChild(sBody);
						
					};
					
				};
			};
			//创建一个小蛇跑起来的函数
			this.run=function (){
				//将小蛇头部和身体的位置调换
				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;
				};	
				//判断小蛇的方向
				switch(this.dir){
					case 'right': 
					this.body[0].x+=1;
					break;
					case 'left':
					this.body[0].x-=1;
					break;
					case 'up':
					this.body[0].y-=1;
					break;
					case 'down':
					this.body[0].y+=1;
					break;
				};
				if(this.body[0].x>39 || this.body[0].x<0 || this.body[0].y<0 ||this.body[0].y>29){
					//alert('sbbbbbbb');
					
					alert('Game Over、你个蠢货居然撞死了!!!');
					alert('总计得分:'+(this.body.length-3));
					clearInterval(timeId);
					//游戏结束重置场地
					for(var i=0;i<this.body.length;i++){
						if(this.body[i].flag!=null){
							map.removeChild(this.body[i].flag);
						}
					};
					this.body=
						[{x:2,y:0}, 
						{x:1,y:0},	
						{x:0,y:0}];
					this.display();
					this.dir='right';
					return false;
				};
				/*
				for(var i=0;i<this.body.length;i++){
					if(this.body[i].flag!=null){
					map.removeChild(this.body[i].flag);
					}
				};
				*/
				//吃到食物,移除食物,并刷新食物
				if(this.body[0].x==ff.x&&this.body[0].y==ff.y){
					map.removeChild(ff.food);
					//给小蛇添加一个新的身体
					this.body.push({x:null,y:null,flag:null});
					//重新刷新食物的坐标
					ff.x=parseInt(Math.random()*39);
					ff.y=parseInt(Math.random()*19);
					//显示食物的位置
					ff.display();
					//判断食物的坐标不能够与蛇的头和身体重叠
					for(var i=0;i<this.body.length-1;i++){
						//如果重叠了 重新显示食物刷新坐标
						if(ff.x==this.body[i].x&&ff.y==this.body[i].y){
							//重新显示出食物
							map.removeChild(ff.food);
							ff.display();
						}else{
							map.removeChild(ff.food);
							ff.display();
						};
					};
					
					
				};
				//ff.display();
				//判断小蛇不能撞自己不然游戏结束
				if(this.body.length>=4){
					for(var i=this.body.length-1;i>0;i--){
						if(this.body[0].x==this.body[i].x&&this.body[0].y==this.body[i].y){
							alert('Game Over、你个傻蛋居然吃自己!!!');
							alert('总计得分:'+(this.body.length-3));
							clearInterval(timeId);
							//游戏结束重置场地
							for(var i=0;i<this.body.length;i++){
								if(this.body[i].flag!=null){
								map.removeChild(this.body[i].flag);
								}
							};
							this.body=
							[{x:2,y:0}, 
							{x:1,y:0},	
							{x:0,y:0}];
							this.display();
							this.dir='right';
							return false;
						};
					};
				};
				
				//删除旧的小蛇
				for(var i=0;i<this.body.length;i++){
						if(this.body[i].flag!=null){
							map.removeChild(this.body[i].flag);
						}
					};
					//重新显示小蛇
					this.display();
			};

		};
		function Food(){
			this.width=20;
			this.height=20;
			//设置小蛇在地图上的随机坐标
			this.x=parseInt(Math.random()*39);
			this.y=parseInt(Math.random()*19);
			//显示出来小蛇要吃的食物
			this.display=function(){
				//创建食物这个元素
				var food = document.createElement('div');
				this.food=food;
				food.style.width=this.width+'px';
				food.style.height=this.height+'px';
				food.style.top=this.y*this.width+'px';
				food.style.left=this.x*this.height+'px';
				food.style.position='absolute';
				food.style.borderRadius='50%';
				food.style.background='green';
				//将食物添加到地图中
				map.appendChild(food);
			};
			
			//this.display();
		};
		//创建小蛇和食物的对象
		var ff=new Food();
		var ss= new Snake();
		//调用食物显示在地图的函数
			ff.display();
			ss.display();
			//获取方向键的键码
		document.body.function (e){
			var ev = e || window.event;
			//console.log(ev.keyCode);
			switch(ev.keyCode){
				case 37:
				if(ss.dir!='right'){
					ss.dir='left';
					//console.log(ev.keyCode);
				};
				break;
				case 38:
				if(ss.dir!='down'){
					ss.dir='up';
				};
				//this.dir='up';
				break;
				case 39:
				if(ss.dir!='left'){
					ss.dir='right';
				};
				break;
				case 40:
				if(ss.dir!='up'){
					ss.dir='down';
				};
				//console.log(this.dir);
				break;
			};
			
		};
		//获取按钮点击开始游戏
		var timeId=null;
		document.getElementById("btn").function(){
			//开始之前先清除下定时器
			clearInterval(timeId);
			//启动小蛇跑起来的定时器
			 timeId=setInterval(function(){
				//调用小蛇跑起来的函数
				ss.run();
			},150);
		};
		
		
	</script>
</body>
</html>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值