HTML5小试 双人贪吃蛇

<html>
	<head>
	</head>
	<body>
		<div style="float:left;">当前速度1:<button οnclick="jiancl()">-</button><span id="sudu">300ms</span><button οnclick="jiacl()">+</button></div>
		<div style="float:right;">当前速度2:<button οnclick="jiancl2()">-</button><span id="sudu2">300ms</span><button οnclick="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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你想了解如何开发一个 HTML 的贪吃蛇游戏,支持单人和双人模式对吗? 对于这个问题,你可以使用 HTML、CSS 和 JavaScript 来创建一个基于网页的贪吃蛇游戏。下面是一个简单的示例: 首先,你需要创建一个 HTML 文件并添加必要的标记和样式。你可以使用以下代码作为起点: ```html <!DOCTYPE html> <html> <head> <title>贪吃蛇游戏</title> <style> /* 添加样式 */ </style> </head> <body> <canvas id="gameCanvas" width="400" height="400"></canvas> <script> // 添加 JavaScript 代码 </script> </body> </html> ``` 在 CSS 部分,你可以自定义游戏界面的样式,例如背景颜色、贪吃蛇和食物的颜色等等。 在 JavaScript 部分,你需要编写游戏的逻辑代码。首先,你可以创建一个画布并获取它的上下文: ```js var canvas = document.getElementById("gameCanvas");var ctx = canvas.getContext("2d"); ``` 接下来,你可以定义贪吃蛇的初始位置、长度和方向,并创建一个数组来保存贪吃蛇的身体坐标: ```js var snakeX = 10; var snakeY = 10; var snakeLength = 5; var snakeDirection = "right"; var snakeBody = []; for (var i = snakeLength - 1; i >= 0; i--) { snakeBody.push({ x: i, y: 0 }); } ``` 然后,你可以设置游戏的更新逻辑,例如每隔一段时间更新贪吃蛇的位置,并检测是否碰到边界或自身: ```js function update() { // 更新贪吃蛇位置的代码 // 检测碰撞的代码 // 渲染游戏界面的代码 } setInterval(update, 100); // 每隔100毫秒更新一次 ``` 在更新贪吃蛇位置的代码中,你需要根据贪吃蛇的方向移动它的头部,并在数组的开头添加新的头部坐标,同时删除数组末尾的尾部坐标: ```js if (snakeDirection === "right") { snakeX++; } else if (snakeDirection === "left") { snakeX--; } else if (snakeDirection === "up") { snakeY--; } else if (snakeDirection === "down") { snakeY++; } snakeBody.unshift({ x: snakeX, y: snakeY }); snakeBody.pop(); ``` 在检测碰撞的代码中,你需要检查贪吃蛇是否碰到了边界或自身。如果碰撞发生,你可以终止游戏或执行其他相应的操作。 最后,在渲染游戏界面的代码中,你可以使用 `ctx` 上下文对象绘制贪吃蛇和食物的图形: ```js // 清空画布 ctx.clearRect(0, 0, canvas.width, canvas.height); // 绘制贪吃蛇 snakeBody.forEach(function (bodyPart) { ctx.fillRect(bodyPart.x * 10, bodyPart.y * 10, 10, 10); }); // 绘制食物 ctx.fillRect(foodX * 10, foodY * 10, 10, 10); ``` 这只是贪吃蛇游戏开发的一个简单示例,你可以根据自己的需求进行扩展和优化。希望对你有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值