贪吃蛇 js

js 贪吃蛇案列

实现代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>贪吃蛇</title>
		<style>
			*{
				margin: 0px;
				padding: 0px;
			}
			#map {
				width: 500px;
				height: 500px;
				background-color: pink;
				position: relative;
			}
			table{
				position: absolute;
				left: 0px;
				top: 102px;
			}
			td{
				width: 48px;
				height: 48px;
			}
			#fast,#middle,#slow{
				width: 40px;
				height: 40px;
			}
		</style>
	</head>
	<body>
		<h1>Score : 0</h1>
		<br />
		<button id="fast"></button>
		<button id="middle"></button>
		<button id="slow"></button>
		<div id="map">
			
		</div>
		<script>
			document.write("<table  border='1' cellspacing='0'>")
				for(var i=0;i<10;i++)
				{
					document.write("<tr>")
					for(var j=0;j<10;j++){
						document.write("<td></td>")
					}
					document.write("</tr>")
				}
			document.write("</table>")
			//2. 产生蛇头和食物 ,蛇头是红色
//			var headNode=document.createElement("div")
//			headNode.style.width="50px";
//			headNode.style.height="50px";
//			//background-color 在js'里用驼峰命名写backgroundColor
//			headNode.style.backgroundColor="red"
//			//随机位置
//			headNode.style.position="absolute"
//			headNode.style.left=parseInt(Math.random()*10)*50+"px"
//			headNode.style.top=parseInt(Math.random()*10)*50+"px"
//			var map=document.getElementById("map");
//			map.appendChild(headNode);
			
			function createDiv(color){
				var div=document.createElement("div")
				div.style.width="50px";
				div.style.height="50px";
				div.style.backgroundColor=color
				div.style.position="absolute"
				div.style.left=parseInt(Math.random()*10)*50+"px"
				div.style.top=parseInt(Math.random()*10)*50+"px"
				map.appendChild(div)
				return div;
			}
			var footNode=createDiv("blue")
			var headNode=createDiv("red")
			var bodyNodes=[]
			headNode.dirtion='右'
			//点击快 实现快速移动
			var fast=document.getElementById("fast")
			var x=0;
			fast.onclick=function(){
				window.t=setInterval(function(){
					//身体移动
					if(bodyNodes.length>0){
						for (var n=bodyNodes.length-1;n>=0;n--){
							switch(bodyNodes[n].dirtion){
								case "左": 
								var l=parseInt(bodyNodes[n].style.left)
									bodyNodes[n].style.left=l-50+'px'
								break
								case "右": 
								var l=parseInt(bodyNodes[n].style.left)
									bodyNodes[n].style.left=l+50+'px'
								break
								case "上": 
								var t=parseInt(bodyNodes[n].style.top)
									bodyNodes[n].style.top=t-50+'px'
								
								break
								case "下": 
								var t=parseInt(bodyNodes[n].style.top)
									bodyNodes[n].style.top=t+50+'px'
								break
							}
							if(n==0){
								bodyNodes[n].dirtion=headNode.dirtion
							}
							else{
								bodyNodes[n].dirtion=bodyNodes[n-1].dirtion
							}
						}
					}
					//头部移动
					switch(headNode.dirtion){
					case "左": 
					var l=parseInt(headNode.style.left)
						headNode.style.left=l-50+'px'
					break
					case "右": 
					var l=parseInt(headNode.style.left)
						headNode.style.left=l+50+'px'
					break
					case "上": 
					var t=parseInt(headNode.style.top)
						headNode.style.top=t-50+'px'
					
					break
					case "下": 
					var t=parseInt(headNode.style.top)
						headNode.style.top=t+50+'px'
					break
				}   
					//判断蛇头是否出界
					var t=parseInt(headNode.style.top)
					var l=parseInt(headNode.style.left)
					if(l<0||t<0||l>450||t>450)
					{
						clearInterval(window.t)
						alert('GAVM OVER!')
						
					}
					//当蛇头移动后,判断是否碰到了自己的身体
					for(var n=0;n<bodyNodes.length;n++){
						if(headNode.style.left==bodyNodes[n].style.left&&headNode.style.top==bodyNodes[n].style.top)
						{
							clearInterval(window.t)
							alert('GAME OVER!')
							
						}
					}
					//进行碰撞检测 蛇和头部 重合在一起  食物位置刷新
					if(headNode.style.left==footNode.style.left&&headNode.style.top==footNode.style.top)
					{
						
						//先产生对应的身体
						var newNode=createDiv("yellow")
						var lastNode
						if(bodyNodes.length==0){
							lastNode=headNode
						}else{
							lastNode=bodyNodes[bodyNodes.length-1]
						}
						switch(lastNode.dirtion){
							case "上":
							newNode.style.left=lastNode.style.left
							var t=parseInt(lastNode.style.top)
							newNode.style.top=t+50+'px'
							break
							case "下":
							newNode.style.left=lastNode.style.left
							var t=parseInt(lastNode.style.top)
							newNode.style.top=t-50+'px'
							break
							case "左":
							newNode.style.top=lastNode.style.top
							var l=parseInt(lastNode.style.left)
							newNode.style.left=l+50+'px'
							break
							case "右":
							newNode.style.top=lastNode.style.top
							var l=parseInt(lastNode.style.left)
							newNode.style.left=l-50+'px'
							break
						}
						//新产生身体移动 的方向
						newNode.dirtion=lastNode.dirtion
						//新产生的身体放入数组中
						bodyNodes.push(newNode)
						
						//随机数的校验
						var px=parseInt(Math.random()*10)*50+"px"
						var py=parseInt(Math.random()*10)*50+"px"
						//无限循环
						while(true){
							for(var n=0;n<bodyNodes.length;n++){
								if(bodyNodes[n].style.left==px&&bodyNodes[n].style.top==py){
									px=parseInt(Math.random()*10)*50+"px"
									py=parseInt(Math.random()*10)*50+"px"
									break
								}
							}if(n==bodyNodes.length){
								break
							}
						}
						footNode.style.left=px
						footNode.style.top=py
						//加分
						var h1=document.getElementsByTagName("h1")
						x=x+10
						h1[0].innerHTML='Score:'+x
					}
				},250)
				
			}
			//点击中 实现中速移动
			var middle=document.getElementById("middle")
			var x=0;
			middle.onclick=function(){
				window.t=setInterval(function(){
					//身体移动
					if(bodyNodes.length>0){
						for (var n=bodyNodes.length-1;n>=0;n--){
							switch(bodyNodes[n].dirtion){
								case "左": 
								var l=parseInt(bodyNodes[n].style.left)
									bodyNodes[n].style.left=l-50+'px'
								break
								case "右": 
								var l=parseInt(bodyNodes[n].style.left)
									bodyNodes[n].style.left=l+50+'px'
								break
								case "上": 
								var t=parseInt(bodyNodes[n].style.top)
									bodyNodes[n].style.top=t-50+'px'
								
								break
								case "下": 
								var t=parseInt(bodyNodes[n].style.top)
									bodyNodes[n].style.top=t+50+'px'
								break
							}
							if(n==0){
								bodyNodes[n].dirtion=headNode.dirtion
							}
							else{
								bodyNodes[n].dirtion=bodyNodes[n-1].dirtion
							}
						}
					}
					//头部移动
					switch(headNode.dirtion){
					case "左": 
					var l=parseInt(headNode.style.left)
						headNode.style.left=l-50+'px'
					break
					case "右": 
					var l=parseInt(headNode.style.left)
						headNode.style.left=l+50+'px'
					break
					case "上": 
					var t=parseInt(headNode.style.top)
						headNode.style.top=t-50+'px'
					
					break
					case "下": 
					var t=parseInt(headNode.style.top)
						headNode.style.top=t+50+'px'
					break
				}   
					//判断蛇头是否出界
					var t=parseInt(headNode.style.top)
					var l=parseInt(headNode.style.left)
					if(l<0||t<0||l>450||t>450)
					{
						clearInterval(window.t)
						alert('GAVM OVER!')
						
					}
					//当蛇头移动后,判断是否碰到了自己的身体
					for(var n=0;n<bodyNodes.length;n++){
						if(headNode.style.left==bodyNodes[n].style.left&&headNode.style.top==bodyNodes[n].style.top)
						{
							clearInterval(window.t)
							alert('GAME OVER!')
							
						}
					}
					//进行碰撞检测 蛇和头部 重合在一起  食物位置刷新
					if(headNode.style.left==footNode.style.left&&headNode.style.top==footNode.style.top)
					{
						
						//先产生对应的身体
						var newNode=createDiv("yellow")
						var lastNode
						if(bodyNodes.length==0){
							lastNode=headNode
						}else{
							lastNode=bodyNodes[bodyNodes.length-1]
						}
						switch(lastNode.dirtion){
							case "上":
							newNode.style.left=lastNode.style.left
							var t=parseInt(lastNode.style.top)
							newNode.style.top=t+50+'px'
							break
							case "下":
							newNode.style.left=lastNode.style.left
							var t=parseInt(lastNode.style.top)
							newNode.style.top=t-50+'px'
							break
							case "左":
							newNode.style.top=lastNode.style.top
							var l=parseInt(lastNode.style.left)
							newNode.style.left=l+50+'px'
							break
							case "右":
							newNode.style.top=lastNode.style.top
							var l=parseInt(lastNode.style.left)
							newNode.style.left=l-50+'px'
							break
						}
						//新产生身体移动 的方向
						newNode.dirtion=lastNode.dirtion
						//新产生的身体放入数组中
						bodyNodes.push(newNode)
						
						//随机数的校验
						var px=parseInt(Math.random()*10)*50+"px"
						var py=parseInt(Math.random()*10)*50+"px"
						//无限循环
						while(true){
							for(var n=0;n<bodyNodes.length;n++){
								if(bodyNodes[n].style.left==px&&bodyNodes[n].style.top==py){
									px=parseInt(Math.random()*10)*50+"px"
									py=parseInt(Math.random()*10)*50+"px"
									break
								}
							}if(n==bodyNodes.length){
								break
							}
						}
						footNode.style.left=px
						footNode.style.top=py
						//加分
						var h1=document.getElementsByTagName("h1")
						x=x+10
						h1[0].innerHTML='Score:'+x
					}
				},500)
				
			}
