<html>
	<head>
	</head>
	<body>
		<div style="float:left;">当前速度1:<button onclick="jiancl()">-</button><span id="sudu">300ms</span><button onclick="jiacl()">+</button></div>
		<div style="float:right;">当前速度2:<button onclick="jiancl2()">-</button><span id="sudu2">300ms</span><button onclick="jiacl2()">+</button></div>
		<canvas id="mcan" width="300px" height="200px" style="background-color:#CCFF99">您的浏览器版本过低</canvas>
	</body>
	<script type="text/javascript">
		var st1 = "红方 GAMEOVER!",st2 = "蓝方 GAMEOVER!";
		var obj = document.getElementById("mcan");
		var ctx = obj.getContext("2d");//canvas对象
		var width = 300,height = 200;
		var len = 10;//模块长宽
		var keyData = [{k:38,x:0,y:-len},{k:40,x:0,y:len},{k:37,x:-len,y:0},{k:39,x:len,y:0}];
		var keyData2 = [{k:87,x:0,y:-len},{k:83,x:0,y:len},{k:65,x:-len,y:0},{k:68,x:len,y:0}];
		//贪吃蛇
		var data = [[220,20]];//初始位置
		var data2 = [[20,20]];//初始位置
		var eatData;
		var sudu = 300,sudu2 = 300;
		getSj();//要吃的位置
		+function(){
			ctx.fillStyle = "red";
			ctx.fillRect(data[0][0],data[0][1],len,len);
			ctx.fillStyle = "blue";
			ctx.fillRect(data2[0][0],data2[0][1],len,len);
			//ctx.moveTo(0,0);
			//ctx.lineTo(50,20);
			//ctx.stroke();
		}();
		var si,i,si2,i2;
		document.onkeydown = function(e){
			var kcode = e.keyCode;
			if(kcode<97){
				if(kcode>36&&kcode<41){
					i = -1;
					if(kcode==38){i=0}
					else if(kcode==40){i=1}
					else if(kcode==37){i=2}
					else if(kcode==39){i=3}
					if(i!=-1){
						clearInterval(si);
						si = window.setInterval("testFunction()",sudu);
						animateDraw();	
					}
				}else{// 87 83 65 68
					i2 = -1;
					if(kcode==87){i2=0}
					else if(kcode==83){i2=1}
					else if(kcode==65){i2=2}
					else if(kcode==68){i2=3}
					if(i2!=-1){
						clearInterval(si2);
						si2 = window.setInterval("testFunction2()",sudu);
						animateDraw2();	
					}
				}
			}else{
				//188 190 97 98
				if(kcode==188){
					jiancl2();
				}else if(kcode==190){
					jiacl2();
				}else if(kcode==97){
					jiancl();
				}else if(kcode==98){
					jiacl();
				}
			}
		}
		function jiancl(){
			clearInterval(si);
			sudu = sudu-10;
			document.getElementById("sudu").innerHTML = sudu+"ms";
			si = window.setInterval("testFunction()",sudu);
			animateDraw();
		}
		function jiancl2(){
			clearInterval(si2);
			sudu2 = sudu2-10;
			document.getElementById("sudu2").innerHTML = sudu2+"ms";
			si2 = window.setInterval("testFunction2()",sudu2);
			animateDraw2();
		}
		function jiacl(){
			clearInterval(si);
			sudu = sudu+10;
			document.getElementById("sudu").innerHTML = sudu+"ms";
			si = window.setInterval("testFunction()",sudu);
		}
		function jiacl2(){
			clearInterval(si2);
			sudu2 = sudu2+10;
			document.getElementById("sudu2").innerHTML = sudu2+"ms";
			si2 = window.setInterval("testFunction2()",sudu2);
		}
		function testFunction(){
			animateDraw();
		}
		function testFunction2(){
			animateDraw2();
		}
		function animateDraw(){
			if(i!=-1){
				var x = data[0][0]+keyData[i].x;
				var y = data[0][1]+keyData[i].y;
				for(var m = 0;m<data2.length;m++){
					if(m!=0){
						if(x==data2[m][0]&&y==data2[m][1]){
							alert(st1);
							clearInterval(si);
							return;
						}
					}else{
						if(x==data2[0][0]&&y==data2[0][1]){
							if(data.length>data2.length){
								alert(st2);
								clearInterval(si);
								return;
							}else{
								alert(st1);
								clearInterval(si);
								return;
							}
						}
					}
				}
				if(x>=0&&x<width&&y>=0&&y<height){
					if(x==eatData[0]&&y==eatData[1]){
						getSj();
					}else{
						draw("#CCFF99",data.pop());
					}
					data.unshift([x,y]);
					draw("red",data[0]);
				}else{
					clearInterval(si);
					alert(st1+" GAME OVER!");
				}
			}
		}
		function animateDraw2(){
			if(i2!=-1){
				var x = data2[0][0]+keyData2[i2].x;
				var y = data2[0][1]+keyData2[i2].y;
				for(var m = 0;m<data.length;m++){
					if(m!=0){
						if(x==data[m][0]&&y==data[m][1]){
							alert(st2);
							return;
						}
					}else{
						if(x==data[0][0]&&y==data[0][1]){
							if(data2.length>data.length){
								alert(st1);
								clearInterval(si);
								return;
							}else{
								alert(st2);
								clearInterval(si);
								return;
							}
						}
					}
				}
				if(x>=0&&x<width&&y>=0&&y<height){
					if(x==eatData[0]&&y==eatData[1]){
						getSj();
					}else{
						draw("#CCFF99",data2.pop());
					}
					data2.unshift([x,y]);
					draw("blue",data2[0]);
				}else{
					clearInterval(si2);
					alert(st2);
				}
			}
		}
		function getSj(){
			var now=new Date();
			var x = now.getSeconds()%(width/len-1)*len;
			var y = now.getSeconds()%(height/len-1)*len;
			var b = false;
			for(var m = 0;m<data.length;m++){
				if(m.x==x&&m.y==y)b = true;
			}
			if(!b){
				eatData = [x,y];
				draw("#"+randomColor(),eatData);
			}	
		}
		function randomColor(){  
			var rand = Math.floor(Math.random( ) * 0xFFFFFF).toString(16);  
			if(rand.length == 6){  
				return rand;  
			}else{  
				return randomColor();  
			}
		}
		function draw(a,b){
			ctx.fillStyle = a;
			ctx.fillRect(b[0],b[1],len,len);
		}
	</script>
</html>

 

更多相关文章

  1. html5 地理位置定位的时候,想用enableHighAccuracy提高精确度,但是
  2. 在PHP中更改关联数组索引的位置
  3. 按钮和文本移回原始位置
  4. 评论: 网页浏览速度提高切实可行的七个方法
  5. 准备好的报表没有速度效益吗?
  6. 请问MySql 可以处理8千万条以上的记录吗, 速度有没SQL2000快?
  7. ubuntu_mysql怎么判断自己的库和头文件的位置
  8. centos7 移动mysql5.7.19 数据存储位置
  9. js金额数字格式化实现代码(三位加逗号处理保留两位置小数)

随机推荐

  1. Android最新资源官方下载地址
  2. android 网络语音电话合集 此文为备份
  3. Android Application - Painting
  4. Android Studio放大缩小字体
  5. some step in studying android
  6. Android(安卓)小应用之一个activity实现
  7. Android(安卓)apk的维护与升级
  8. 在 Android(安卓)上使用 XML 和 JSON,第 2
  9. android解析json数组
  10. android 开发中遇到错误及解决办法总结(