canvas并查集画随机迷宫

举报
bigsai 发表于 2021/02/02 22:53:58 2021/02/02
【摘要】 之前学习不想交集合(并查集)的数据结构,看了很多大老用窗体画出随机迷宫,感觉挺震撼的,下心学习了一下。 这个过程想着不太复杂,就是做起来挺麻烦,需要自己一点点处理。大概步骤如下 1:定义好不想交集合的基本类和方法(search,union等) 2:数组初始化,每一个数组元素都是一个集合,值为-1 3:随机查找一个格子(一维数据要转换成二维,有点麻烦),在随机找一面墙(也...

之前学习不想交集合(并查集)的数据结构,看了很多大老用窗体画出随机迷宫,感觉挺震撼的,下心学习了一下。
这个过程想着不太复杂,就是做起来挺麻烦,需要自己一点点处理。大概步骤如下
1:定义好不想交集合的基本类和方法(search,union等)
2:数组初始化,每一个数组元素都是一个集合,值为-1
3:随机查找一个格子(一维数据要转换成二维,有点麻烦),在随机找一面墙(也就是找这个格子的上下左右),还要判断找的格子出没出界。
4:判断两个格子是否在一个集合。如果在,则重新找,如果不在,那么把墙挖去
5:把墙挖去有点繁琐,需要考虑奇偶判断它那种墙,然后擦掉。(根据数组转换成真实距离)
6:最终得到一个完整的迷宫。
js的代码如下:

<!DOCTYPE html>
<html>
  <head> <title>MyHtml.html</title> </head> <body>
  <canvas id="mycanvas" width="600px" height="600px"></canvas> </body>
  <script type="text/javascript"> var aa=14; var chess = document.getElementById("mycanvas"); var context = chess.getContext('2d'); //  var context2 = chess.getContext('2d'); // context.strokeStyle = 'yellow'; var tree = [];//存放是否联通 var isling=[];//判断是否相连 for(var i=0;i<aa;i  ){ tree[i]=[]; for(var j=0;j<aa;j  ){ tree[i][j]=-1;//初始值为0 } }  for(var i=0;i<aa*aa;i  ){ isling[i]=[]; for(var j=0;j<aa*aa;j  ){ isling[i][j]=-1;//初始值为0 } } function drawChessBoard(){//绘画 for(var i=0;i<aa 1;i  ){ context.strokeStyle='gray';//可选区域 context.moveTo(15 i*30,15);//垂直方向画15根线,相距30px; context.lineTo(15 i*30,15 30*aa); context.stroke(); context.moveTo(15,15 i*30);//水平方向画15根线,相距30px;棋盘为14*14; context.lineTo(15 30*aa,15 i*30); context.stroke(); } } drawChessBoard();//绘制棋盘 // var mymap=new Array(36); // for(var i=0;i<36;i  ) // {mymap[i]=-1;} function getnei(a)//获得邻居号  random { var x=parseInt(a/aa);//要精确成整数 var y=a

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54

文章来源: bigsai.blog.csdn.net,作者:Big sai,版权归原作者所有,如需转载,请联系作者。

原文链接:bigsai.blog.csdn.net/article/details/80776313

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。