当前位置: 首页 > news >正文

网上商城建设方案/哈尔滨优化网站方法

网上商城建设方案,哈尔滨优化网站方法,天津网站建设设计费用,公众号快速涨10000粉丝方法使用HTML,CSS和JavaScript制作一个简单的迷宫生成小代码。 迷宫生成有很多种算法,今天给大家展示的是钻孔法(道路延伸)。 1 首先将数组所有属性都设置成为墙。2 进行道路挖掘,在数组中进行道路属性值设置。每次随机选择点打桩&am…

使用HTML,CSS和JavaScript制作一个简单的迷宫生成小代码。

在这里插入图片描述

迷宫生成有很多种算法,今天给大家展示的是钻孔法(道路延伸)。

  • 1 首先将数组所有属性都设置成为墙。
  • 2 进行道路挖掘,在数组中进行道路属性值设置。每次随机选择点打桩,在打桩数据旁边进行延伸路径,向上、向下、向左或向右看前方两个方格。如果那不是通道,则延长道路,如果无法延长道路,此时从现有道路中随机选择点(但 X 和 Y 坐标偶数的点)并延长道路。
  • 3 重复步骤2的操作并用道路填满整个屏幕,完成迷宫。
    钻孔法的特点

算法的特点是遇到墙壁才会生成道路,如果存在道路无法通过的墙壁死胡同,就会在墙壁周围生产道路。由此可以看出,这种迷宫生成方法倾向于围绕起点生成通道。换句话说迷宫以起点,到终点目标的正确路径是最短路径。这样的生产方式小型迷宫没有问题,但是当你创建一个大迷宫时,答案就变得很单调了。另外,通道是随机弯曲的,直线很少,所以如果你创建一个大迷宫,它会看起来很乱很复杂。

html构成

<div style="margin-bottom:10px;">迷宫格子数<input id="sumSize" type="text" value="20" style="width:30px;"><button id="创建迷宫">创建迷宫</button>
</div>
<div id="zhtbs"></div>

墙壁生成Js算法

