--- tags: 2022 iThome 鐵人賽 title: 10/10 Arcade再進化-迷宮產生器(4) AUTHOR: --- # 進階的迷宮遊戲 >上次我們做出了二元樹迷宮的遊戲。 >但...你發現了? >我們只需要往下、往右走就能到達終點! >這實在有點蠢。讓我們改進這個問題吧! ## 本篇內容 以上篇遊戲為基礎 我們使用另一種迷宮產生方法做出`隨機生成`的迷宮遊戲 預覽: ![](https://i.imgur.com/M1UqNOB.gif) ### 主程式 大致上流程長這樣 ![](https://i.imgur.com/ucyhJVy.png) 接下來就為大家一一介紹副程式 ###### 與上篇文章重疊的部分會跳過 ### setup 在最上面新增這兩個方塊 ![](https://i.imgur.com/MSahvTS.png) 剩下的與上篇文章一樣 ### draw_path 隨機生成並繪製路徑 通過隨機取數的方式來決定路徑的方向 1 向左 / 2 向右 / 3 向上 / 4 向下 且經過判斷後才執行繪製路徑 如果該方向為邊界,就重新取數 ![](https://i.imgur.com/5rjqejp.png) 剩下的2、3、4都是相同邏輯 ![](https://i.imgur.com/dqXIo9P.png) ### go_backwards 路徑生成有機會走到四周都沒有空白的地方 這個時候就要讓它找出原本的路徑返回,尋找可以繼續生成路徑的地方 此為左邊的判斷程式 ![](https://i.imgur.com/tGzbniv.png) 剩下的 右/上/下 判斷方式相同 ![](https://i.imgur.com/13Lkgfk.png) ### fix_yellow_block 經過go_backwards的摧殘後 地圖上會殘留許多黃色方塊 如此圖: ![](https://i.imgur.com/CQKQCwj.png) 因此我們需要將黃色方塊換回道路 ![](https://i.imgur.com/aznC6sc.png) ### is_dead_end 判斷目前判斷格是否四周沒有地方可以生成路徑 回傳成立或不成立 因為條件太長,所以截圖注重於判斷往左邊可否生成 ![](https://i.imgur.com/2orNlSd.png) 剩下的往右/上/下判斷 (與上面清晰的部分相同) ![](https://i.imgur.com/NA50UsI.png) ### is_pass_through_wall 因為地圖的大小是15x15 因此邊界位於直欄0或15及橫排0或15的地方 我們只要將想要判斷的直欄或橫列放進這個副程式 便可以知道判斷格是否超出範圍 ![](https://i.imgur.com/gjNoIxc.png) ### is_map_complete 判斷地圖是否完成 並回傳成立或不成立 ![](https://i.imgur.com/FgWvOhK.png) ## 成品 ![](https://i.imgur.com/par6YxB.gif) ### [遊戲連結](https://arcade.makecode.com/S51563-68682-32832-40220)