[数字华容道] Html+css+js 实现小游戏

效果图

代码预览

在线预览地址

代码示例

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>数字华容道</title>
<style>
h1 {
text-align: center;
} .box {
border: 1px solid #cfcfcf;
margin: 0 auto;
width: 322px;
padding: 20px;
border-radius: 20px;
} .fun {
display: flex;
justify-content: space-between;
} td {
width: 100px;
height: 100px;
text-align: center;
background-color: #f1c385;
user-select: none;
} .current {
background-color: #fff !important;
transition: all .3s;
} #error {
color: red;
}
</style>
</head>
<body>
<div class="box">
<h1>数字华容道</h1>
<p><strong>规则:</strong>移动方块依次出现1、2、3、4、5、6、7、8就可通关!不能对角线移动,不能跳格子移动。只能相邻上下或左右</p>
<hr />
<div class="fun">
<div><span>计次:</span><span id="num">0</span></div>
<div><span>提示:</span><span id="error"></span></div>
<div><span>功能:</span><button id="reset">重开</button></div>
</div>
<hr />
<table border="1">
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
<tr>
<td>4</td>
<td>5</td>
<td>6</td>
</tr>
<tr>
<td>7</td>
<td>8</td>
<td class="current"></td>
</tr>
</table>
</div>
<script>
const step = document.getElementById('num');
const error = document.getElementById('error');
const seed = [1, 2, 3, 4, 5, 6, 7, 8];
// 随机数组
const shuffle = (array) => {
for (let i = array.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[array[i], array[j]] = [array[j], array[i]];
}
return array;
}
// 检查结果
const check = () => {
let flag = true;
const tds = document.querySelectorAll('td');
for (let i = 0; i < tds.length - 1; i++) {
let td = tds[i];
if (i + 1 !== parseInt(td.innerText)) {
flag = false;
}
}
if (flag) {
error.innerText = '恭喜你通关啦!';
}
}
// 更新 td 数据
const init = () => {
const data = shuffle(seed);
const tds = document.querySelectorAll('td');
for (let i = 0; i < tds.length - 1; i++) {
let td = tds[i];
td.innerText = data[i];
td.className = ''
}
error.innerText = '';
step.innerText = 0;
tds[tds.length - 1].className = 'current'
tds[tds.length - 1].innerText = ''
}
init()
document.getElementById('reset').addEventListener('click',()=>{
init();
});
// 监听点击事件,移动方块处理
document.querySelector('table').addEventListener('click', (event) => {
const target = event.target;
const current = document.querySelector('.current'); const {
x: cx,
y: cy
} = current.getBoundingClientRect();
const {
x: tx,
y: ty
} = target.getBoundingClientRect();
const w = Math.abs(cx - tx);
const h = Math.abs(cy - ty);
if ((cx === tx || ty === cy) && (w < 200 && h < 200)) {
if (target.nodeName === 'TD' && target !== current) {
const innerText = target.innerText;
target.classList = 'current';
target.innerText = '';
// 当前空白块
current.innerText = innerText
current.classList.remove('current');
// 更新步骤
let num = step.innerText || 0;
num++;
step.innerText = num;
error.innerText = '';
check();
}
} else {
error.innerText = '不能这样哦';
}
})
</script>
</body>
</html>