for (var i = 0; i < this.size; i++) {var row = [];this.box.push(row);for (var j = 0; j < this.size; j++) {// 第一行和最后一行是墙if (i === 0 || (i + 1) === this.size) {row.push(0);// 第一列和最后一列也是墙壁} else if (j === 0 || (j + 1) === this.size) {row.push(0);// 奇数行都是过路} else if (i % 2 === 1) {row.push(1);// 偶数行墙壁和路交替排列} else {// 墙壁和路row.push(j % 2);}}}
  • 第一行与最后一行全是墙壁

  • 第一列与最后一列全是墙壁

  • 奇数行都是路

  • 偶数行墙壁和路交替出现

道路生成算法(钻孔法)

  • 第一行与最后一行 不生成路
  • 不是偶数墙的不生成路
  • 设置所有需要钻孔方位置的钻孔方向都是在上方开始
  • 随机排列墙的方向,在墙的周围随机向一个方向进行钻孔打路
for (var r = 0; r < this.box.length; r++) {// 第一行与最后一行 生成if (r === 0 || (r + 1) === this.box.length) {continue;}// 生成有墙的行if (r % 2 === 1) {continue;}// 获得行var row = this.box[r];// 初始化行,上下左右 参数var direction = ['top', 'bottom', 'left', 'right'];if (r >= 4) {// 出了第一行,默认都是上direction = direction.slice(1);}for (var i = 0; i < row.length; i++) {//边缘不生成路if (i === 0 || (i + 1) === row.length) {continue;}// 获得处理墙if (i % 2 === 0) {// 随机排列墙的方向direction = this.shuffle(direction);// 随机向一个方向,生成路// 在随机方向上去掉墙壁生成路for (var j = 0; j < direction.length; j++) {if (direction[j] === "top") {if (this.box[r-1][i] === 1) {this.box[r-1][i] = 0;break;}}if (direction[j] === "left") {if (this.box[r][i-1] === 1) {this.box[r][i-1] = 0;break;}}if (direction[j] === "right") {if (this.box[r][i+1] === 1) {this.box[r][i+1] = 0;break;}}if (direction[j] === "bottom") {if (this.box[r+1][i] === 1) {this.box[r+1][i] = 0;break;}}}}}}

迷宫算法完整代码

<html>
<head><meta charset="UTF-8"><title>Maze</title><style>.maze {}.maze:after {width: 0;height: 0;content: "";clear: both;}.w {background-color: blue;width: 10px;height: 10px;padding: 0;margin: 0;float: left;}.p {background-color: white;width: 10px;height: 10px;padding: 0;margin: 0;float: left;}        .s, .e {background-color: yellow;width: 10px;height: 10px;padding: 0;margin: 0;float: left;}        </style>
<script></script>
<body><div style="margin-bottom:10px;">迷宫格子数<input id="sumSize" type="text" value="20" style="width:30px;"><button id="创建迷宫" onclick="onRun()">创建迷宫</button></div><div id="zhtbs"></div>
<script>
function zht(size){this.pagesum=size;this.size = (size % 2 === 0 ? size + 1 : size);this.box = [];this.$maze = document.querySelector("#zhtbs");this.ALGO = {STICK: 1};this.shuffle =function (o) {for(var j, x, i = o.length; i; j = Math.floor(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);return o;}this.show = function () {var snipet = '';for (var i = 0; i < this.size; i++) {for (var j = 0; j < this.size; j++) {if (i == 0 && j == 1) {//入口snipet += '<div class="p"></div>';}else if (i==(this.pagesum%2==0?this.pagesum:this.pagesum-1) &&  j == (this.pagesum%2==0?this.pagesum-1:this.pagesum-2)) {// 出口snipet += '<div class="p"></div>';} else if (this.box[j][i] === 0) {// 墙snipet += '<div class="w"></div>';} else {// 路snipet += '<div class="p"></div>';}}}this.$maze.innerHTML = snipet;this.$maze.style.height = (this.size * 10) + 'px';this.$maze.style.width  = (this.size * 10) + 'px';}this.create = function (options) {options = options || {};if (options.algorithm === this.ALGO.STICK) {this._createByStick();}this.show();}this._createByStick = function () {//初始化 墙与路生成this.box = [];for (var i = 0; i < this.size; i++) {var row = [];this.box.push(row);for (var j = 0; j < this.size; j++) {// 第一行和最后一行是墙if (i === 0 || (i + 1) === this.size) {row.push(0);// 第一列和最后一列也是墙壁} else if (j === 0 || (j + 1) === this.size) {row.push(0);// 奇数行都是过道} else if (i % 2 === 1) {row.push(1);// 偶数行墙壁和通道交替排列} else {// 墙壁和通道row.push(j % 2);}}}for (var r = 0; r < this.box.length; r++) {// 第一行与最后一行 生成if (r === 0 || (r + 1) === this.box.length) {continue;}// 生成有墙的行if (r % 2 === 1) {continue;}// 获得行var row = this.box[r];// 初始化行,上下左右 参数var direction = ['top', 'bottom', 'left', 'right'];if (r >= 4) {// 出了第一行,默认都是上direction = direction.slice(1);}for (var i = 0; i < row.length; i++) {//边缘不生成路if (i === 0 || (i + 1) === row.length) {continue;}// 获得处理墙if (i % 2 === 0) {// 随机排列墙的方向direction = this.shuffle(direction);// 随机向一个方向,生成路// 在随机方向上去掉墙壁生成路for (var j = 0; j < direction.length; j++) {if (direction[j] === "top") {if (this.box[r-1][i] === 1) {this.box[r-1][i] = 0;break;}}if (direction[j] === "left") {if (this.box[r][i-1] === 1) {this.box[r][i-1] = 0;break;}}if (direction[j] === "right") {if (this.box[r][i+1] === 1) {this.box[r][i+1] = 0;break;}}if (direction[j] === "bottom") {if (this.box[r+1][i] === 1) {this.box[r+1][i] = 0;break;}}}}}}}
}
function onRun(){
var size = parseInt(document.querySelector("#sumSize").value);
if (isNaN(size)) size = 20;
var z=new zht(size);z.create({algorithm: 1}); 
}
onRun();   
</script>
</body>
</html>

(此公众号纯技术分享,没有任何广告,只会发布一些我自己工作中会用到的一些问题)
在这里插入图片描述

http://www.lbrq.cn/news/1467487.html

相关文章:

  • 电商网站的支付接入该怎么做呢/seo建站还有市场吗
  • 微商怎么做自己的网站/seo排名工具提升流量
  • 投稿网站源码/推广形式
  • 网站获取访问者qq号码/网站建设报价方案
  • 网站的客服一般怎么做的/网络优化工程师证书
  • 邯郸公司网站建设/淘数据官网
  • 帮忙注册公司要多少钱/seo学校
  • 网站开发到上线需要多久/seo好学吗入门怎么学
  • 网站服务器如何做热备价/云搜索系统
  • 佛山外贸网站建设/键词优化排名
  • 网站推广公司成功的经典案例/seo快速排名优化
  • 网页设计学校网站/seo优化一般包括哪些
  • 关于网站开发的个人小结/人力资源培训与开发
  • 开个捕鱼网站怎么做/免费注册网站有哪些
  • 网站开发实习/三亚百度推广公司电话
  • 学做招投标的网站有哪些/上海小红书seo
  • 深圳网站建设流程/如何建立一个自己的网站啊
  • 蕲春做网站/网络营销理论基础有哪些
  • 建设网站是普通办公吗/windows优化大师是电脑自带的吗
  • j2ee 建设简单网站/推广普通话作文
  • 山东恒昆建设工程有限公司网站/免费有效的推广平台
  • 网站页面设计最宽可做多宽/互联网平台公司有哪些
  • 企业网站怎么优化/定制化网站建设
  • wordpress div属性/快速优化seo软件推广方法
  • 深圳东莞网站开发/优化设计
  • 做服装批发网站/汕头网站排名优化
  • 靠谱的做任务赚钱网站/搜索引擎营销的实现方法有哪些
  • 国内专门做旅游攻略的网站/香港百度广告
  • 企业网站素材/百度网页广告怎么做
  • 曲阜建设公司网站/seo教学网seo
  • Codeforces Round 1039 (Div. 2) A-C
  • Meta合成孔径波导全息术新进展,微美全息加速AI+AR全息技术融合稳步前行
  • UE5 动态扫描波
  • 微波(Microwave)与毫米波(Millimeter wave)简介
  • 什么是数据集成?和数据融合有什么区别?
  • 正向运动学(Forward Kinematics,简称FK)和逆向运动学(Inverse Kinematics,简称IK)