2048制作

目前没有注释,后期会补上注释。

 css样式

*{
	margin: 0;
	padding: 0;
	font-family: Arial;
}
.socre{
	width: 100%;
	height: 150px;
	margin-top: 50px;
}
.socre p{
	text-align: center;
	line-height: 150px;
	font-size: 50px;
	font-weight: bold;
}
.socre p span{  
	color: #f00;
}
.bigbox{
	width: 480px;
	height: 480px;
	margin: 0 auto;
	background-color: #bbada0;
	border-radius: 0.6em;
}
.cell{
	width: 100px;
	height: 100px;
	background-color: #ccc0b3;
	color: #fff;
	border-radius: 0.2em;
	float: left;
	margin: 16px 0 0 16px;
	text-align: center;
	line-height: 100px;	
	font-size: 50px;	
	font-weight: bold;
}
.n2{background-color:#eee3da;color:#776e65}
.n4{background-color:#ede0c8;color:#776e65}
.n8{background-color:#f2b179}
.n16{background-color:#f59563}
.n32{background-color:#f67c5f}
.n64{background-color:#f65e3b}
.n128{background-color:#edcf72}
.n256{background-color:#edcc61}
.n512{background-color:#9c0}
.n1024{background-color:#33b5e5;font-size:40px}
.n2048{background-color:#09c;font-size:40px}
.n4096{background-color:#a6c;font-size:40px}
.n8192{background-color:#93c;font-size:40px}

.gameover{
	background-color: rgba(100,100,100,0.3);
	position: absolute;
	top: 0;
	left: 0;
	right: 0;
	bottom: 0;
	display: none;
}
.gameover div{
	width: 300px;
	height: 200px;
	background-color: #EDCF72;
	margin: 0 auto;
	position: absolute;
	top: 50%;
	left: 50%;
	margin-left: -150px;
	margin-top: -100px;
	border-radius:0.3em;
}
.gameover div p{
	text-align: center;
	line-height: 66px;
	font-size: 30px;
	font-weight: bold;
}
.gameover div p span{
	color: #f00;
}
.gameover div p a{
	text-decoration: none;
	background-color: #9f8d77;
	padding: 10px;
	border-radius:0.3em ;
}

 js代码


var game = {
	data : [],
	score : 0,
	gamerunning : 1,
	gameover : 0,
	status : 1,
	start : function(){
		game.data = [];
//		game.data = [
//			[0,0,0,0]
//			[0,0,0,0]
//			[0,0,0,0]
//			[0,0,0,0]
//		]
		game.score = 0;
		game.status = game.gamerunning;
		for(var r = 0;r < 4;r++){
			game.data[r] = [];
			for(var c = 0;c < 4;c++){
				game.data[r][c] = 0; 
			}
		}
		game.randomNum();
		game.randomNum();
		game.dataView()
	},
	
	randomNum : function(){
		for(;;){
			var r = Math.floor(Math.random()*4);
			var c = Math.floor(Math.random()*4);
			if(game.data[r][c] == 0){
				var num = Math.random() > 0.2?2:4;
				game.data[r][c] = num;
				break;
			}
		} 
	},
	
	dataView : function(){
		for(r = 0;r < 4;r++){
			for(var c = 0;c < 4;c++){
				var div = document.getElementById("c" + r + c);
				if(game.data[r][c] != 0){
					div.innerHTML = game.data[r][c];
					div.className = "cell n" + game.data[r][c];
				}else{
					div.innerHTML = "";
					div.className = "cell";
				}
			}
		}
		document.getElementById("score01").innerHTML = game.score;
		if(game.status == game.gameover){
			document.getElementById("score02").innerHTML = game.score;
			document.getElementById("gameover").style.display = "block"
		}else{
			document.getElementById("gameover").style.display = "none"
		}
	},

	isgameover : function(){
		for(var r = 0;r < 4;r++){
			for(var c = 0;c < 4;c++){
				if(game.data[r][c] == 0){
					return false;
				}
				if(c < 3){
					if(game.data[r][c] == game.data[r][c+1]){
						return false;
					}
				}
				if(r < 3){
					if(game.data[r][c] == game.data[r+1][c]){
						return false
					}
				}
			}
		}
		return true;
	},
	
	moveLeft : function(){
		var before = game.data.toString();
		for(var r = 0;r < 4;r++){
			game.moveLeftInRow(r);
		}
		var after = game.data.toString();
		if(before != after){
			game.randomNum();
			if(game.isgameover()){
				game.status = game.gameover
			}
			game.dataView();
		}

	},
	moveLeftInRow : function(r){
		for(var c = 0;c < 3;c++){
			var nextc = game.getNextInRow(r,c);
			if (nextc != -1) {
				if(game.data[r][c] == 0){
					game.data[r][c] = game.data[r][nextc];
					game.data[r][nextc] = 0;
					c--;
				}else if(game.data[r][c] == game.data[r][nextc]){
					game.data[r][c] *= 2;
					game.score += game.data[r][c];
					game.data[r][nextc] = 0;
					
				}
			}else{
				break;
			}
		}
	},

	getNextInRow : function(r,c){
		for(var i = c+1;i < 4;i++){
			if(game.data[r][i] != 0){
				return i;
				}
			}
				return -1;
	},

	moveRight : function(){
		var before = game.data.toString();
		for(var r = 3;r >= 0;r--){
			game.moveRightInRow(r);
		}
		var after = game.data.toString();
		if (before != after) {
			game.randomNum();
			if (game.isgameover()) {
				game.status = game.gameover;
			}
			game.dataView();
		}
	},
	
	moveRightInRow : function(r){
		for(var c = 3;c > 0;c--){
			var lastc = game.getLastInRow(r,c);
			if(lastc != -1){
				if(game.data[r][c] == 0){
					game.data[r][c] = game.data[r][lastc];
					game.data[r][lastc] =0;
					c++;
				}else if(game.data[r][c] == game.data[r][lastc]){
					game.data[r][c] *= 2;
					game.score += game.data[r][c];
					game.data[r][lastc] = 0;
					}
			
				}else{
					break;
			}
		}
	},

	getLastInRow : function(r,c){
		for(var a = c-1;a >= 0;a--){
			if (game.data[r][a] != 0) {
				return a;
			}
		}
		return -1
	},
	
	moveTop : function(){
		var before = game.data.toString();
		for(var c = 0;c < 4;c++){
			game.moveTopInCol(c);
		}
		var after = game.data.toString();
		if(before != after){
			game.randomNum();
			if(game.isgameover()){
				game.status = game.gameover;				
			}
			game.dataView();
		}
	},
	moveTopInCol : function(c){
		for(var r = 0;r < 3;r++){
			var nextr = game.getNextInCol(r,c);
			if(nextr != -1){
				if(game.data[r][c] == 0){
					game.data[r][c] = game.data[nextr][c];
					game.data[nextr][c] = 0;
					r--;
				}else if(game.data[r][c] == game.data[nextr][c]){
					game.data[r][c] *= 2;
					game.score += game.data[r][c];
					game.data[nextr][c] = 0;
				}
			}else{
				break;
			}
		}
	},
	
	getNextInCol : function(r,c){
		for(var b = r+1;b < 4;b++){
			if(game.data[b][c] !=0){
				return b;
			}
		}
		return -1;
	},
	
	moveDown : function(){
		var before = game.data.toString();
		for(var c = 3;c >= 0;c--){
			game.moveDownInCol(c);
		}
		var after = game.data.toString();
		if(before != after){
			game.randomNum();
			if(game.isgameover()){
				game.status = game.gameover;				
			}
			game.dataView();
		}
	},
	moveDownInCol : function(c){
		for(var r = 3;r > 0;r--){
			var lastr = game.getLastInCol(r,c);
			if(lastr != -1){
				if(game.data[r][c] == 0){
					game.data[r][c] = game.data[lastr][c];
					game.data[lastr][c] = 0;
					r++;
				}else if(game.data[r][c] == game.data[lastr][c]){
					game.data[r][c] *= 2;
					game.score += game.data[r][c];
					game.data[lastr][c] = 0;
				}
			}else{
				break;
			}
		}
	},
	
	getLastInCol : function(r,c){
		for(var d = r-1;d >= 0;d--){
			if(game.data[d][c] != 0){
				return d;
			}
		}
		return -1;
	}
	
	
	
	
	
	
	
	
	
}

	

game.start()

document.onkeydown = function(event){
	var event = event || window.event;
	if (event.keyCode == 37) {
		game.moveLeft()
	}
	if (event.keyCode == 39) {
		game.moveRight()
	}
	if (event.keyCode == 38) {
   		game.moveTop()
   	}
	if (event.keyCode == 40) {
   		game.moveDown()
   	}
}

HTML代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>2048</title>
		<link rel="shortcut icon" href="favicon.ico"/>
		<link rel="stylesheet" type="text/css" href="css/2048.css"/>
	</head>
	<body>
		<div class="socre">
			<p class="socre01">
				SOCRE: <span id="score01"> 0</span>
			</p>
		</div>
		
		
		<div class="bigbox">
			<!--第一行-->
			<div class="cell" id="c00"></div>
			<div class="cell" id="c01"></div>
			<div class="cell" id="c02"></div>
			<div class="cell" id="c03"></div>
			<!--第二行-->
			<div class="cell" id="c10"></div>
			<div class="cell" id="c11"></div>
			<div class="cell" id="c12"></div>
			<div class="cell" id="c13"></div>
			<!--第三行-->
			<div class="cell" id="c20"></div>
			<div class="cell" id="c21"></div>
			<div class="cell" id="c22"></div>
			<div class="cell" id="c23"></div>
			<!--第四行-->
			<div class="cell" id="c30"></div>
			<div class="cell" id="c31"></div>
			<div class="cell" id="c32"></div>
			<div class="cell" id="c33"></div>
		</div>
		<div class="gameover" id="gameover">
			<div>
				<p>GAME OVER!</p>
				<p>SOCRE: <span id="score02">0</span></p>
				<p><a href="">TRY ANAIN!</a></p>
			</div>
		</div>
		
		
		
		
		<script type="text/javascript" src="js/2048.js"></script>
	</body>
</html>

猜你喜欢

转载自blog.csdn.net/S_1978P1/article/details/82190863