[数字华容道] Html+css+js 实现小游戏的更多相关文章

  1. 使用html+css+js实现弹球游戏

    使用html+css+js实现弹球游戏 效果图: 代码如下,复制即可使用: <!doctype html> <head> <style type="text/c ...

  2. pixi.js 微信小游戏 入手

    pixi是什么?一款h5游戏引擎 优点:简单简洁性能第一 缺点:大多数用的国产三大引擎,pixi资料少,工具少, 为什么学,装逼 用pixi开发小游戏行吗? 行.但要简单处理下 下载官网上的 weap ...

  3. JS写小游戏(一):游戏框架

    前言 前一阵发现一个不错的网站,都是一些用html5+css+js写的小游戏,于是打算学习一番,写下这个系列博客主要是为了加深理解,当然也有一些个人感悟,如果英文好可以直接Click Here. 概述 ...

  4. 例子:js超级玛丽小游戏

    韩顺平_轻松搞定网页设计(html+css+javascript)_第34讲_js超级玛丽小游戏_学习笔记_源代码图解_PPT文档整理 采用面向对象思想设计超级马里奥游戏人物(示意图) 怎么用通过按键 ...

  5. three.js 微信小游戏

    最近在 https://classroom.udacity.com/courses/cs291 学习了一些 3D 引擎和 three.js 的知识 把 three.js 弄到微信小游戏里,先随便跑一跑 ...

  6. js消除小游戏(极简版)

    js小游戏极简版 (1) 基础布局 <div class = "box"> <p></p> <div class="div&qu ...

  7. JS扫雷小游戏

    HTML代码 <title> 扫雷 </title> <!-- ondragstart:防拖拽生成新页面 oncontextmenu:屏蔽右键菜单--> <b ...

  8. 用原生js写小游戏--Flappy Bird

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 【JS入门小游戏】01-骰子游戏

    01-骰子游戏 游戏出自Udemy的JS课程中提到的一个游戏,课程主要是对JS部分进行详细的从0开始的讲解,本篇文章是对整个游戏的分析,包括HTMK,CSS和JS,也主要对JS进行刨析. 游戏链接:h ...

  10. 使用JS制作小游戏贪吃蛇

    先看效果图: 过程如下: 1.首先创建一张画布地图<div class="map"> </div>: 2.创建食物的自调用函数 (function (){ ...

随机推荐

  1. C++ 面试必备:常见 C++ 面试题汇总及详细解析

    C++作为一门重要的编程语言,其在面试中常常是热门的考察对象.本文将会介绍一些常见的C++面试题,帮助C++面试者避免很多不必要的困惑和迷惑.每个问题都有相对应的答案,以便各位同学快速查阅. C++和 ...

  2. Docker 11 数据卷

    由来 Docker 是将应用和环境打包成一个镜像. 这样,数据就不应该保存在容器中,否则容器删除,数据就会丢失,有着非常大的风险. 为此,容器和主机之间需要有一个数据共享技术,使得在 Docker 容 ...

  3. oracle database recover database (下篇)

    1. recover database 恢复级别一共三个:recover database > recover tablespace > recover datafile ,最高级别 da ...

  4. redis 简单整理——复制的原理[二十三]

    前言 简单介绍一下复制的原理. 正文 在从节点执行slaveof命令后,复制过程便开始运作,下面详细介绍建立 复制的完整流程. 1)保存主节点(master)信息. 执行slaveof后从节点只保存主 ...

  5. js 使用flow

    前言 what is flow?我想是的,很多人都没有接触过,的确,他是一个新的项目,是的facebook开发的东西,一般还是可以的,有必要去学习一下,在react还是比较重要的. 它做的一件事叫做静 ...

  6. 高云1N1开发板高云gowin软件使用教程

    国产FPGA是最近几年起来的产品,具有性价比高特点.高云FPGA,很多用户都用在LED,电机控制,PLC设备上. 开发板子采用GW1N-LV1QN48C6/I5 FPGA器件.具有低功耗,瞬时启动,高 ...

  7. 【笔记】Oracle列转行unpivot&行转列 PIVOT

    unpivot 说明:将表中多个列缩减为一个聚合列(多列转多行) 语法:unpivot(新列名 for 聚合列名 in (对应的列名1-列名n )) 写到了一个力扣的题,发现这个unpivot函数还没 ...

  8. 一文搞懂 SAE 日志采集架构

    简介: 本文将着重介绍了 SAE 提供了多种日志采集方案,以及相关的架构,场景使用特点,点击下文,立即查看吧- 作者:牛通(奇卫)   日志,对于一个程序的重要程度不言而喻.无论是作为排查问题的手段, ...

  9. 阿里云 EMAS Serverless 重磅发布

    简介: EMAS Serverless 是阿里云提供的基于Serverless技术的一站式后端开发平台,为开发者提供高可用.弹性伸缩的云开发服务,包含云函数.云数据库.云存储.静态网站托管等功能,可用 ...

  10. OpenYurt 深度解读:如何构建 Kubernetes 原生云边高效协同网络?

    作者 | 郑超 导读:OpenYurt 是阿里巴巴开源的云边协同一体化架构,与同类开源方案相比,OpenYurt 拥有可实现边缘计算全场景覆盖的能力.在之前的一篇文章中,我们介绍了 OpenYurt ...