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>