1. 程式人生 > >貪吃蛇JQuery部分

貪吃蛇JQuery部分

<!DOCTYPE html>
<html>
<head>
	<title>snake</title>

	<style>
	.square {
		width: 30px;
		height: 30px;
	}
	.border {
		background-color: grey;
	}
	.snake {
		background-color: red;
	}

	 .in {
        background: #0f0;
    }
    .food {
        background: blue;
    }
    #btn{
    	float: left;
    	position: absolute;
    	left: 100px;
    	top: 100px;
    }
	</style>
</head>
<body>
	<table border="1" cellspacing="0" cellpadding="0" align="center">
		<tbody id="tbody">
			
		</tbody>
	</table>
	<button id="btn" onclick="location.reload();">點我再來一次</button>

	<script src="jquery-2.1.1.min.js" type="text/javascript"></script>

	
	<script type="text/javascript">
		//初始化遊戲背景
		initTable(20,20);

		var foodArr = randomFood();//把蛇的食物放在一個數組裡
		var timer;
		var snake = new Object();
		snake.arr = [[1,1]];
		snake.direction = "right";
		//初始化一條蛇
		for (var i = 0; i < snake.arr.length; i++) {
			snake.arr[i]
			$("#tbody").children().eq(snake.arr[i][0]).children().eq(snake.arr[i][1]).addClass("snake");
		}

		 
		timer = setInterval(function() {
			//分四個方向 每個方向三種情況
			//向右移動時
			if(snake.direction == "right") {
				if($("#tbody").children().eq(snake.arr[0][0]).children().eq(snake.arr[0][1]).next().hasClass("border") || $("#tbody").children().eq(snake.arr[0][0]).children().eq(snake.arr[0][1]).next().hasClass("snake")) {
					window.clearInterval(timer);
					alert("嘻嘻,你死了喲,真是菜"); //如果碰到邊界或者自己的身體 遊戲結束
				} else if ($("#tbody").children().eq(snake.arr[0][0]).children().eq(snake.arr[0][1]).next().hasClass("food")) {
					snake.arr.unshift(foodArr);
					console.log(snake.arr);
 					$("tbody").children().eq(foodArr[0]).children().eq(foodArr[1]).removeClass("food").addClass("snake");
 					foodArr = randomFood();  //通過判斷蛇身體是否有食物的樣式
 					
				} 
					else {
					var arr = [snake.arr[0][0], snake.arr[0][1] + 1];
					snake.arr.unshift(arr);
					$("#tbody").children().eq(snake.arr[0][0]).children().eq(snake.arr[0][1]).addClass("snake");
					$("#tbody").children().eq(snake.arr[snake.arr.length - 1][0]).children().eq(snake.arr[snake.arr.length - 1][1]).removeClass("snake");
					snake.arr.pop();  //在沒有其他情況下 按著這個方向一直移動
				}	
				//向左移動時
			} else if(snake.direction == "left") {
				if($("#tbody").children().eq(snake.arr[0][0]).children().eq(snake.arr[0][1]).prev().hasClass("border") || $("#tbody").children().eq(snake.arr[0][0]).children().eq(snake.arr[0][1]).prev().hasClass("snake")) {
					window.clearInterval(timer);
					alert("嘻嘻,你死了喲,真是菜");
				} else if ($("#tbody").children().eq(snake.arr[0][0]).children().eq(snake.arr[0][1]).prev().hasClass("food")) {
					
					snake.arr.unshift(foodArr);
					console.log(snake.arr);
 					$("tbody").children().eq(foodArr[0]).children().eq(foodArr[1]).removeClass("food").addClass("snake");
 					foodArr = randomFood();
 					
				}
				else {
				var arr = [snake.arr[0][0], snake.arr[0][1] - 1];
				snake.arr.unshift(arr);
				$("#tbody").children().eq(snake.arr[0][0]).children().eq(snake.arr[0][1]).addClass("snake");
				$("#tbody").children().eq(snake.arr[snake.arr.length - 1][0]).children().eq(snake.arr[snake.arr.length - 1][1]).removeClass("snake");
				snake.arr.pop();
				}
				//向上移動時
			} else if(snake.direction == "top") {
				if($("#tbody").children().eq(snake.arr[0][0]).prev().children().eq(snake.arr[0][1]).hasClass("border") || $("#tbody").children().eq(snake.arr[0][0]).prev().children().eq(snake.arr[0][1]).hasClass("snake")) {
					window.clearInterval(timer);
					alert("嘻嘻,你死了喲,真是菜");
				} else if ($("#tbody").children().eq(snake.arr[0][0]).prev().children().eq(snake.arr[0][1]).hasClass("food")) {
					
					snake.arr.unshift(foodArr);
					console.log(snake.arr);
 					$("tbody").children().eq(foodArr[0]).children().eq(foodArr[1]).removeClass("food").addClass("snake");
 					foodArr = randomFood();
 					
				} 
				else {
				var arr = [snake.arr[0][0] - 1, snake.arr[0][1]];
				snake.arr.unshift(arr);
				$("#tbody").children().eq(snake.arr[0][0]).children().eq(snake.arr[0][1]).addClass("snake");
				$("#tbody").children().eq(snake.arr[snake.arr.length - 1][0]).children().eq(snake.arr[snake.arr.length - 1][1]).removeClass("snake");
				snake.arr.pop();
				}
				//向下移動時
			} else if(snake.direction == "bottom") {
				if($("#tbody").children().eq(snake.arr[0][0]).next().children().eq(snake.arr[0][1]).hasClass("border") || $("#tbody").children().eq(snake.arr[0][0]).next().children().eq(snake.arr[0][1]).hasClass("snake")) {
					window.clearInterval(timer);
					alert("嘻嘻,你死了喲,真是菜");
				} else if ($("#tbody").children().eq(snake.arr[0][0]).next().children().eq(snake.arr[0][1]).hasClass("food")) {
					snake.arr.unshift(foodArr);
					console.log(snake.arr);
 					$("tbody").children().eq(foodArr[0]).children().eq(foodArr[1]).removeClass("food").addClass("snake");
 					foodArr = randomFood();
 					
				} 
				else {	
				var arr = [snake.arr[0][0] + 1, snake.arr[0][1]];
				snake.arr.unshift(arr);
				$("#tbody").children().eq(snake.arr[0][0]).children().eq(snake.arr[0][1]).addClass("snake");
				$("#tbody").children().eq(snake.arr[snake.arr.length - 1][0]).children().eq(snake.arr[snake.arr.length - 1][1]).removeClass("snake");
				snake.arr.pop();
				}
			}
			
		},100);
	
			
		
		//通過鍵盤上下左右來下達指令
		$(document).on("keydown",function() {
			if (event.keyCode == 37) {
				if (snake.direction == "left" || snake.direction == "right") {
					return;
				}else {
					snake.direction = "left";
				}
			}else if (event.keyCode == 38) {
				if (snake.direction == "top" || snake.direction == "bottom") {
					return;
				}else {
					snake.direction = "top";
				}
				
			}else if (event.keyCode == 39) {
				if (snake.direction == "left" || snake.direction == "right") {
					return;
				}else {
				snake.direction = "right";
				}
			}else if (event.keyCode == 40) {
				if (snake.direction == "top" || snake.direction == "buttom") {
					return;
				}else {
					snake.direction = "bottom";
				}
				
			}
		})
		//用隨機數來生成食物 要求在邊框內 通過while迴圈來排除食物出現在蛇身裡
		function randomFood() {
			var x = Math.floor(Math.random()*20 + 1);
			var y = Math.floor(Math.random()*20 + 1);
			while(true) {
				if ($("#tbody").children().eq(x).children().eq(y).hasClass("snake")) {
					var x = Math.floor(Math.random()*20 + 1);
					var y = Math.floor(Math.random()*20 + 1);
				} else {
					$("#tbody").children().eq(x).children().eq(y).addClass("food");
					var arr = [];
					arr.push(x);
					arr.push(y);
					return arr;
				}
			
			}
			
		
		}
		
		//初始化背景  注意邊框怎麼加!!!
		function initTable(width,height) {
			for (var i = 1; i <= height + 2; i++) {
			var tr = $("<tr></tr>");
			for (var j = 1; j <= width + 2; j++) {
				if (i == 1 || i == height + 2) {
					tr.append("<td class = 'border square'></td>");
				} else {
					if (j == 1 || j == width + 2) {
						tr.append("<td class = 'border square'></td>")
					} else{
						tr.append("<td class ='square '></td>")
					}
				}
				$("#tbody").append(tr);
			}
			
			}
		}

		
	</script>


</body>
</html>