2048

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<style>
			table{
				margin:100px auto;
				border: 1px solid black;
				width:240px;
				height:240px;
				box-sizing: border-box
			}
			td{
				width:60px;
				height:60px;
				text-align: center;
				font:bold 24px/60px "微软雅黑";
				border:1px solid black
			}
		</style>
	</head>
	<body>
		<table cellpadding="0" cellspacing="0" id="ta">
			
		</table>
		<script>
			var ta = document.getElementById("ta");
			var td = [  // 存储数字的二维数组
			   [0,0,0,0],
			   [0,0,0,0],
			   [0,0,0,0],
			   [0,0,0,0]
			]
			init();  // 首次初始化数字
			var sum = 0;
			function init(){
				sum = 16;
				var txts = ""; // 添加内容
				for(var i = 0;i < td.length;i++){
					txts += "<tr>";
					for(var j = 0;j < td[i].length;j++){
						if(td[i][j] == 0){
							td[i][j] = ""; // 没有数字的全部显示为空
						}else{
							sum--;
						}
						txts += "<td>" + td[i][j] + "</td>"
					}
					txts += "</tr>"
				}
				ta.innerHTML = txts; // 数组体现到表格中
			}
			function unonly(){  // 在没有数字的地方随机一个数字
				var keys = false; // 判断是否要重新执行该函数
				for(var i = 0;i < td.length;i++){
					for(var j = 0;j < td[i].length;j++){
						if(Math.random()<0.2 && td[i][j] == ""){ // 有20%的几率在没有数字的地方生成2 
							td[i][j] = 2;
							keys = true;
							break;   // 生成后跳出
						}else if(Math.random()>0.92 && td[i][j] == ""){ // 有8%的几率在没有数字的地方生成2 
							td[i][j] = 4;
							keys = true;
							break;
						}
					}
					if(keys){
						break; // 如果生成数字跳出循环
					}
				}
				if(!keys && sum>0){
					unonly();  // 没有生成的话再执行一边
				}
			}
			function randoms(which){
				unonly();
//				console.log(which);
				switch(which){  // 改变数组
					case 38:
//						console.log("up")
						for(var i = 1;i < td.length;i++){
							for(var j = 0;j < td[i].length;j++){
								if(td[i-1][j] == ""){
									td[i-1][j] = td[i][j];
									td[i][j] = "";
								}else if(td[i-1][j] == td[i][j]){
									td[i-1][j] += td[i][j];
									td[i][j] = "";
									j--;
								}
							}
						}
					break;
					case 39:
//					 console.log("left")
						for(var i = 0;i < td.length;i++){
							for(var j = 0;j < td[i].length;j++){
								if(td[i][j+1] == ""){
									td[i][j+1] = td[i][j];
									td[i][j] = "";
								}else if(td[i][j+1] == td[i][j]){
									td[i][j+1] += td[i][j];
									td[i][j] = "";
									j--;
								}
							}
						}
					break;
					case 40:
//						console.log("down")
						for(var i = 0;i < td.length-1;i++){
							for(var j = 0;j < td[i].length;j++){
								if(td[i+1][j] == ""){
									td[i+1][j] = td[i][j];
									td[i][j] = "";
								}else if(td[i+1][j] == td[i][j]){
									td[i+1][j] += td[i][j];
									td[i][j] = "";
									j--;
								}
							}
						}
					break;
					case 37:
//						console.log("right")
						for(var i = 0;i < td.length;i++){
//							console.log(td[i-1])
							for(var j = 1;j < td[i].length;j++){
								if(td[i][j-1] == ""){
									td[i][j-1] = td[i][j];
									td[i][j] = "";
								}else if(td[i][j-1] == td[i][j]){
									td[i][j-1] += td[i][j];
									td[i][j] = "";
									j--;
								}
							}
						}
					break;
				}
				init();  // 将改变的数字体现在界面
			}
			document.onkeydown = function(e){
				e = e.which;
				if(e == 38 || e == 37 || e == 39 || e== 40){
					randoms(e)
				}
			}
		</script>
	</body>
</html>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值