我正在爲我在AS3中工作的遊戲創建AI。爲此,我需要能夠通過多次檢查來決定AI是否執行某項任務。Actionscript 3中的動態比較
我需要能夠存儲比較運算符(例如==)或整個比較(例如V1 == V2)。
我怎樣才能將它作爲一個變量存儲或允許類似的用法?
我正在爲我在AS3中工作的遊戲創建AI。爲此,我需要能夠通過多次檢查來決定AI是否執行某項任務。Actionscript 3中的動態比較
我需要能夠存儲比較運算符(例如==)或整個比較(例如V1 == V2)。
我怎樣才能將它作爲一個變量存儲或允許類似的用法?
v1 == v2
返回一個對象(一個布爾值),所以你可以用它來存儲它。
對於存儲操作,這不是(我認爲)任何OOP語言可以做...
在AS3中,你可以求助於eval
功能,但會影響性能,所以我建議你實現一個功能,爲你做那個 - >例如。在差僞代碼:
const EQUAL:int = 0;
const LESS_THAN:int = 1;
etc...
function compare(v1, v2, op):Boolean
switch(op)
case EQUAL
return v1 == v2
etc...
,因此會使用一個int變量儲存您的比較操作。
如果您正在使用ASC2進行編譯,請考慮內聯此函數。
我也建議你重新考慮你的AI的邏輯,如果你打算硬編碼了很多的具體情況:S(請忽略此位,如果事實並非如此)。
您想要了解關於constraint based programming的更多信息。由於我們正在談論AI,因此Prolog是這種編程的典型例子。從技術上講,存在用於解決這類問題的不同算法,其中大部分算法被稱爲 isfiability算法。以下是一些已知求解器的列表:http://en.wikipedia.org/wiki/Category:SAT_solvers
您在處理這些問題時可能需要使用一些構造,尤其是在它們隨時間演變時:State pattern。通過仔細建模你的情況,你可以避免重複的狀態重新計算。即例如,如果模型的某些特徵僅在特定條件成立時才被激活,那麼可以通過轉換到隱含該條件的真實性的狀態來對其進行建模。給你一個更具體的例子,假設你有一個系統,你有一個玩家角色和一天的時間。如果一天中的時間是night
,則該字符可以執行sleep
動作,否則由字符執行的動作是wonder around aimlessly
。然後,您可以創建狀態day
和night
,如果由遊戲環境輸入的話,它們都將具有功能characterAction
。遊戲循環在調用characterAction()
時不會意識到環境的狀態,但角色將執行正確的操作。
但它可能更有利於保存系統的狀態,說其定義狀態的所有變量的向量。當您添加更多變量時,後者縮放比例會更好。例如,您可以將遊戲模型定義爲可能的狀態轉換。底線,你需要開始做些什麼,並在實施時遇到問題時詢問更具體的例子。我不認爲這些好的解決方案僅限於我所提到的。他們很可能不是。
這似乎是最好的選擇。我很難編碼我的AI,僅僅是因爲它的一個小項目。對於一個更大的項目(具有一半複雜的AI),我會使用AI的腳本。 –