原生js实现2048小游戏
2048小游戏,供大家参考,具体内容如下
首先2048小游戏离不开16个格子,我们通过html和css创建好对应的标签和样式,然后开始js逻辑
//一个盒子里面16个小div
2048小游戏,供大家参考,具体内容如下
首先2048小游戏离不开16个格子,我们通过html和css创建好对应的标签和样式,然后开始js逻辑
//一个盒子里面16个小div
设置对应的样式:(仅供参考)
#box{ width:450px; height:450px; background-color:brown; display:flex; flex-wrap:wrap; justify-content:space-evenly; border:1pxsolid#000; margin:100pxauto; border-radius:10px; } div>div{ margin-top:5px; width:100px; height:100px; border-radius:5px; background-color:bisque; text-align:center; line-height:100px; font-size:40px; }
效果如下:
然后真正的js部分真正开始了
先使用css选择器获取所有小格子的div
vardivs=document.querySelectorAll('[id==son]');
然后创建一个二维的数组来接收这16个小格子div的dom对象
vararr=[[],[],[],[]]; vara=0; for(vari=0;i<4;i++){ for(varj=0;j<4;j++){ arr[i][j]=divs[a]; a++; } }
这就形成了:i和j轴
这样就便于我们后面的移动操作
现在我们写一个在该16各种里随机产生一个随机数2和4填入一个空格子里,我们后面在调用!
functionsj(){//产生随机数 vara=Math.floor(Math.random()*4); varb=Math.floor(Math.random()*4); if(arr[a][b].innerHTML==""){ if(Math.random()>0.5){ arr[a][b].innerHTML=2; }else{ arr[a][b].innerHTML=4; } }else{//如果该格子不为空我们在执行函数 sj(); } }
第二个就是要判断游戏是否结束时的函数:当格子你所有的值都不为空的时候结束游戏!(后面在调用)
functionjs(){//游戏是否结束 varbool=true; for(vari=0;i<4;i++){ for(varj=0;j<4;j++){ if(arr[i][j].innerHTML==""){ bool=false; }else{ } } } if(bool){ alert("游戏结束"); for(vari=0;i<4;i++){ for(varj=0;j<4;j++){ arr[i][j]=null; } } } }
然后我们分别写如按下上下左右键执行的函数:
以按上键为例子:
①如果上面一个数为空,下面一个不为空上下值交换;
②如果上面一个为数字且和下面的相等,那么上面数*2下面的改值为空。其他情况不变。
functiondowntop(){//按上执行的函数 for(vari=0;i<4;i++){ for(varj=0;j<4;j++){ if(arr[i][j].innerHTML==""&&i<3&&arr[i+1][j].innerHTML!=""){ arr[i][j].innerHTML=arr[i+1][j].innerHTML; arr[i+1][j].innerHTML=""; downtop();//如果条件满足就执行 //不满足了就不会进入到if里了 }elseif(i<3&&arr[i][j].innerHTML!=""&&arr[i+1][j].innerHTML!=""&&arr[i][j].innerHTML==arr[i+1][j].innerHTML){ arr[i][j].innerHTML=2*arr[i+1][j].innerHTML; arr[i+1][j].innerHTML=""; }else{ } } } }
同理只需要改变(一些参数)就完成另外3个键的逻辑:
functiondownbottom(){ for(vari=3;i>0;i--){ for(varj=0;j<4;j++){ if(arr[i-1][j].innerHTML!=""&&i>0&&arr[i][j].innerHTML==""){ arr[i][j].innerHTML=arr[i-1][j].innerHTML; arr[i-1][j].innerHTML=""; downbottom(); } elseif(arr[i-1][j].innerHTML!=""&&arr[i][j].innerHTML!=""&&i>0&&arr[i-1][j].innerHTML==arr[i][j].innerHTML){ arr[i][j].innerHTML=2*arr[i-1][j].innerHTML; arr[i-1][j].innerHTML=""; } } } } functiondownleft(){ for(vari=0;i<4;i++){ for(varj=0;j<4;j++){ if(arr[i][j].innerHTML==""&&j<3&&arr[i][j+1].innerHTML!=""){ arr[i][j].innerHTML=arr[i][j+1].innerHTML; arr[i][j+1].innerHTML=""; downleft(); }elseif(j<3&&arr[i][j].innerHTML!=""&&arr[i][j+1].innerHTML!=""&&arr[i][j].innerHTML==arr[i][j+1].innerHTML){ arr[i][j].innerHTML=2*arr[i][j+1].innerHTML; arr[i][j+1].innerHTML=""; } } } } functiondownright(){ for(vari=0;i<4;i++){ for(varj=3;j>0;j--){ if(j>0&&arr[i][j].innerHTML==""&&arr[i][j-1].innerHTML!=""){ arr[i][j].innerHTML=arr[i][j-1].innerHTML; arr[i][j-1].innerHTML=""; downright(); }elseif(j>0&&arr[i][j].innerHTML!=""&&arr[i][j-1].innerHTML!=""&&arr[i][j].innerHTML==arr[i][j-1].innerHTML){ arr[i][j].innerHTML=2*arr[i][j-1].innerHTML; arr[i][j-1].innerHTML=""; } } } }
为不同的值添加不同的背景颜色:(可要可不要)
functioncolor(){ for(vari=0;i<4;i++){ for(varj=0;j<4;j++){ switch(arr[i][j].innerHTML){ case"":arr[i][j].style.backgroundColor="bisque";break; case"2":arr[i][j].style.backgroundColor="red";break; case"4":arr[i][j].style.backgroundColor="orange";break; case"8":arr[i][j].style.backgroundColor="yellow";break; case"16":arr[i][j].style.backgroundColor="green";break; case"32":arr[i][j].style.backgroundColor="blue";break; case"64":arr[i][j].style.backgroundColor="#000";break; case"128":arr[i][j].style.backgroundColor="aqua";break; case"256":arr[i][j].style.backgroundColor="pink";break; } } } }
然后整个窗口设置键盘监听事件:
上的keyCode:38
下的keyCode:40
左的keyCode:37
右的keyCode:39
没按一次
①调用对应方向的函数
②调用随机参数一个数的函数
③调用判断游戏是否结束的函数
④调用不同的值不同元素的函数
⑤游戏开始调用2次(默认有2个)
window.onkeydown=function(e){ switch(e.keyCode){ case37:downleft();sj();color();js();break;//左 case38:downtop();sj();color();js();break;//上 case39:downright();sj();color();js();break;//右 case40:downbottom();sj();color();js();break;//下 } } sj();//开局自动有默认的2个数 sj();
就完成了简单的2048小游戏!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。