js小练-贪食蛇


代码保存为html直接运行即


<html>
	<head>
		<style>
			*{
				margin:0px;
				padding:0px;
			}
			.box{
				width:20px;
				height:20px;
				background-color:blue;
				border:1px gray solid;
				position:absolute;
			}
			.sweet{
				width:20px;
				height:20px;
				background-color:green;
				position:absolute;
			}
			#win{
				width:400px;
				height:400px; 
				background-color:gray;	
				border:1px solid;
				margin:0 auto;
				margin-top:50px;
				position:relative;
			}
			#win #text {
				margin:0 auto;
				width:100%;
				font-size:3.5em;
				color:white;
				font-family:"微软雅黑";
				line-height:400px;
				text-align:center;
			}
		</style>
	</head>
	<body>
		<div id="win">
			<div id="text">1</div> 
		</div> 
	</body>

	<script>
		//贪食蛇
		var Snake = function(win) {
			this.win = win;
			this.nodes = Array();
			this.direction = 2;
			
			//增加一个node
			this.addBox = function(x,y) {
				var item = document.createElement("div");
				item.className = "box";
				item.style.left = x;
				item.style.top = y;
				var len = this.nodes.length;
				this.nodes[len] = item;
				win.appendChild(item);
			};
			//初始化
			this.init = function() {
				var x = 200;
				var y = 200;
				this.addBox(x,y);
				//this.addBox(x+20,y);
			};
			//移动
			this.move = function() {
				for (i=0;i<this.nodes.length - 1;i++){
					var node = this.nodes[i];
					var nextNode = this.nodes[i+1];
					node.style.left = nextNode.style.left;
					node.style.top = nextNode.style.top;
				}
				var node = this.nodes[this.nodes.length-1];
				var left = parseInt(node.style.left);
				var top = parseInt(node.style.top);
				if (this.direction == 1) {
					top -= 20;
				}
				if (this.direction == 2) {
					left += 20;
				}
				if (this.direction == 3) {
					top += 20;
				}
				if (this.direction == 4) {
					left -= 20;
				}
				if (this.isOver(left,top)) {
					document.getElementById('text').innerHTML = "GAME OVER";
					clearInterval(interval);
					return;
				}
				if (!sweet.tryEat(left,top)) { 
					node.style.left = left;
					node.style.top = top;
				}
			};
			this.isOver = function(x,y) {
				for (i=0;i<this.nodes.length - 1;i++){
					var node = snake.nodes[i];
					var nx = parseInt(node.style.left);
					var ny = parseInt(node.style.top);
					if (x == nx && y == ny){
						return true;
					}
				}	
				if (x>=400 || x<0 || y<0 || y>=400) {
					return true;
				} else {
					return false;
				}
			}
			//反转
			this.reverse = function() {
				snake.nodes.reverse();
			}
		}

		//糖果
		var Sweet = function() {
			this.item = null;
			this.create = function() {
				this.x = parseInt (Math.random() * 20) * 20;
				this.y = parseInt (Math.random() * 20) * 20;
				this.item = document.createElement("div");
				this.item.className = "sweet";
				this.item.style.left = this.x;
				this.item.style.top = this.y;
				for (var index in snake.nodes ) {
					var node = snake.nodes[index];
					var nx = parseInt(node.style.left);
					var ny = parseInt(node.style.top);
					if (this.x == nx && this.y == ny){
						return this.create();
					}
				}				
				win.appendChild(this.item);
			}
			this.tryEat = function(x,y) {
				var sx = parseInt(this.item.style.left);
				var sy = parseInt(this.item.style.top);
				if (x == sx && y  == sy) {
					win.removeChild(this.item);
					snake.addBox(x,y);
					this.create();
					score++;
					document.getElementById('text').innerHTML = score;
					return true;
				}
				return false;
			}
		}

		//up
		function up() {
			if (snake.direction == 3) {snake.reverse();}
			snake.direction = 1;
			snake.move();
		}
		//right
		function right() {
			if (snake.direction == 4) {snake.reverse();}
			snake.direction = 2;
			snake.move();
		}
		//down
		function down() {
			if (snake.direction == 1) {snake.reverse();}
			snake.direction = 3;
			snake.move();
		}
		//left
		function left() {
			if (snake.direction == 2) {snake.reverse();}
			snake.direction = 4;
			snake.move();
		}
		//移动
		function move() {
			switch (nextDirection)
			{
				case 1:up();break;
				case 2:right();break;
				case 3:down();break;
				case 4:left();break;			
			}			
		}
		//捕获按键
		document.onkeydown = function(e) {
			switch(e.keyCode) {
				case 37:nextDirection =4;break;
				case 38:nextDirection =1;break;
				case 39:nextDirection =2;break;
				case 40:nextDirection =3;break;
			}				
		}		
		var win = document.getElementById("win");
		var snake = new Snake(win);
		var nextDirection = 2;
		var sweet = new Sweet();
		var score = 1;
		snake.init();
		sweet.create();
		var interval = setInterval("move()",100);
	</script>
</html>


贪食蛇游戏是一款经典的游戏,玩家通过控制一条蛇在一个有边界的区域内移动,吃掉食物来增长身体长度,同时要避免撞到自己的身体或者撞到边界。下面是贪食蛇游戏软件的详细设计: 1. 游戏界面设计: - 游戏区域:一个矩形区域,用于显示游戏的进行,包括蛇和食物的位置。 - 分数显示:显示玩家当前的得分。 - 游戏状态显示:显示游戏的状态,如开始、暂停、结束等。 2. 蛇的设计: - 蛇的身体:由一系列相连的方块组成,每个方块代表蛇的一个身体部分。 - 蛇的移动:根据玩家的输入控制蛇的移动方向,蛇每次移动一个方块的距离。 - 蛇的生长:当蛇吃到食物时,蛇的身体长度增加一个方块。 3. 食物的设计: - 食物的位置:随机生成在游戏区域内的一个空白位置。 - 食物的消失与生成:当蛇吃到食物后,食物消失并重新生成在另一个位置。 4. 碰撞检测: - 蛇与自身的碰撞:当蛇的头部与身体的其他部分重叠时,游戏结束。 - 蛇与边界的碰撞:当蛇的头部碰到游戏区域的边界时,游戏结束。 - 蛇与食物的碰撞:当蛇的头部与食物重叠时,蛇的身体增长,并生成新的食物。 5. 游戏控制: - 开始游戏:玩家点击开始按钮或者按下空格键开始游戏。 - 暂停游戏:玩家点击暂停按钮或者按下空格键暂停游戏。 - 结束游戏:当蛇与自身或边界碰撞时,游戏结束。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值