Tree Search(樹狀搜尋)

一、什麼是 Tree Search(樹狀搜尋)? 在人工智慧(AI)與演算法中,許多問題都可以表示成一棵樹(圖一): 起點(A) / | \ B C D /|\ | / \ E F G H I J 每個節點(Node)代表一種狀態(State)。 例如: 迷宮中的位置 棋局的盤面 路徑規劃中的城市 遊戲中的決策 搜尋演算法的目的: 從起點找到目標節點(Goal Node) 二、Breadth First Search (BFS) 核心思想 先搜尋離起點最近的節點。 一層一層往外擴展。 Level 0: A Level 1: B C D Level 2: E F G H I J 搜尋順序: A B C D E F G H I J 圖一結果: A → B → C → D → E → F → G → H → I → J 使用資料結構 Queue(佇列) FIFO: First In First Out 先進先出 例如: Queue: A 取出A 加入B,C,D Queue: B,C,D BFS特性 優點 如果邊權重相同: BFS一定找到最短路徑。 缺點 需要大量記憶體。 假設每個節點有10個子節點: 深度5: 10^5 = 100000 需要保存很多節點。 時間複雜度 O(V + E) V = Vertex(節點數) E = Edge(邊數) 三、Depth First Search (DFS) 核心思想 一路往下走到底。 不能走才回頭。 A | B | E 然後: A | B | F 搜尋順序 圖一結果: A B E F G C H D I J 使用資料結構 Stack(堆疊) LIFO Last In First Out 後進先出 例如: push(B) push(C) push(D) pop() => D DFS特性 優點 記憶體需求小。 只需保存: 目前路徑 即可。 缺點 可能找到很差的解。 例如: A ├── Goal └── 巨大子樹 DFS可能先跑完整個巨大子樹。 時間複雜度 O(V+E)...

Scratch 3 猜拳遊戲(Rock Paper Scissors Game)

猜拳遊戲是很多人都會玩的遊戲,猜拳的規則如下:
  • 出拳時可以出剪刀(Scissor)、石頭(Rock)、布(Paper)。
  • 石頭勝剪刀、剪刀勝布、布勝石頭。
  • 兩人對戰。
  • 猜拳時需喊口令。
可見下圖(此圖取自維基百科)


Scratch積木程式先備知識:
變數(Variable)、亂數(Random number)、角色(Sprite)、造型(Costume)、廣播(Broadcast)的使用。


遊戲製作步驟(底下程式積木僅供參考,設計方式不是只有一種。)
步驟一:下載圖檔
可用 Google 尋找,但要注意版權,此文所用石頭、剪刀、布的圖檔取自 https://iconarchive.com/show/windows-8-icons-by-icons8.html

步驟二:建立 Human 角色
按下角色的貓臉(右上角有加號)圖示,選擇繪圖,角色名稱為 Human

在造型的頁面,點選貓臉(右上角有加號)圖示,選擇上傳

選擇的石頭、剪刀、布的圖檔
此時,Human角色的造型如圖:

更改造型的順序,讓
  • 造型 1 為剪刀
  • 造型 2 為表布
  • 造型 3 為表石頭

步驟三:建立 Computer 角色
在 Human 角色上按下右鍵,點選複製,將角色命名為 Computer


步驟四:修改 Computer 角色造型
可任意修改 Computer 角色的造型,本文是用繪圖裡的填滿工具來改變 Computer 角色的石頭、剪刀、布的顏色

更改造型的順序,讓
  • 造型 1 為剪刀
  • 造型 2 為表布
  • 造型 3 為表石頭

步驟五:建立變數
建立電腦出拳的 ComHand 變數,以及玩家出拳的 HumHand 變數。

在此範例會使用變數的數字來表示出了什麼拳:
  • 數字 1 代表剪刀
  • 數字 2 代表布
  • 數字 3 代表石頭

步驟六:設計 Human 角色積木程式


步驟七:設計 Computer 角色積木程式

步驟八:設計背景畫面
此部分筆者設計四個背景畫面:遊戲進行中( Normal )、玩家勝利( YouWin )、玩家輸了( YouLose )、平手( Draw )。

步驟九:在背景設計判斷輸贏積木程式

此部分的程式邏輯為:

步驟十:試玩遊戲(https://scratch.mit.edu/projects/413785684/)

遊戲操作方式:
  • 按下 r, s, p 開始猜拳
  • 按下 r 出石頭
  • 按下 s 出剪刀
  • 按下 p 出布

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

If you like this post, please click the ads on the blog or buy me a coffee. Thank you very much.

這個網誌中的熱門文章