html 2048小游戏【源码详解(一)】

本文介绍了2048游戏的界面设计,包括HTML结构、CSS样式和游戏规则,重点阐述了如何使用拆分思想构建游戏面板和游戏结束界面,以及如何通过CSS实现动态效果。
摘要由CSDN通过智能技术生成

导言

这里先讲一下2048小游戏的界面设计,包含结构和样式,主要是用拆分的思想进行。完整代码可以先看主页的上一篇。篇幅3500字。

游戏规则

游戏规则如下:

1.游戏开始时,棋盘上有两个数字方块,数字为2或4。
2.每次操作可以选择上、下、左、右四个方向进行滑动。
滑动时,所有方块会朝着滑动方向移动,如果两个相同数字的方块在滑动方向上紧挨着,
3.它们会合并成一个数字加倍的方块。
4.每次操作后,系统会在空白的位置随机生成一个数字方块,数字为2或4。
5.当棋盘上有一个方块的数字达到2048时,游戏胜利
6.如果棋盘被填满且无法再进行有效的滑动操作时,游戏结束。

思维工具

拆分思想、简化思想

游戏界面1-容器

用html编写游戏,梦的起点往往是从一个box(盒子/div)开始的,让我们一起起航到远方。
在这里插入图片描述

html结构

创建一个id为gameContainer的div容器作为游戏的界面。

<!-- 1. 游戏界面 -->
<div id="gameContainer"></div>

css样式

这里显示一个500px * 500px带边框的div,实际上个在后面是会自动按内容扩容,用到了下面这个属性,所以后面会去掉,具体可以参照主页完整代码。
display:inline-block; >>> 将元素显示为内联块级元素(也叫行内块级元素),即既具有内联元素的特性(可以在一行显示),又具有块级元素的特性(可以设置宽高、内外边距等)

					/* 1. 设置页面整体样式 */
			       body {
			            text-align: center;		// 将游戏界面居中
			            margin-top: 50px;
			        }
			                
			        /* 2. 设置游戏容器样式 */
			        #gameContainer {
			            margin-top: 50px;
			            display: inline-block;
						border: 1px solid red; //设置红色的边框
						width: 500px; 		
						height: 500px;
			        }

游戏界面2 -其他细节

游戏标题

html结构

<!-- 2. 游戏标题 -->
<h1>2048</h1>

css样式

游戏的标题样式,这里设置为字体50px,相当于加粗的效果,颜色设置为浅灰色。

/* 3. 标题样式的设置 */
h1 {
       font-size: 50px;
       color: #776e65; // 浅灰色
 }

游戏分数

html结构

设置一个id为score的div,初始化分数是0.

<!-- 3. 分数显示 -->
<div id="score">Score: 0</div>

css样式

这里颜色设计为浅灰色,和上面一样,尽可能保持统一的颜色会比较好看

/* 4.分数的样式设计 */
#score {
    font-size: 24px; //字体大小
    margin-bottom: 10px; //外边距,下外边距
    color: #776e65; //浅灰色
	 }

效果图

到这里已经阅读1000字了,小伙伴们坚持阅读也会让你们不断成长,加油,你是最棒的!
在这里插入图片描述

游戏面板容器

这里是游戏真正开始的界面,用于填充游戏元素。

html结构

<!-- 4. 游戏面板容器 -->
<div id="gridContainer"></div>

css样式

这里用拆分思想将游戏面板拆分为4行4列的游戏模块,具体实现如下。
1.首先设置容器的宽高为400px(像素)。
2.border:1px solid #bbada0;>>> 设置容器的边框样式为实线,宽度为1像素,颜色为浅灰,这里可以用16进制颜色表选取。
3.display:grid; >>>将容器的显示方式设置为网格布局
4.grid-template-columns:repeat(4,1fr);>>> 设置网格的列模板,重复4次1fr(等分比例),就是将容器分为4等分。这里可以看效果图。
fr 就是是一种 CSS 单位,用于设置网格布局中的分数比例。fr 表示分数单位(fraction unit),用于将可用空间按照比例划分
5.grid-gap:10px;>>>设置网格之间的间隙为10像素。
其他:设置背景颜色和内边距。

/*5. 游戏面板容器样式设计*/
					#gridContainer {
					    /* 设置容器宽度为400像素 */
					    width: 400px;
					    /* 设置容器高度为400像素 */
					    height: 400px;
					    /* 设置容器边框样式为实线,宽度为1像素,颜色为#bbada0 */
					    border: 1px solid #bbada0;
					    /* 设置容器为网格布局 */
					    display: grid;
					    /* 设置网格列模板,重复4次1fr(等分比例) */
					    grid-template-columns: repeat(4, 1fr);
					    /* 设置网格间隙为10像素 */
					    grid-gap: 10px;
					    /* 设置容器背景颜色为#faf8ef */
					    background-color: #faf8ef;
					    /* 设置容器内边距为10像素 */
					    padding: 10px;
					}

效果图

拆分思想将游戏面板拆分成四行四列。
这里已经阅读2000字了,在这里也和小伙伴们坚持学习,加油!
在这里插入图片描述

游戏结束界面

游戏结束容器

html结构

为游戏的结束设计一个容器,设置了一个id名为gameOverContainer的容器

<!-- 5. 游戏结束提示和重启按钮容器 -->
<div id="gameOverContainer">		
</div>

css样式

加载游戏界面,和开始游戏的时候不应该显示游戏结束的容器,所以这里display设置为none。

#gameOverContainer {
				/* 默认情况下隐藏容器 */
				display: none;
				/* 上边距为20像素 */
				margin-top: 20px;
			}

游戏提示结束界面

html结构

<div id="gameOverContainer">		
</div>

这是在游戏结束容器里面的代码,所以一起拿过来了,写过了上面那一行可以将他删掉。

<div id="gameOverContainer">
				<!-- 6. 游戏结束提示 -->
				<div id="gameOver">Game Over!</div>
				<!-- 7. 重启按钮 -->
				<button id="restartButton">Restart</button>
			</div>

css样式

#gameOver {
				/* 设置字体大小为36像素 */
				font-size: 36px;
				/* 设置字体颜色为#776e65 */
				color: #776e65;
				/* 底边距为10像素 */
				margin-bottom: 10px;
			}

重新开始按钮的设计

为了游戏结束后游戏的重新开始,这里设计了一个重新开始的按钮。

html结构

<!-- 7. 重启按钮 -->
<button id="restartButton">Restart</button>

css样式

设置背景颜色为棕色,字体为白色。

#restartButton {
				/* 设置字体大小为20像素 */
				font-size: 20px;
				/* 设置内边距为8像素顶部和底部,20像素左右 */
				padding: 8px 20px;
				/* 设置边框圆角为6像素 */
				border-radius: 6px;
				/* 设置背景颜色为#8f7a66 */
				background-color: #8f7a66;
				/* 设置字体颜色为白色 */
				color: #fff;
				/* 设置边框样式为无,即没有边框 */
				border: none;
				/* 设置光标样式为手型 */
				cursor: pointer;
			}

效果图

这里为了展示效果先把上面的游戏结束容器的display显示方式设置为none的这一行代码进行注释。
在这里插入图片描述
由于时间关系,这里就先写页面结构和样式部分的设计,重点掌握拆分思想。欢迎反馈和交流学习。

  • 29
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值