Download presentation
Presentation is loading. Please wait.
1
Chapter 8 遊戲人工智慧
2
本章重點 移動型遊戲AI 行為型遊戲AI 策略型遊戲AI
3
移動型遊戲AI 人工智慧就是我們常聽到的AI (Artificial Intelligence),主要目的是要讓電腦本身可以依循著某些法則來模擬出類似人類般的思考與預測能力,並結合電腦具有快速數學運算能力的優點,創造出電腦在各方面的有效應用。
4
追逐移動 凡是在遊戲中會移動的物體,事實上幾乎都牽扯到移動型的遊戲AI,像是遊戲中怪物追逐或者躲避玩家,以及電腦角色的移動都是移動型AI的例子。
5
追逐移動 以電腦怪物追逐玩家的例子來看看追逐移動基本的演算法: if(怪物X>玩家X) 怪物X--; else 怪物X++;
if(怪物Y>玩家Y) 怪物Y--; 怪物Y++;
6
修改怪物追逐玩家演算法 依照怪物生命值的多寡來決定是否追逐 追逐方向正確性的機率: if(怪物HP>200) {
p=rand()%3; if(p>0) if(怪物X>玩家X) 怪物X--; else 怪物X++; if(怪物Y>玩家Y) 怪物Y--; 怪物Y++; }
7
範例:三隻小鳥追逐飛機
8
全域變數宣告 紀錄三隻小鳥的貼圖座標
9
MyPaint 依實際滑鼠游標的位置(x,y) 設定飛機的貼圖座標(nowx,nowy) 並進行飛機的貼圖
10
MyPaint (續) 進行小鳥追逐移動座標計算及貼圖動作
11
Exercise 12 下載並改寫ch23_01.cpp程式,將小鳥改為5隻,追逐飛機的機率改為2/5。 專案名稱為『學號_13』
(例: _13) 編譯及執行無誤後,使用ftp將『學號_13.cpp』上傳至 的EX13目錄下,帳號:student5,密碼:student5
12
人工智慧理論 類神經網路 以多個連結處理器負責不同單元的處理,模擬人類大腦思考與學習能力的人工智慧理論。
13
基因演算法 利用模擬自然界物競天澤的進化原理,對於問題產生最佳化解決方案的人工智慧理論。
14
模糊邏輯 以一種判斷推理(if-else)的方式來產生最佳猜測的決定,有別於一般以數學運算為基礎的人工智慧理論 。
15
躲避移動 以電腦怪物躲避玩家的例子來看看躲避移動基本的演算法: if(怪物X>玩家X) 怪物X++; else 怪物X--;
if(怪物Y>玩家Y) 怪物Y++; 怪物Y--;
16
模式移動 怪物移動模式 追逐 隨機 躲避 怪物強 怪物與玩家一樣強 玩家強
17
行為型遊戲AI 行為型遊戲AI主要是關於電腦角色本身的判斷思考,而後產生對應行為的AI。在設計行為型的遊戲AI時,通常我們會利用到一連串的if-else判斷、數學運算,或者一些資料結構的概念。
18
遊戲中怪物行為的例子 假設某一個怪物在對戰時具有以下幾種行為 普通攻擊 施放攻擊魔法 使盡全力攻擊 補血 逃跑
19
模擬怪物在對戰時的行為模式 if(生命值 > 20) //生命值大於20 { if(rand()%10 != 1) //普通攻擊
else //施放攻擊魔法 } else //生命值小於20 switch(rand()%5) case 0: break; case 1: case 2: //使盡全力攻擊 case 3: //補血 case 4: //逃跑
20
電腦角色的思考與行為 玩家部份下達攻擊指令 對戰訊息顯示
21
迷宮出口搜尋 在迷宮出口搜尋的過程當中,電腦必須對於接下來該往那一個方向移動做思考判斷。
在迷宮搜尋問題中,除了下一時刻移動目的的判斷之外,電腦角色還必須能夠對於走過的迷宮路徑做記錄
22
在迷宮中移動搜尋出口的範例程式,其中用到了行為型AI及地圖拼接的概念,並利用堆疊(stack)資料結構來儲存搜尋迷宮時所經過的每個迷宮方格編號。
23
迷宮拼接貼圖 以一個一維陣列來定義迷宮內容
24
迷宮拼接貼圖 出口
25
在定義迷宮陣列時,我們將代表牆的陣列元素值設為0,其原因是因為這樣可以很容易的利用下面的判斷式來判斷某一方格是否可通過:
if(mapIndex[編號]) //可通過,元素值為1或2或3 else //不可通過,元素值為0
26
迷宮搜尋規則
27
堆疊結構的使用 11 14 8 2 14 8 2 末端指標 末端指標 加入編號11 新堆疊 原堆疊
28
底下以圖示說明從記錄搜尋路徑堆疊中刪除方格編號的動作及其內容的變化
14 8 2 11 14 8 2 末端指標 末端指標 刪除元素 新堆疊 原堆疊
29
策略型遊戲AI 最常見運用策略型AI的遊戲便是棋盤式遊戲。這類型的遊戲通常電腦必須依目前的狀況來判斷所有可走的棋步與可能的獲勝狀況,並在每一回合計算盤面電腦或者玩家的可能獲勝機率,以決定出一個最佳的走法。
30
求得所有獲勝組合 範例中使用了10x10大小的五子棋盤,底下先以圖示說明棋盤上可能獲勝的組合並計算這些組合的總數:
31
水平方向上的獲勝組合數:6 x 10 = 60 1.水平方向上的獲勝組合 … 共 10列
32
垂直方向上的獲勝組合數:6 x 10 = 60 2.垂直方向上的獲勝組合 共10行 1 2 6
33
3.正對角方向上的獲勝組合 正對角方向上的獲勝組合數:6 + ( 5 + 4 + 3 + 2 + 1 ) x 2 = 36 1種組合
2種組合 3種組合 4種組合 5種組合 6種組合
34
4.反對角方向上的獲勝組合 反對角方向上的獲勝組合數:6 + ( 5 + 4 + 3 + 2 + 1 ) x 2 = 36 6種組合
5種組合 4種組合 3種組合 2種組合 1種組合 反對角方向上的獲勝組合數:6 + ( ) x 2 = 36
35
建立與使用獲勝表 行編號 列 編 號
36
計算棋格獲勝分數 1.在可達成連線的獲勝組合上擁有越多棋子的棋格分數值越高。 獲勝組合中已放置2顆棋子
37
獲勝組合中已放置3顆棋子 獲勝組合中已放置4顆棋子
38
下圖是當獲勝組合中已填入兩顆棋子,對於未被對手佔走棋格位置以及被對走佔走棋格位置的兩種情況在獲勝分數設定上的比較:
對手棋子
39
2.依棋格所在位置上可達成連線的獲勝組合總數與進行分數加總
簡單的利用一個5x5大小的棋盤來解釋這樣的計算方式: 1 2 3 4
40
全域變數宣告 儲存玩家與電腦的棋子圖案 儲存棋盤上所有棋格的狀態 玩家獲勝表 電腦獲勝表
41
函式宣告
42
起始函式
43
InitGame
44
InitGame (續)
45
WndProc
46
WndProc (續)
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.