//			点击实现慢速移动
			var slow=document.getElementById("slow")
			var x=0;
			slow.onclick=function(){
				window.t=setInterval(function(){
					//身体移动
					if(bodyNodes.length>0){
						for (var n=bodyNodes.length-1;n>=0;n--){
							switch(bodyNodes[n].dirtion){
								case "左": 
								var l=parseInt(bodyNodes[n].style.left)
									bodyNodes[n].style.left=l-50+'px'
								break
								case "右": 
								var l=parseInt(bodyNodes[n].style.left)
									bodyNodes[n].style.left=l+50+'px'
								break
								case "上": 
								var t=parseInt(bodyNodes[n].style.top)
									bodyNodes[n].style.top=t-50+'px'
								
								break
								case "下": 
								var t=parseInt(bodyNodes[n].style.top)
									bodyNodes[n].style.top=t+50+'px'
								break
							}
							if(n==0){
								bodyNodes[n].dirtion=headNode.dirtion
							}
							else{
								bodyNodes[n].dirtion=bodyNodes[n-1].dirtion
							}
						}
					}
					//头部移动
					switch(headNode.dirtion){
					case "左": 
					var l=parseInt(headNode.style.left)
						headNode.style.left=l-50+'px'
					break
					case "右": 
					var l=parseInt(headNode.style.left)
						headNode.style.left=l+50+'px'
					break
					case "上": 
					var t=parseInt(headNode.style.top)
						headNode.style.top=t-50+'px'
					
					break
					case "下": 
					var t=parseInt(headNode.style.top)
						headNode.style.top=t+50+'px'
					break
				}   
					//判断蛇头是否出界
					var t=parseInt(headNode.style.top)
					var l=parseInt(headNode.style.left)
					if(l<0||t<0||l>450||t>450)
					{
						clearInterval(window.t)
						alert('GAVM OVER!')
						
					}
					//当蛇头移动后,判断是否碰到了自己的身体
					for(var n=0;n<bodyNodes.length;n++){
						if(headNode.style.left==bodyNodes[n].style.left&&headNode.style.top==bodyNodes[n].style.top)
						{
							clearInterval(window.t)
							alert('GAME OVER!')
							
						}
					}
					//进行碰撞检测 蛇和头部 重合在一起  食物位置刷新
					if(headNode.style.left==footNode.style.left&&headNode.style.top==footNode.style.top)
					{
						
						//先产生对应的身体
						var newNode=createDiv("yellow")
						var lastNode
						if(bodyNodes.length==0){
							lastNode=headNode
						}else{
							lastNode=bodyNodes[bodyNodes.length-1]
						}
						switch(lastNode.dirtion){
							case "上":
							newNode.style.left=lastNode.style.left
							var t=parseInt(lastNode.style.top)
							newNode.style.top=t+50+'px'
							break
							case "下":
							newNode.style.left=lastNode.style.left
							var t=parseInt(lastNode.style.top)
							newNode.style.top=t-50+'px'
							break
							case "左":
							newNode.style.top=lastNode.style.top
							var l=parseInt(lastNode.style.left)
							newNode.style.left=l+50+'px'
							break
							case "右":
							newNode.style.top=lastNode.style.top
							var l=parseInt(lastNode.style.left)
							newNode.style.left=l-50+'px'
							break
						}
						//新产生身体移动 的方向
						newNode.dirtion=lastNode.dirtion
						//新产生的身体放入数组中
						bodyNodes.push(newNode)
						
						//随机数的校验
						var px=parseInt(Math.random()*10)*50+"px"
						var py=parseInt(Math.random()*10)*50+"px"
						//无限循环
						while(true){
							for(var n=0;n<bodyNodes.length;n++){
								if(bodyNodes[n].style.left==px&&bodyNodes[n].style.top==py){
									px=parseInt(Math.random()*10)*50+"px"
									py=parseInt(Math.random()*10)*50+"px"
									break
								}
							}if(n==bodyNodes.length){
								break
							}
						}
						footNode.style.left=px
						footNode.style.top=py
						//加分
						var h1=document.getElementsByTagName("h1")
						x=x+10
						h1[0].innerHTML='Score:'+x
					}
				},1000)
				
			}
			document.onkeydown=function(event){
//				console.log(event.keyCode)
				switch(event.keyCode){
					case 38:
					if(!(headNode.dirtion=='下'&&bodyNodes.length>0))
					{headNode.dirtion="上"}
					break
					case 40:
					if(!(headNode.dirtion=='上'&&bodyNodes.length>0)){
						headNode.dirtion="下"
					}
					break
					case 37:
					if(!(headNode.dirtion=='右'&&bodyNodes.length>0)){
						headNode.dirtion="左"
					}
					break
					case 39:
					if(!(headNode.dirtion=='左'&&bodyNodes.length>0)){
						headNode.dirtion="右"
					}
					
					break
				}
			}
		</script>
	</body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-花小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值