---
# System prepended metadata

title: 10/10 Arcade再進化-迷宮產生器(4)
tags: [2022 iThome 鐵人賽]

---

---
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)