前言
最近突然心血来潮想写一个网页小游戏,我看网上有很多人推荐写2048来练练手,遂开始写。目前为止,基本功能已经实现,只是没有添加相应的动画效果,待以后有机会补上(其实我就是动画这块太菜了 T_T)
前方长文预警!!!
游戏截图
项目结构
这个项目结构挺简单的,应该也都看得懂,在此仅对js文件夹进行描述,其余的就不再赘述啦
(main.js是入口文件,move.js主要就是一些移动的处理,support.js里是对移动块背景颜色和文字颜色的处理,后面要添加的动画效果也准备写在这个文件里)
主要功能
1.游戏初始化:新建游戏4×4的16宫格画布,随机格子上生成2或者4两个数字
2.格子的移动:先判断能否移动,移动后判断能否合并,合并后改变格子颜色和数字
3.新格子的生成:移动一次,就在剩余的空格子中随机生成一个2或者4
4.判赢:16宫格中合并出了“2048”则为游戏胜利
5.判输:16宫格中没有剩余空格子且不能再向任何方向移动则为游戏失败
分步代码
一、HTML结构
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>2048</title>
<script
src="http://code.jquery.com/jquery-3.3.1.min.js"></script>
<link rel="stylesheet" href="css/index.css">
</head>
<body>
<header>
<div class="left">
<span class="title">2048</span>
<p class="slogan_1">Play 2048 Game Online</p>
<p class="slogan_2">Join the numbers and get to the 2048 tile!</p>
</div>
<div class="right">
<p class="score-box">score<br />
<span id="score">669</span>
</p>
<button type="button" id="new-game">New Game</button>
</div>
</header>
<div id="grid-con">
<!-- 第一行 -->
<div class="grid-cell" id="grid-cell-0-0"></div>
<div class="grid-cell" id="grid-cell-0-1"></div>
<div class="grid-cell" id="grid-cell-0-2"></div>
<div class="grid-cell" id="grid-cell-0-3"></div>
<!-- 第二行 -->
<div class="grid-cell" id="grid-cell-1-0"></div>
<div class="grid-cell" id="grid-cell-1-1"></div>
<div class="grid-cell" id="grid-cell-1-2"></div>
<div class="grid-cell" id="grid-cell-1-3"></div>
<!-- 第三行 -->
<div class="grid-cell" id="grid-cell-2-0"></div>
<div class="grid-cell" id="grid-cell-2-1"></div>
<div class="grid-cell" id="grid-cell-2-2"></div>
<div class="grid-cell" id="grid-cell-2-3"></div>
<!-- 第四行 -->
<div class="grid-cell" id="grid-cell-3-0"></div>
<div class="grid-cell" id="grid-cell-3-1"></div>
<div class="grid-cell" id="grid-cell-3-2"></div>
<div class="grid-cell" id="grid-cell-3-3"></div>
</div>
<div class="mask"></div> <!-- 灰色遮罩层:游戏结束时随gameover框一并出现 -->
<div id="game-over">
Game Over!
</div>
<div id="game-win">
Congradulation!
</div>
<script src="js/main.js"></script>
<script src="js/move.js"></script>
<script src="js/support.js"></script>
</body>
</html>
HTML结构的主要思路为:利用网格布局将游戏画布的16宫格绘制出来,通过class定制样式,id定位到具体的格子以重绘格子样式。
网格布局的详细教程移步 ——> CSS网格布局(Grid)完全教程
二、CSS样式文件
* {
margin: 0;