日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

canvas并查集画随机迷宫

發(fā)布時間:2025/3/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 canvas并查集画随机迷宫 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

之前學(xué)習(xí)不想交集合(并查集)的數(shù)據(jù)結(jié)構(gòu),看了很多大老用窗體畫出隨機迷宮,感覺挺震撼的,下心學(xué)習(xí)了一下。
這個過程想著不太復(fù)雜,就是做起來挺麻煩,需要自己一點點處理。大概步驟如下
1:定義好不想交集合的基本類和方法(search,union等)
2:數(shù)組初始化,每一個數(shù)組元素都是一個集合,值為-1
3:隨機查找一個格子(一維數(shù)據(jù)要轉(zhuǎn)換成二維,有點麻煩),在隨機找一面墻(也就是找這個格子的上下左右),還要判斷找的格子出沒出界。
4:判斷兩個格子是否在一個集合。如果在,則重新找,如果不在,那么把墻挖去
5:把墻挖去有點繁瑣,需要考慮奇偶判斷它那種墻,然后擦掉。(根據(jù)數(shù)組轉(zhuǎn)換成真實距離)
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 = [];//存放是否聯(lián)通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';//可選區(qū)域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);//要精確成整數(shù)var y=a

總結(jié)

以上是生活随笔為你收集整理的canvas并查集画随机迷宫的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。