赞
踩
最近在学前端,趁热找几个小游戏练练手。
2048游戏规则不再过多描述,这里主要用到了html,css,JavaScript相关知识.
代码来源:https://blog.csdn.net/bs775926015/article/details/115447514
每一个方块就是一个div标签,由于div标签属于块级元素,其默认是垂直排列。想要达到中间的效果。这17个div标签需要有一个父类最为背景框,其余16个子元素在内部排序。这里使用了弹性布局,相比于浮动来说,更加快捷方便。而button属于行内块元素,通过让其转为块级元素实现以上排列。
补充:浮动布局主要用于解决多个块元素共存于一行的问题。虽然浮动可以解决多个块元素共存一行的问题,但是也会有不好的影响。如脱标
html主要代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <link rel="stylesheet" href="c2048.css"> </head> <body> <div id="box"> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> </div> <button id="rebutton" onclick="restart()">重新开始 </button> <script src="j2048.js"></script> </body> </html>
css代码如下:
#box{ width: 500px; height: 500px; background-color: #BBADA0; border-radius: 0.5em; margin: 50px auto; margin-bottom: 20px; display: flex; justify-content: space-evenly; flex-wrap: wrap; } /* 后代选择器 */ #box div{ width: 100px; height: 100px; background-color: #CDC1B4; border: 1px solid transparent; border-radius: 10px; margin-top: 10px; font-size: 50px; font-weight: bold; text-align: center; line-height: 100px; } #rebutton{ width: 70px; height: 30px; background-color: hsl(64, 60%, 52%); display: block; border: 1px solid transparent; border-radius: 10px; margin: auto; }
数字的显示和变换主要是利用了元素的innerHTML来实现获取对象内容 或 向对象插入内容的功能;
首先:创建 4*4 数组,用于存放16个子div元素,
var divs= document.querySelectorAll("#box>div");
var arr = [[],[],[],[]];
var num=0;
for(var i = 0;i <arr.length;i++){
for(var j = 0;j <arr.length;j++){
arr[i][j] = divs[num];
num++;
}
}
后续的操作主要就是对这个数组内的div元素进行修改
// 在4*4的随机位置产生数字2或4 ,出现比率是1:4 function rand(){ var x=Math.floor(Math.random()*4); var y=Math.floor(Math.random()*4); if(arr[x][y].innerHTML == ""){ arr[x][y].innerHTML = Math.random() > 0.2 ? 2 : 4; }else{ rand(); } } //判断是否游戏结束函数:(1)、数组数组是否已满 (2)相邻元素是否相同 function end(){ var bool=true; for(var i = 0;i <arr.length;i++){ for(var j = 0;j <arr.length;j++){ if(arr[i][j].innerHTML == "" ){ bool = false; } } } if(bool){ cheak(); }else{ rand(); } } function cheak(){ var bool = true; for(var i = 0;i < arr.length-1 ;i++){ for(var j = 0;j< arr.length-1;j++){ if(arr[i][j].innerHTML == arr[i][j+1].innerHTML || arr[i][j].innerHTML == arr[i+1][j].innerHTML || arr[i+1][j].innerHTML == arr[i+1][j+1].innerHTML || arr[i][j+1].innerHTML == arr[i+1][j+1].innerHTML ){ bool = false; } } } if(bool){ alert("游戏结束!") } } //游戏重新开始的函数 function restart(){ for(var i = 0;i <arr.length;i++){ for(var j = 0;j <arr.length;j++){ arr[i][j].innerHTML = ""; } } bgcolor(); rand(); rand(); } //设置背景颜色 function bgcolor(){ for(var i = 0;i <arr.length;i++){ for(var j = 0;j <arr.length;j++){ switch(arr[i][j].innerHTML){ case '2': arr[i][j].style.backgroundColor = "#EEE4DA" ;break; case '4': arr[i][j].style.backgroundColor = "#EDE0C8" ;break; case '8': arr[i][j].style.backgroundColor = "#F2B179" ;break; case '16': arr[i][j].style.backgroundColor = "#F59563" ;break; case '32': arr[i][j].style.backgroundColor = "#F67C5F" ;break; case '64': arr[i][j].style.backgroundColor = "#F65E3B" ;break; case '128': arr[i][j].style.backgroundColor = "#EDCF72" ;break; case '256': arr[i][j].style.backgroundColor = "#EDCC61" ;break; case '512': arr[i][j].style.backgroundColor = "#EDC850" ;break; case '1024': arr[i][j].style.backgroundColor = "yellowgreen" ;break; case '2048': arr[i][j].style.backgroundColor = "perple" ;break; default: arr[i][j].style.backgroundColor = "#CDC1B4" ;break; } } } } //上下左右按下执行的函数 function downright(){ for(var i = 0;i <4;i++){ for(var j = 0;j <4;j++){ if( j<3&&arr[i][j].innerHTML !=""&& arr[i][j+1].innerHTML==""){ arr[i][j+1].innerHTML = arr[i][j].innerHTML; arr[i][j].innerHTML=""; downright(); }else if(j<3&&arr[i][j].innerHTML !=""&& arr[i][j].innerHTML == arr[i][j+1].innerHTML){ arr[i][j+1].innerHTML *=2; arr[i][j].innerHTML =""; } } } } function downleft(){ for(var i = 0;i <4;i++){ for(var j = 0;j <4;j++){ if( j>0&&arr[i][j].innerHTML !=""&& arr[i][j-1].innerHTML==""){ arr[i][j-1].innerHTML = arr[i][j].innerHTML; arr[i][j].innerHTML=""; downleft(); }else if(j>0&&arr[i][j].innerHTML !=""&& arr[i][j].innerHTML == arr[i][j-1].innerHTML){ arr[i][j-1].innerHTML *=2; arr[i][j].innerHTML =""; } } } } function downfoot(){ for(var i = 0;i <4;i++){ for(var j = 0;j <4;j++){ if( i<3&&arr[i][j].innerHTML !=""&& arr[i+1][j].innerHTML==""){ arr[i+1][j].innerHTML = arr[i][j].innerHTML; arr[i][j].innerHTML=""; downfoot(); }else if(i<3&&arr[i][j].innerHTML !=""&& arr[i][j].innerHTML == arr[i+1][j].innerHTML){ arr[i+1][j].innerHTML *=2; arr[i][j].innerHTML =""; } } } } function downup(){ for(var i = 0;i <4;i++){ for(var j = 0;j <4;j++){ if( i>0&&arr[i][j].innerHTML !=""&& arr[i-1][j].innerHTML==""){ arr[i-1][j].innerHTML = arr[i][j].innerHTML; arr[i][j].innerHTML=""; downup(); }else if(i>0&&arr[i][j].innerHTML !=""&& arr[i][j].innerHTML == arr[i-1][j].innerHTML){ arr[i-1][j].innerHTML *=2; arr[i][j].innerHTML =""; } } } }
游戏开始流程:
//游戏开始产生2个随机数
rand();
rand();
bgcolor();
//上下左右的监听事件
window.onkeydown = function(e){
switch(e.keyCode){
case 37 : end(); downleft();bgcolor(); break;//左
case 38 : end(); downup();bgcolor(); break;//上
case 39 : end(); downright();bgcolor(); break;//右
case 40 : end(); downfoot(); bgcolor(); break;//下
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。