html css的小游戏,HTML+CSS+JavaScript 2048小游戏

HTML代码:

score: 0

GAME OVER!!!

score:

TRY AGAIN!

CSS样式:

*{

padding: 0;

margin: 0;

font-family: Arial;

}

.score01{

width: 580px;

font-size: 50px;

font-weight: bold;

margin: 100px auto 0;

}

#score01,#score02{

color: red;

}

.box{

width: 580px;

height: 580px;

background-color: #b7aaaf;

border-radius: 16px;

margin: 0 auto;

}

.cell{

width: 120px;

height: 120px;

background-color: #ccc2bf;

border-radius: 8px;

margin: 20px 0 0 20px;

float: left;

color: white;

text-align: center;

line-height: 120px;

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}

.gameover{

position: absolute;

top: 0;

bottom: 0;

left: 0;

right: 0;

background-color: rgba(0,0,0,0.3);

display: none;

}

.gameover p{

width: 400px;

height: 200px;

background-color: #fff;

border-radius: 10px;

font-size: 36px;

font-weight: bold;

text-align: center;

line-height: 66px;

position: absolute;

top: 50%;

left: 50%;

margin-top: -100px;

margin-left: -200px;

}

.gameover a{

background-color: #9f8d77;

color: white;

padding: 10px;

border-radius: 8px;

text-decoration: none;

}

JavaScript代码:

var game={

data:[],

score:0,

gamerunning:1,

gameover:0,

status:1,

//游戏开始

start:function(){

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;

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.5?2:4;

game.data[r][c]=num;

break;

}

}

},

//将数组里的数据显示到页面中

dataView:function(){

for(var 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.moveNextInRow(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.data[r][nextc]=0;

game.score+=game.data[r][c];

}

}else{

break;

}

}

},

moveNextInRow:function(r,c){

for(var i=c+1;i<4;i++){

if(game.data[r][i]!=0){

return i;

}

}

return -1;

},

//上移

moveUp:function(){

var before=game.data.toString();

for(var c=0;c<4;c++){

game.moveUpInCol(c);

}

var after=game.data.toString();

if(before!=after){

game.randomNum();

if(game.isgameover()){

game.status=game.gameover;

}

game.dataView();

}

},

moveUpInCol:function(c){

for(var r=0;r<3;r++){

var nextr=game.moveNextInCol(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.data[nextr][c]=0;

game.score+=game.data[r][c];

}

}else{

break;

}

}

},

moveNextInCol:function(r,c){

for(var i=r+1;i<4;i++){

if(game.data[i][c]!=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>0;c--){

var prec=game.movePreInRow(r,c);

if(prec!=-1){

if(game.data[r][c]==0){

game.data[r][c]=game.data[r][prec];

game.data[r][prec]=0;

c++;

}else if(game.data[r][c]==game.data[r][prec]){

game.data[r][c]*=2;

game.data[r][prec]=0;

game.score+=game.data[r][c];

}

}else{

break;

}

}

},

movePreInRow:function(r,c){

for(var i=c-1;i>=0;i--){

if(game.data[r][i]!=0){

return i;

}

}

return -1;

},

//下移

moveDown:function(){

var before=game.data.toString();

for(var c=0;c<4;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 prer=game.movePreInCol(r,c);

if(prer!=-1){

if(game.data[r][c]==0){

game.data[r][c]=game.data[prer][c];

game.data[prer][c]=0;

r++;

}else if(game.data[r][c]==game.data[prer][c]){

game.data[r][c]*=2;

game.data[prer][c]=0;

game.score+=game.data[r][c];

}

}else{

break;

}

}

},

movePreInCol:function(r,c){

for(var i=r-1;i>=0;i--){

if(game.data[i][c]!=0){

return i;

}

}

return -1;

},

}

game.start();

document.οnkeydοwn=function(event){

var event=event ||window.event;

if(event.keyCode==37){

game.moveLeft();

}else if(event.keyCode==38){

game.moveUp();

}else if(event.keyCode==39){

game.moveRight();

}else if(event.keyCode==40){

game.moveDown();

}

}

6e3dac3dd95cd374824b7c7f4b169b58.png

85aa11b0b7f2be72ad7e5d3126f1f003.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值