2048小游戏:全面解析并提供HTML、CSS、JavaScript源代码
最编程
2024-08-15 10:29:08
...
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title> New Document </title>
<meta name="Generator" content="EditPlus">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
</head>
<style type="text/css">
*{
margin:0;
padding:0;
}
#zuiwaibian{/*最外边div设置*/
width:400px;
height:600px;
background-color:#fce6ce;
}
#caidan{/*上边菜单设置*/
width:100%;
height:150px;
margin-top:6px;
background-color:#a68c71;
/* 设置字体样式 */
font-size:50px;
text-align:center;
line-height:150px;
color:#fff;
}
#youxi{/*下边游戏界面设置*/
width:400px;
height:400px;
background:#c0af9d;
margin-top:10px;
}
.model{
float:left;
margin-left:8px;
margin-top:8px;
width:90px;
height:90px;
background-color:#cdc1b3;
border-radius:5px;
}
</style>
<body>
<div id="zuiwaibian">
<div id="caidan">0</div>
<div id="youxi">
<div id="a1" class="model"></div>
<div id="a2" class="model"></div>
<div id="a3" class="model"></div>
<div id="a4" class="model"></div>
<div id="b1" class="model"></div>
<div id="b2" class="model"></div>
<div id="b3" class="model"></div>
<div id="b4" class="model"></div>
<div id="c1" class="model"></div>
<div id="c2" class="model"></div>
<div id="c3" class="model"></div>
<div id="c4" class="model"></div>
<div id="d1" class="model"></div>
<div id="d2" class="model"></div>
<div id="d3" class="model"></div>
<div id="d4" class="model"></div>
</div>
</div>
</body>
</html>
<!--js代码-->
<!--定义数据以及函数-->
<script type="text/javascript">
//记录得分
var score=0;
//将16个格子的id存储在二维数组a中
//记录上
var a=[['a1','a2','a3','a4'],['b1','b2','b3','b4'],['c1','c2','c3','c4'],['d1','d2','d3','d4']];
//记录下
var b=[['d4','d3','d2','d1'],['c4','c3','c2','c1'],['b4','b3','b2','b1'],['a4','a3','a2','a1']];
//记录左
var c=[['d1','c1','b1','a1'],['d2','c2','b2','a2'],['d3','c3','b3','a3'],['d4','c4','b4','a4']];
//记录右
var d=[['a4','b4','c4','d4'],['a3','b3','c3','d3'],['a2','b2','c2','d2'],['a1','b1','c1','d1']];
var xx=[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]];
/*小方块对象,与放入盒子中的num*/
function create_num_color(kuai_object,num){
//var kaui_object;/*存放盒子对象*/
switch (num){
case 2://ok
//kaui_object=document.getElementById(kuai);
kuai_object.style.backgroundColor="#efe5db";
kuai_object.innerHTML="2";
kuai_object.style.color="#7a6d65";
kuai_object.style.fontSize="65px";
//kaui_object.style.fontFamily='STHupo';//字体
kuai_object.style.textAlign="center";
kuai_object.style.lineHeight="98px";
break;
case 4:
//kaui_object=document.getElementById(kuai);
kuai_object.style.backgroundColor="#eddcbe";
kuai_object.innerHTML="4";
kuai_object.style.color="#7a6d65";
kuai_object.style.fontSize="65px";
kuai_object.style.textAlign="center";
kuai_object.style.lineHeight="98px";
break;
case 8://ok
//kaui_object=document.getElementById(kuai);
kuai_object.style.backgroundColor="#f3b079";
kuai_object.innerHTML="8";
kuai_object.style.color="#ffffff";
kuai_object.style.fontSize="65px";
kuai_object.style.textAlign="center";
kuai_object.style.lineHeight="98px";
break;
case 16://ok
//kaui_object=document.getElementById(kuai);
kuai_object.style.backgroundColor="#f7925c";
kuai_object.innerHTML="16";
kuai_object.style.color="#ffffff";
kuai_object.style.fontSize="60px";
kuai_object.style.textAlign="center";
kuai_object.style.lineHeight="98px";
break;
case 32://ok
//kaui_object=document.getElementById(kuai);
kuai_object.style.backgroundColor="#f57656";
kuai_object.innerHTML="32";
kuai_object.style.color="#ffffff";
kuai_object.style.fontSize="60px";
kuai_object.style.textAlign="center";
kuai_object.style.lineHeight="98px";
break;
case 64://ok
//kaui_object=document.getElementById(kuai);
kuai_object.style.backgroundColor="#f4522c";
kuai_object.innerHTML="64";
kuai_object.style.color="#ffffff";
kuai_object.style.fontSize="60px";
kuai_object.style.textAlign="center";
kuai_object.style.lineHeight="98px";
break;
case 128://ok
//kaui_object=document.getElementById(kuai);
kuai_object.style.backgroundColor="#edce71";
kuai_object.innerHTML="128";
kuai_object.style.color="#7a6d65";
kuai_object.style.fontSize="45px";
kuai_object.style.textAlign="center";
kuai_object.style.lineHeight="98px";
break;
case 256://ok
//kaui_object=document.getElementById(kuai);
kuai_object.style.backgroundColor="#e6d151";
kuai_object.innerHTML="256";
kuai_object.style.color="#ffffff";
kuai_object.style.fontSize="45px";
kuai_object.style.textAlign="center";
kuai_object.style.lineHeight="98px";
break;
case 512://ok
//kaui_object=document.getElementById(kuai);
kuai_object.style.backgroundColor="#1200ff";
kuai_object.innerHTML="512";
kuai_object.style.color="#7a6d65";
kuai_object.style.fontSize="45px";
kuai_object.style.textAlign="center";
kuai_object.style.lineHeight="98px";
break;
case 1024:
//kaui_object=document.getElementById(kuai);
kuai_object.style.backgroundColor="#cc00ff";
kuai_object.innerHTML="1024";
kuai_object.style.color="#ffffff";
kuai_object.style.fontSize="35px";
kuai_object.style.textAlign="center";
kuai_object.style.lineHeight="98px";
break;
case 2048:
//kaui_object=document.getElementById(kuai);
kuai_object.style.backgroundColor="#000000";
kuai_object.innerHTML="2048";
kuai_object.style.color="#ffffff";
kuai_object.style.fontSize="35px";
kuai_object.style.textAlign="center";
kuai_object.style.lineHeight="98px";
break;
case 4096:
//kaui_object=document.getElementById(kuai);
kuai_object.style.backgroundColor="#000000";
kuai_object.innerHTML="4096";
kuai_object.style.color="#e504f3";
kuai_object.style.fontSize="35px";
kuai_object.style.textAlign="center";
kuai_object.style.lineHeight="98px";
break;
}
}
//随机生成数字函数(‘2’或‘4’)
function suiji(){
var flag_x=[];//定义一个空数组,记录空的小方块的x坐标
var flag_y=[];//定义一个空数组,记录空的小方块的y坐标
for (var i=0;i<4 ;i++ )//检查所有为空的小方块,并记录其下标
{
for (var j=0;j<4 ;j++ )
{
if(document.getElementById(a[i][j]).innerHTML==""){
flag_x.push(i);
flag_y.push(j);
}
}
}
if(flag_x.length!=0){//当一个空的小方块都没有时,则游戏结束
//alert("Game over");
//return;
//}else{
var r=[2,4];
var num_object=Math.floor(Math.random() * flag_x.length);
var object=document.getElementById(a[flag_x[num_object]][flag_y[num_object]]);
create_num_color(object,r[Math.floor(Math.random() * 2)]);
return;
}
}
/*清空小方块的内容*/
function qingkong(kuai_object){
kuai_object.style.backgroundColor="#cdc1b3";//空白时的颜色
kuai_object.innerHTML="";//清空数字
}
function update_score(num){
document.getElementById("caidan").innerHTML=num;
}
//左
function remove_zuo(x,y,n){
//alert(x);
//alert(x);
//alert(y);
n++;
if(x==0){
return remove_zuo(x+parseInt((y+1)/4),(y+1)%4,n);//
}
if(x>3){
return n;
}else{
var two=document.getElementById(c[x][y]);
var one=document.getElementById(c[x-1][y]);
if(one.innerHTML==""&&two.innerHTML!=""){//第二行不空,第一行空
create_num_color(one,parseInt(two.innerHTML));
qingkong(two);
return remove_zuo(x-1,y,n);//
}
if(one.innerHTML!=""&&two.innerHTML!=""){//两行都不等于空
if(one.innerHTML==two.innerHTML&&xx[x-1][y]==0){
xx[x-1][y]=1;
//score
score=score+2*two.innerHTML;
update_score(score);
create_num_color(one,2*two.innerHTML);
qingkong(two);
return remove_zuo(x+parseInt((y+1)/4),(y+1)%4,n);//
}
}
}
return remove_zuo(x+parseInt((y+1)/4),(y+1)%4,n);//
}
//上
function remove_shang(x,y,n){
//alert(x);
//alert(x);
//alert(y);
n++;
if(x==0){
return remove_shang(x+parseInt((y+1)/4),(y+1)%4,n);//
}
if(x>3){
return n;
}else{
var two=document.getElementById(a[x][y]);
var one=document.getElementById(a[x-1][y]);
if(one.innerHTML==""&&two.innerHTML!=""){//第二行不空,第一行空
create_num_color(one,parseInt(two.innerHTML));
qingkong(two);
return remove_shang(x-1,y,n);//
}
if(one.innerHTML!=""&&two.innerHTML!=""){//两行都不等于空
if(one.innerHTML==two.innerHTML&&xx[x-1][y]==0){
xx[x-1][y]=1;
//score
score=score+2*two.innerHTML;
update_score(score);
create_num_color(one,2*two.innerHTML);
qingkong(two);
return remove_shang(x+parseInt((y+1)/4),(y+1)%4,n);//
}
}
}
return remove_shang(x+parseInt((y+1)/4),(y+1)%4,n);//
}
//右
function remove_you(x,y,n){
//alert(x);
//alert(x);
//alert(y);
n++;
if(x==0){
return remove_you(x+parseInt((y+1)/4),(y+1)%4,n);//
}
if(x>3){
return n;
}else{
var two=document.getElementById(d[x][y]);
var one=document.getElementById(d[x-1][y]);
if(one.innerHTML==""&&two.innerHTML!=""){//第二行不空,第一行空
create_num_color(one,parseInt(two.innerHTML));
qingkong(two);
return remove_you(x-1,y,n);//
}
if(one.innerHTML!=""&&two.innerHTML!=""){//两行都不等于空
if(one.innerHTML==two.innerHTML&&xx[x-1][y]==0){
xx[x-1][y]=1;
//score
score=score+2*two.innerHTML;
update_score(score);