github傳送門
狀態圖課件有
狀態圖(statechart diagram)是描述乙個實體基於事件反應的動態行為,顯示了該實體如何根據當前所處的狀態對不同的事件做出反應。
可以通過列舉型別表示不同的狀態
private
enum boataction
//p:船運載乙個牧師
//d:船運載乙個惡魔
//pp:船運載兩個牧師
//dd:船運載兩個惡魔
//pd:船運載乙個牧師,乙個惡魔
再加上左右岸的牧師、魔鬼人數以及船上人數等資訊,根據狀態圖確定下乙個動作是什麼。
public
static
automove automove =
newautomove()
;public
firstcontroller firstscene;
private
int fromdevilnum;
private
int frompriestnum;
private
int boatcoast;
// -1 -> left, 1 -> right.
//p:船運載乙個牧師
//d:船運載乙個惡魔
//pp:船運載兩個牧師
//dd:船運載兩個惡魔
//pd:船運載乙個牧師,乙個惡魔
private
enum boataction
private
bool isfinished =
true
;//動作是否執行完成
private
boataction nextstate;
//count執行步驟(0-4)
//0:初始 1:上了乙個人 2:上了2個人 3:移動船 4:下船
private
int count =0;
//num表示船上的人數
private
int num =
0;
沒有什麼演算法可言。。根據狀態圖做。可以用節點跟鍊錶做狀態圖,或者用鄰接矩陣表示狀態。為了方便直接用列舉型別。
//根據狀態圖設定nextstate
private
boataction
getnext()
else
if(fromdevilnum ==
2&& frompriestnum ==3)
//3p2db
else
if(fromdevilnum ==
1&& frompriestnum ==3)
//3p1db
else
if(fromdevilnum ==
2&& frompriestnum ==2)
//2p2db
else
if(fromdevilnum ==
3&& frompriestnum ==0)
//3db
else
if(fromdevilnum ==
1&& frompriestnum ==1)
//1p1db
else
if(fromdevilnum ==
2&& frompriestnum ==0)
//2db
else
if(fromdevilnum ==
1&& frompriestnum ==2)
//2p1db
else
if(fromdevilnum ==
2&& frompriestnum ==1)
//1p2db
else
if(fromdevilnum ==
1&& frompriestnum ==0)
//1db
else
if(fromdevilnum ==
3&& frompriestnum ==2)
//2p3db
else next = boataction.empty;
}else
else
if(fromdevilnum ==
1&& frompriestnum ==3)
//3p1d
else
if(fromdevilnum ==
2&& frompriestnum ==3)
//3p2d
else
if(fromdevilnum ==
0&& frompriestnum ==3)
//3p
else
if(fromdevilnum ==
1&& frompriestnum ==1)
//1p1d
else
if(fromdevilnum ==
2&& frompriestnum ==0)
//2d
else
if(fromdevilnum ==
1&& frompriestnum ==0)
//1d
else next = boataction.empty;
}return next;
}
public
void
move()
elseif(
(int
)nextstate >
0) num =1;
else num =0;
count++;}
debug.
log(
"next state is "
+ nextstate)
;//根據狀態自動操作
doaction()
; debug.
log(
"count:"
+ count)
; debug.
log(
"num:"
+ num);}
}
Unity學習之P D 過河遊戲智慧型幫助實現
根據之前設計好的動作分離版過河遊戲,我們進行乙個簡單的狀態圖ai實現。狀態圖老師已經給出 該狀態圖只記錄了遊戲過程中左岸的情況。p代表牧師,d代表魔鬼,b代表船。當船在右岸時不記錄。雙箭頭代表兩個狀態可以相互轉化。next.boat nowstatue if next.boat status.blr...
求幫助tyvj 1059 過河
過河 背景 background noip2005 提高組 第二道 描述 description 在河上有一座獨木橋,乙隻青蛙想沿著獨木橋從河的一側跳到另一側。在橋上有一些石子,青蛙很討厭踩在這些石子上。由於橋的長度和青蛙一次跳過的距離都是正整數,我們可以把獨木橋上青蛙可能到達的點看成數軸上的一串整...
人工智慧 農夫過河問題
一農夫帶著一頭狼,乙隻羊和乙個白菜過河,小船只能一次裝載農夫和一樣貨物,狼會吃羊,羊會吃白菜,只有農夫在時才安全。現欲讓所有物品包括農夫都安全過道河對岸,求最佳答案。用16 4的矩陣 a 16 4 存放每一步的狀態,第一列表示農夫的狀態,第二列表示菜的狀態,第三列表示羊的狀態,第四列表示狐狸的狀態,...