Unity學習之P D 過河遊戲智慧型幫助實現

2021-10-01 22:43:14 字數 3352 閱讀 6015

根據之前設計好的動作分離版過河遊戲,我們進行乙個簡單的狀態圖ai實現。

狀態圖老師已經給出:

該狀態圖只記錄了遊戲過程中左岸的情況。p代表牧師,d代表魔鬼,b代表船。當船在右岸時不記錄。雙箭頭代表兩個狀態可以相互轉化。

next.boat = nowstatue;

if (next.boat == status.blring ||

next.boat == status.brling ||

next.boat == status.lose ||

next.boat == status.win || boatsize() != 0)

else

else if (next.boat == status.bright &&

leftpriests.count == 2 &&

leftdevils.count == 2)

else if (next.boat == status.bright &&

leftpriests.count == 3 &&

leftdevils.count == 2)

else if (next.boat == status.bright &&

leftpriests.count == 3 &&

leftdevils.count == 1)

else if (next.boat == status.bleft &&

leftpriests.count == 3 &&

leftdevils.count == 2)

else if (next.boat == status.bright &&

leftpriests.count == 3 &&

leftdevils.count == 0)

else if (next.boat == status.bleft &&

leftpriests.count == 3 &&

leftdevils.count == 1)

else if (next.boat == status.bright &&

leftpriests.count == 1 &&

leftdevils.count == 1)

else if (next.boat == status.bleft &&

leftpriests.count == 2 &&

leftdevils.count == 2)

else if (next.boat == status.bright &&

leftpriests.count == 0 &&

leftdevils.count == 2)

else if (next.boat == status.bleft &&

leftpriests.count == 0 &&

leftdevils.count == 3)

else if (next.boat == status.bright &&

leftpriests.count == 0 &&

leftdevils.count == 1)

else if (next.boat == status.bleft &&

leftpriests.count == 2 &&

leftdevils.count == 1)

else if (next.boat == status.bleft &&

leftpriests.count == 0 &&

leftdevils.count == 2)

else if (next.boat == status.bleft &&

leftpriests.count == 1 &&

leftdevils.count == 1)

}

while (queue.count > 0)

return temp;

}queue.dequeue();

if (temp.pos)

}if (temp.ld > 0)

}if (temp.ld > 0 && temp.lp > 0)

}if (temp.lp > 1)

}if (temp.ld > 1)}}

else

}if (temp.rd > 0)

}if (temp.rd > 0 && temp.rp > 0)

}if (temp.rd > 1)

}if (temp.rp > 1)}}

}return null;

}

最後,更新gui,以便正確提示輸出即可

void ongui()

;style.normal.textcolor = new color(0, 0, 0);

buttonstyle = new guistyle("button")

;if (gui.button(new rect (screen.width/2 - 50 , screen.height- 50, 100, 40), "reset", buttonstyle))

if (status == 1)

else if (status == 2)

gui.button(new rect(screen.width/2 - 150 , 30, 400, 40), tips, style);

if (gui.button(new rect(screen.width/2 - 300 , 30, 100, 40), "tips", buttonstyle))

}

最後,我們更新gui,從而能夠正確提示即可

void ongui()

;style.normal.textcolor = new color(0, 0, 0);

buttonstyle = new guistyle("button")

;if (gui.button(new rect (screen.width/2 - 50 , screen.height- 50, 100, 40), "reset", buttonstyle))

if (status == 1)

else if (status == 2)

gui.button(new rect(screen.width/2 - 150 , 30, 400, 40), tips, style);

if (gui.button(new rect(screen.width/2 - 300 , 30, 100, 40), "tips", buttonstyle))

}

unity之小遊戲

歡迎來到我們的狗刨網,我們今天主要做了三個小遊戲,分別是打磚塊,滾動的盒子和 一 首先來看第乙個小遊戲 打磚塊 public gameobject wall void start for int i 0 i 10 i for int j 0 j 10 j instantiate wall,new v...

unity之遊戲特效

運動軌跡常常用於表現 的揮舞效果,在提高速度感的同時又能讓玩家看清楚招式動作,所以是常見的一種格鬥特效。unity中可以直接使用trailrender來實現該效果。運動模糊就是保留前幾幀影像,形成一定的重影模糊效果,從而突出速度感。配合慢鏡頭使用往往能很好地表現運動高潮效果。unity中是通過mot...

Unity賽車遊戲之移動

這個賽車遊戲真是讓我費勁腦汁啊。尤其是寫這種系統化的東西。目前漂移還沒找到更好的演算法,不過基本的移動還是可以做到的。別看就光是個移動,其實也是很費事的。unity給了個對於賽車系統很好的碰撞元件wheelcollider.把這個給四個輪子一套就好了,這個元件能調節一些汽車的相關引數,神馬懸掛系統,...