分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

接触js一周时随手写的贪吃蛇,然后就没再深入学习了,现在要重新学起

发布时间:2023-09-06 01:08责任编辑:赖小花关键词:js

废话不多说,下面是源码,希望大牛们指出问题

<html>
<head>
<meta charset="utf-8"/>
<title>地图</title>
<style>
#mainDiv
{
width: 40%;
}
.tableStyle
{
border-style: solid;
border-color: black;
border-width: thin;
}
.divStyle
{
color: black;
background-color: black;
overflow: hidden;
}
.snackStyle
{
color: crimson;
background-color: crimson;
overflow: hidden;
}
.headStyle
{
color: red;
background-color: red;
overflow: hidden;
}
.frogStyle
{
color: green;
background-color: green;
overflow: hidden;
}
.borderStyle
{
color: darkred;
background-color: darkred;
overflow: hidden;
}
</style>
<script type="text/javascript">
/*方向,1:向右、2:向下、3:向左、4:向上*/
var direction=1;
/*地图行列大小,以及单元格像素值*/
var x,y,w,h;
/*青蛙、头部、尾部单元格*/
var frog,head,tail;
/*速度*/
var speed;
/*计数器*/
var count;
/*初始化地图行列大小*/
function getXY()
{
x=y=parseInt(document.getElementById("x").value.trim());
w=h=550/x;
}
/*初始化地图*/
function terrainFactory()
{
var div=document.getElementById("mainDiv");
var table=document.createElement("table");
table.setAttribute("cellspacing","0px");
table.setAttribute("cellpadding","0px");
table.className="tableStyle";
for(var i=0;i<x;i++)
{
var tr=document.createElement("tr");
for(var j=0;j<y;j++)
{
var td=document.createElement("td");
var divChild=document.createElement("div");
/*divChild.style.width="30px";
divChild.style.height="30px";
divChild.style.backgroundColor="red";*/
if(i==0)
{
var name=""+j;
}
else
{
var name=""+(i*y+j);
}
divChild.innerHTML=name;
divChild.setAttribute("id",name);
divChild.setAttribute("style","width:"+w+"px;height:"+h+"px");
divChild.className="divStyle";
td.appendChild(divChild);
tr.appendChild(td);
}
table.appendChild(tr);
}
div.appendChild(table);
addBorder();
}
/*添加边框*/
function addBorder()
{
var div=document.getElementById("mainDiv");
var table=div.firstElementChild;
/*第一行的td*/
var tdFirstItems=table.firstElementChild.childNodes;
/*更改第一行所有的边框*/
for(var i=0;i<tdFirstItems.length;i++)
{
tdFirstItems[i].firstElementChild.className="borderStyle";
}
/*最后一行的td*/
var tdLastItems=table.lastElementChild.childNodes;
for(var i=0;i<tdLastItems.length;i++)
{
tdLastItems[i].firstElementChild.className="borderStyle";
}
/*左边和右边*/
var trItems=table.childNodes;
for(var i=1;i<trItems.length-1;i++)
{
/*左边框*/ trItems[i].firstElementChild.firstElementChild.className="borderStyle";
/*右边框*/
trItems[i].lastElementChild.firstElementChild.className="borderStyle";
}
}
/*新建小蛇*/
function snakeFactory()
{
direction=Math.floor(Math.random()*4)+1;
var headNum=randomLocation(x-4,3,y-4,3);
head=document.getElementById(""+headNum);
head.className="headStyle";
head.innerHTML=headNum;
switch(direction)
{
/*向右*/
case 1:
var temp=document.getElementById(""+(headNum-1));
temp.className="snackStyle";
temp.innerHTML=headNum;
tail=document.getElementById(""+(headNum-2));
tail.className="snackStyle";
tail.innerHTML=headNum-1;
break;
/*向下*/
case 2:
var temp=document.getElementById(""+(headNum-y));
temp.className="snackStyle";
temp.innerHTML=headNum;
tail=document.getElementById(""+(headNum-2*y));
tail.className="snackStyle";
tail.innerHTML=headNum-y;
break;
/*向左*/
case 3:
var temp=document.getElementById(""+(headNum+1));
temp.className="snackStyle";
temp.innerHTML=headNum;
tail=document.getElementById(""+(headNum+2));
tail.className="snackStyle";
tail.innerHTML=headNum+1;
break;
/*向上*/
case 4:
var temp=document.getElementById(""+(headNum+y));
temp.className="snackStyle";
temp.innerHTML=headNum;
tail=document.getElementById(""+(headNum+2*y));
tail.className="snackStyle";
tail.innerHTML=headNum+y;
break;
}
}
/*新建青蛙*/
function frogFactory()
{
var frogNum=randomLocation(x-2,1,y-2,1);
frog=document.getElementById(""+frogNum);
if(frog.className=="divStyle")
{
frog.className="frogStyle";
}
else
{
frogFactory();
}
}
/*移动算法*/
/*方向,1:向右、2:向下、3:向左、4:向上*/
function move(num)
{
document.getElementById("model").nextElementSibling.innerHTML="速度为:"+speed;
switch(direction)
{
case 1:
var headlocation=parseInt(head.innerHTML);
/*吃青蛙*/
if(document.getElementById(headlocation+1+"").className=="frogStyle")
{
eatFrog(headlocation+1);
break;
}
/*撞墙或者撞到自己了*/ if(document.getElementById(headlocation+1+"").className=="borderStyle"||document.getElementById(headlocation+1+"").className=="snackStyle")
{
location.reload();
}
else
{
moveDetail(headlocation+1);
}
break;
case 2:
var headlocation=parseInt(head.innerHTML);
/*吃青蛙*/
if(document.getElementById(headlocation+y+"").className=="frogStyle")
{
eatFrog(headlocation+y);
break;
}
/*撞墙或者撞到自己了*/ if(document.getElementById(headlocation+y+"").className=="borderStyle"||document.getElementById(headlocation+y+"").className=="snackStyle")
{
location.reload();
}
else
{
moveDetail(headlocation+y);
}
break;
case 3:
var headlocation=parseInt(head.innerHTML);
/*吃青蛙*/
if(document.getElementById(headlocation-1+"").className=="frogStyle")
{
eatFrog(headlocation-1);
break;
}
/*撞墙或者撞到自己了*/
if(document.getElementById(headlocation-1+"").className=="borderStyle"||document.getElementById(headlocation-1+"").className=="snackStyle")
{
location.reload();
}
else
{
moveDetail(headlocation-1);
}
break;
case 4:
var headlocation=parseInt(head.innerHTML);
/*吃青蛙*/
if(document.getElementById(headlocation-y+"").className=="frogStyle")
{
eatFrog(headlocation-y);
break;
}
/*撞墙或者撞到自己了*/
if(document.getElementById(headlocation-y+"").className=="borderStyle"||document.getElementById(headlocation-y+"").className=="snackStyle")
{
alert("GAME OVER!GG思密达!");
location.reload();
}
else
{
moveDetail(headlocation-y);
}
break;
}
if(num==1)
{
count++;
if(count%10==0)
{
speed-=10;
}
setTimeout("move(1)",speed);
}
else
{
setTimeout("move(0)",speed);
}
}
/*吃青蛙*/
function eatFrog(intLoction)
{
head.className="snackStyle";
head.innerHTML=intLoction;
head=document.getElementById(intLoction+"");
head.className="headStyle";
head.innerHTML=intLoction;
frogFactory();
}
/*移动细节*/
function moveDetail(intLoction)
{
head.className="snackStyle";
head.innerHTML=intLoction;
head=document.getElementById(intLoction+"");
head.className="headStyle";
head.innerHTML=intLoction;
tail.className="divStyle";
tail=document.getElementById(tail.innerHTML);
}
/*随机位置*/
function randomLocation(x_big,x_small,y_big,y_small)
{
var smallNum=Math.floor(Math.random()*(y_big-y_small+1))+y_small;
var bigNum=Math.floor(Math.random()*(x_big-x_small+1))+x_small;
return y*bigNum+smallNum;
}
/*键盘监听*/
/*方向,1:向右、2:向下、3:向左、4:向上*/
function listenKey(event)
{
var value=event.keyCode;
switch(value)
{
case 87:
case 38:
if(direction==1||direction==3)
{direction=4;}
break;
case 65:
case 37:
if(direction==2||direction==4)
{direction=3;}
break;
case 83:
case 40:
if(direction==1||direction==3)
{direction=2;}
break;
case 68:
case 39:
if(direction==2||direction==4)
{direction=1;}
break;
}
}
/*开始游戏*/
function start(obj)
{
obj.setAttribute("disabled","disabled");
getXY();
terrainFactory();
snakeFactory();
frogFactory();
if(document.getElementById("model").value.trim()=="常规模式")
{
speed=500;
我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved