unity P D 過河遊戲智慧型幫助實現

2021-10-01 07:53:34 字數 3126 閱讀 5575

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 存放每一步的狀態,第一列表示農夫的狀態,第二列表示菜的狀態,第三列表示羊的狀態,第四列表示狐狸的狀態,...