js实现
var game = {
data : [],
score : 0,
gamerunning : 1,
gameover : 0,
status : 1,
start : function(){
game.data = [];
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 n = Math.floor(Math.random()*4);
var m = Math.floor(Math.random()*4);
if(game.data[n][m] == 0){
var num = Math.random()>0.5?2:4
game.data[n][m] = num;
break;
}
}
},
dataView : function(){
for(var r = 0 ; r < 4 ;r++){
for(var c = 0; c < 4 ; c++){
var li = document.getElementById("c" + r +c);
if(game.data[r][c] != 0){
li.innerHTML = game.data[r][c];
li.className = "n" + game.data[r][c]
}
else{
li.innerHTML = "";
li.className = "";
}
}
}
var score = document.getElementById("score1");
score.innerHTML = game.score;
var tryagain = document.getElementById("try")
tryagain.onclick = function(){
game.start();
}
if(game.status == game.gameover){
document.getElementById("div3").style.display = "block";
document.getElementById("score2").innerHTML = game.score;
}
else{
document.getElementById("div3").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(r < 3){
if(game.data[r][c] == game.data[r+1][c]){
return false;
}
}
if(c < 3){
if(game.data[r][c] == game.data[r][c+1]){
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 = 0 ; r < 4 ;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 >-1 ;c--){
var nextc = game.getRightinRow(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;
}
}
},
getRightinRow : function(r,c){
for(var i = c-1 ; i > -1;i--){
if(game.data[r][i] != 0){
return i;
}
}
return -1;
},
moveTop : function(){
var before = game.data.toString();
for(var c = 0 ; c < 4 ;c++){
game.moveTopinRow(c);
}
var after = game.data.toString();
if(before != after){
game.randomNum();
if(game.isGameover()){
game.status = game.gameover;
}
game.dataView();
}
} ,
moveTopinRow : function(c){
for(var r = 0 ; r< 3 ;r++){
var nextr = game.getTopinRow(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;
}
}
},
getTopinRow : function(r,c){
for(var i = r+1 ; i < 4;i++){
if(game.data[i][c] != 0){
return i;
}
}
return -1;
},
moveBottom : function(){
var before = game.data.toString();
for(var c = 0 ; c <4 ;c++){
game.moveBottominRow(c);
}
var after = game.data.toString();
if(before != after){
game.randomNum();
if(game.isGameover()){
game.status = game.gameover;
}
game.dataView();
}
} ,
moveBottominRow : function(c){
for(var r = 3 ; r > -1 ;r--){
var nextr = game.getBottominRow(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;
}
}
},
getBottominRow : function(r,c){
for(var i = r-1 ; i > -1;i--){
if(game.data[i][c] != 0){
return i;
}
}
return -1;
}
}
game.start();
document.onkeydown = function(event){
var event = event || window.event
if(event.keyCode == 37){
game.moveLeft()
}
if(event.keyCode == 38){
game.moveTop()
}
if(event.keyCode == 39){
game.moveRight()
}
if(event.keyCode == 40){
game.moveBottom()
}
}
html+css
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style type="text/css">
*{
margin: 0;
padding: 0;
}
#div1{
width: 480px;
margin: 50px auto 20px;
font-size: 50px;
}
#score1{
font-size:36px;
color: pink;
line-height: 50px;
}
#score2{
font-size:36px;
line-height: 50px;
}
#div2 ul{
list-style: none;
width: 480px;
height: 480px;
background-color: pink;
margin: 0 auto;
border-radius:10px ;
}
li{
float: left;
width: 100px;
height: 100px;
background-color: antiquewhite;
margin:16px 0 0 16px ;
border-radius:8px ;
font-size: 50px;
text-align: center;
line-height:100px;
font-weight:bold ;
}
#div3{
position: absolute;
left: 0;
top: 0;
bottom: 0;
right: 0;
background-color:antiquewhite;
opacity: 0.9;
display: none;
color: #F65E3B;
font-weight:bold ;
}
#div4{
width: 480px;
margin: 300px auto;
text-align: center;
}
#div4 p{
font-size:50px;
}
.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}
</style>
</head>
<body>
<div id = "div1">score : <span id = "score1">0</span></div>
<div id="div2">
<ul>
<li id = "c00"></li>
<li id = "c01"></li>
<li id = "c02"></li>
<li id = "c03"></li>
<li id = "c10"></li>
<li id = "c11"></li>
<li id = "c12"></li>
<li id = "c13"></li>
<li id = "c20"></li>
<li id = "c21"></li>
<li id = "c22"></li>
<li id = "c23"></li>
<li id = "c30"></li>
<li id = "c31"></li>
<li id = "c32"></li>
<li id = "c33"></li>
</ul>
</div>
<div id = "div3">
<div id = "div4">
<p> GAME OVER!!! </p>
<p> score : <span id = "score2"></span></p>
<p id = "try"> TRY AGAIN</p>
</div>
</div>
<script src="js/js.js" type="text/javascript"></script>
</body>
</html>