一个120行的javascript贪吃蛇的代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>贪吃蛇</title>
<style type="text/css">
	#playSpace{ width:300px; height:300px; background-color:#CCCCCC; padding:0px;}
	ul{ position:absolute; margin:0px; padding:0px; width:15px; height:15px;; background-color:#00FFFF; z-index:1;}
</style>
<script type="text/javascript">
	var oDiv;
	var uls;
	var timer;
	var newUl;
	var keyNum=37;
	var posX = new Array(3);
	var posY = new Array(3);
	window.οnlοad=function(){
		oDiv = document.getElementById("playSpace");
		uls = document.getElementsByTagName("ul");
		for(var i=0;i<uls.length;i++){
			uls[i].style.top = oDiv.offsetTop+225+"px";
			uls[i].style.left = oDiv.offsetLeft+(15*(13+i))+"px";
		}
		runTimer();
		randomUl();
	}
	//模块运动函数
	function runTimer(){
		timer = setInterval(function(){
			setPosition();
			firstMove();
			checkPosition();
			showResult();
		},500);
	}
	//获取各个模块定位函数
	function setPosition(){
		for(var i=0;i<uls.length-1;i++){
			posX[i] = uls[i].offsetLeft;
			posY[i] = uls[i].offsetTop;
		}
	}
	//获得第一个模块的运动方向
	function setDirection(){
		if(event.keyCode==37||event.keyCode==38||event.keyCode==39||event.keyCode==40){
			if(checkDirection(event.keyCode)){
				keyNum = event.keyCode;
			}
		}		
	}
	//设置第一个模块的运动轨迹
	function firstMove(){
		if(keyNum==37){
			uls[0].style.left = uls[0].offsetLeft-15+"px";
		}else if(keyNum==38){
			uls[0].style.top = uls[0].offsetTop-15+"px";
		}else if(keyNum==39){
			uls[0].style.left = uls[0].offsetLeft+15+"px";
		}else if(keyNum==40){
			uls[0].style.top = uls[0].offsetTop+15+"px";
		}
	}
	//产生一个随机模块
	function randomUl(){
		newUl = document.createElement("ul");
		do{
			newUl.style.top = oDiv.offsetTop+15*parseInt(Math.random()*20)+"px";
			newUl.style.left = oDiv.offsetLeft+15*parseInt(Math.random()*20)+"px";
		}while(ulFlag());
		oDiv.appendChild(newUl);
	}
	//判断新模块是否重叠
	function ulFlag(){
		for(var i=0;i<uls.length-1;i++){
			if(uls[i].offsetTop==newUl.offsetTop && uls[i].offsetLeft==newUl.offsetLeft){
				return true;
			}
		}
		return false;
	}
	//判断是否已经连接新模块
	function checkPosition(){
		if(uls[0].offsetTop==newUl.offsetTop && uls[0].offsetLeft==newUl.offsetLeft){
			randomUl();
		}
		for(var i=1;i<uls.length-1;i++){
				uls[i].style.top = posY[i-1]+"px";
				uls[i].style.left = posX[i-1]+"px";
		}
	}
	//判断运动方向是否合理	
         function checkDirection(num){
		if(num==37){
			if(uls[0].offsetLeft-15==uls[1].offsetLeft){
				return false;
			}
		}else if(num==38){
			if(uls[0].offsetTop-15==uls[1].offsetTop){
				return false;
			}
		}else if(num==39){
			if(uls[0].offsetLeft+15==uls[1].offsetLeft){
				return false;
			}
		}else if(num==40){
			if(uls[0].offsetTop+15==uls[1].offsetTop){
				return false;
			}
		}
		return true;
	}
	//结果显示
	function showResult(){
		if(uls[0].offsetTop<oDiv.offsetTop || uls[0].offsetTop>oDiv.offsetTop+300){
			clearInterval(timer);
			alert("GAME OVER");
		}else if(uls[0].offsetLeft<oDiv.offsetLeft || uls[0].offsetLeft>oDiv.offsetLeft+300){
			clearInterval(timer);
			alert("GAME OVER");
		}
		for(var i=4;i<uls.length-1;i++){
			if(uls[0].offsetTop==uls[i].offsetTop && uls[0].offsetLeft==uls[i].offsetLeft){
				clearInterval(timer);
				alert("GAME OVER");
			}
		}
	}
</script>
</head>

<body οnkeyup="setDirection()">
	<div id="playSpace">
		<ul></ul>
		<ul></ul>
		<ul></ul>
	</div>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值