html5+js+css开发贪吃蛇

<!doctype html>
<html>
 <head>
  <meta charset="UTF-8">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
  <title>̰贪吃蛇</title>
  <style type="text/css">
	*{
		margin:0;
		padding:0;
	}
	body{
		background:url(img/bg.jpg);
		background-size:cover;/*屏幕自适应*/
	}
	#box{
		width:600px;
		margin:20px auto;
	}
	#canvas{
		border:3px solid #4a4a4a;
	}
	#btn a{
		width:100px;
		height:26px;
		display:inline-block;
		text-decoration:none;
		background:#338328;
		text-align:center;
		padding:10px;
		border-radius:10px;
		line-height:26px;
		color:#000;
		font-weight:600;
	}
	#btn a:hover{
		color:#fff;
	}
	#score_one{
		color:#fff;
		text-align:center;
		font-weight:600;
		font-size:20px;
	}
  </style>
 </head>
 <body>
	<div id="box">
		<div id="score_one">
			得分:<span id="score"></span>
		</div>
		<canvas id="canvas" width="600" height="600"></canvas>
		<div id="btn">
			<a href="javascript:void(0);" οnclick="btnStart();">开始游戏</a>
			<a href="javascript:void(0);" οnclick="reStart();">重新游戏</a>
		</div>
		<audio src="mp3/bg.mp3" loop id="beginmusic"></audio>
		<audio src="mp3/eat.mp3" id="bomb"></audio>
		<audio src="mp3/over.mp3" id="over"></audio>
	</div>
	
	<script type="text/javascript">
		function $(id){
			return document.getElementById(id);
		}
		
		//获取画布对象
		var canvas = $("canvas");
		var beginmusic = $("beginmusic");
		var bomb = $("bomb");
		var over = $("over");
		var score = $("score");
		score.innerText="0";
		//获取上下文
		var ctx = canvas.getContext("2d");
		//蛇身长4格
		var snakeCount = 4;
		var snakes = [];
		var foodX = 0;
		var foodY = 0;
		var timer = null;
		var toGo = 3;// 1 左 2 上 3 右 4 下
		
		//绘画
		function draw(){
			var s=600;
			for(var i=0;i<s;i+=40){
				ctx.strokeStyle="#4a4a4a";
				ctx.moveTo(0,i+40);
				ctx.lineTo(600,i+40);
				ctx.moveTo(i+40,0);
				ctx.lineTo(i+40,600);
				ctx.stroke();
			}
			//画蛇
			for(var i=0;i<snakes.length;i++){
				//重启绘画
				ctx.beginPath();
				ctx.fillRect(snakes[i].x,snakes[i].y,40,40);
				ctx.strokeStyle="#4a4a4a";
				ctx.moveTo(snakes[i].x,snakes[i].y);// 0  0
				ctx.lineTo(snakes[i].x+40,snakes[i].y);// 40 0
				ctx.lineTo(snakes[i].x+40,snakes[i].y+40);// 40 40
				ctx.lineTo(snakes[i].x,snakes[i].y+40);// 0 40
				ctx.lineTo(snakes[i].x,snakes[i].y);// 0 0
				ctx.stroke();
			}
			ctx.fillRect(foodX,foodY,40,40);
		}
		
		//定义蛇的位置
		function start(){
			for(var i=0;i<snakeCount;i++){
				snakes[i]={x:i*40,y:0};
			}
			addFood();
			draw();
		}

		//添加食物
		function addFood(){
			foodX = Math.floor(Math.random()*15)*40;
			foodY = Math.floor(Math.random()*15)*40;
		}

		//蛇移动
		function move(){
			switch(toGo){
				case 1:
					//给数组添加新的元素
					snakes.push({x:snakes[snakeCount-1].x-40,y:snakes[snakeCount-1].y});//左
					break;
				case 2:
					//给数组添加新的元素
					snakes.push({x:snakes[snakeCount-1].x,y:snakes[snakeCount-1].y-40});//上
					break;
				case 3:
					//给数组添加新的元素
					snakes.push({x:snakes[snakeCount-1].x+40,y:snakes[snakeCount-1].y});//右
					break;
				case 4:
					//给数组添加新的元素
					snakes.push({x:snakes[snakeCount-1].x,y:snakes[snakeCount-1].y+40});//下
					break;
			}
			
			//删除数组的第一个元素
			snakes.shift();
			ctx.clearRect(0,0,600,600);
			isEat();
			isDead();
			draw();
		}
		
		//键盘方向键控制蛇的走向
		function keyDown(e){
			switch(e.keyCode){
				case 37://左
					toGo = 1;
					break;
				case 38:
					toGo = 2;
					break;
				case 39:
					toGo = 3;
					break;
				case 40:
					toGo = 4;
					break;
			}
		};

		//蛇吃东西
		function isEat(){
			if(snakes[snakeCount-1].x == foodX && snakes[snakeCount-1].y == foodY){
				snakeCount++;
				addFood();
				snakes.unshift({x:-40,y:-40});
				score.innerText = parseInt(score.innerText)+50;
				bomb.play();
			}
		};
		
		//规则限制
		function isDead(){
			//边界判断
			if(snakes[snakes.length-1].x>560 || snakes[snakes.length-1].y>560 || snakes[snakes.length-1].x<0 || snakes[snakes.length-1].y<0){
				beginmusic.pause();
				over.play();
				alert("你为啥这么想不开呢?");
				window.location.reload();
			}

			//判断自身,蛇不能碰到蛇身
			for(var i=0;i<snakes.length-1;i++){
				if(snakes[snakes.length-1].x == snakes[i].x && snakes[snakes.length-1].y == snakes[i].y){
					beginmusic.pause();
					over.play();
					alert("你何必为难自己呢?");
					window.location.reload();
				}
			}
		}

		//开始游戏
		function btnStart(){
			beginmusic.play();
			timer = setInterval(move,150);
			document.onkeydown = function(e){
				e = e || window.event;
				keyDown(e);
			}
		}
		
		//重新游戏
		function reStart(){
			window.location.reload();
		}
		

		window.onload = function(){
			start();
		}

	</script>
 </body>
</html>

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值