2010-08-31 28 views
1

我想編寫一個應用程序,它可以模擬在線遊戲中的玩家。如何模仿在線遊戲中的玩家

遊戲簡介:這是一個戰略,在那裏你可以:

  • 訓練你的軍隊(你必須有足夠的資源,然後單擊設備,單擊列車)
  • 建造建築物(礦山,軍械庫,房屋,...)
  • 攻擊敵人(選擇單位,選擇一個敵人,點擊攻擊)建築物之間
  • 運輸資源
  • 做研究(經濟,軍事,TECHNOLOGIC,...)

這是一個簡單的列表,只是一個例子。主要的是,你必須做很多點擊,如果你想提前...

我已經有'導航'部分的應用程序(我使用了Watin庫 - http://watin.sourceforge.net/)。這意味着,我可以用高水平的對象和操縱它們,例如:

Soldiers soldiers = Navigator.GetAllSoldiers(); 
soldiers.Move(someLocation); 

現在我願意回答大家的下一步 - 寫一種人工智能,它可以模擬我的遊戲風格。爲此,我有兩個想法(我也不喜歡他們的):

  • 登入遊戲,然後按照一堆如果在一個循環語句(檢查是否有人攻擊我,檢查我可以建立一些東西,檢查是否可以攻擊某人,循環)
  • 設計一種腳本語言併爲其編寫一個編譯器。這樣我就可以編寫簡單的腳本並運行它們(Login(); CheckForAnAttack(); BuildSomething(); ...)

任何其他想法?

PS:有些人可能會認爲這是作弊行爲,可能是這樣,但我把它看作一個學習項目,它永遠不會被髮布或重新發布。

+6

當你完成這個項目時,你能寫一個模仿Jon Skeet在StackOverflow上的應用嗎? – 2010-08-31 17:59:06

+1

爲什麼要設計自己的語言和編譯器?只需實現LUA或類似的東西。 – You 2010-08-31 18:01:15

+0

根據您所談論的遊戲,可能會有現有的工具允許這樣做。 – 2010-08-31 18:02:19

回答

3

如果策略不太複雜,一堆if語句是最好的選擇。但是,這種解決方案不能很好地擴展。

製作腳本語言(或者像現在這樣稱爲域名特定的語言)並不會給你帶來太多的收益。你不會有其他人創建AI代理嗎?你可以更好地使用你的編程語言。

如果策略涉及更多,您可能需要查看貝葉斯信任網絡或決策圖。他們善於以結構清晰的方式在不確定的環境中尋找最佳的行動。如果你按照這些條款搜索google,你會發現很多信息和庫可供使用。

1

聽起來像你想要一個有限狀態機。我使用它們在編碼機器人方面取得了不同程度的成功。根據你在玩的遊戲,你可能會更好地編碼一個學習的AI,但這聽起來像你很簡單,不需要那麼複雜。
不要創建一種新語言,只需創建一個可以從狀態機調用的函數庫即可。

1

首先,我必須指出,這個項目(僅用於教育目的)對於一個人來說在一段合理的時間內完成太大了。但是如果你想讓人工智能模仿你的個人遊戲風格,想到的另一個選擇是神經網絡:你玩很多遊戲(真的很多),記錄你所做的所有動作,並將這些數據提供給這樣的網絡,如果一切順利,AI應該和你一樣玩。但恐怕這只是你不會喜歡的第三個想法,因爲需要花費大量的時間來完善它。

+1

Sheesh ...神經網絡當然不是唯一的*方式來實現這一目標。它不像您認爲構建或訓練NN那麼容易。 – 2010-09-01 00:41:26

1

大多數策略遊戲AI都使用「分層」方法,這與您已經描述的方式大致相同:定義相對獨立的操作域(即決定要研究的內容大多獨立於尋路),然後創建一個AI層來處理該域。然後有一個「頂層」AI層指導中間層執行任務。

這些中間層各自如何工作(以及您的「常規」層如何工作)可以分別確定。您可能想出了一些對「研究內容」層(基於您的偏好)而言過於僵硬和直截了當的問題,但您可能需要更復雜的「常規」層方法(可能需要指導和響應其他層)。

1

你有背後的源代碼?如果沒有,這將是一種艱難的追蹤每個CPU你的位置(你的電腦在你的情況)正在對抗。你將不得不開發某種可以做到這一點的插件,因爲從它的聲音來看,你正在處理某種類型的RTS;這需要評估許多不同CPU之間的許多不同位置場景。

如果你想模擬你的動作,你可以很容易地使用一些WinAPI來跟蹤你的鼠標。你也可以在玩遊戲時記錄你的屏幕(這可能不會有太大的幫助,但如果你有足夠的決心可能會有幫助)。

說實話,你試圖做的事對你正在玩的遊戲類型來說幾乎是不可能的。你似乎還沒有考慮到這一點。編程是一項有用的技能,但這不是魔術。

看看麻省理工學院Battlecode的一些資料(如果你能找到的話)。從編程的角度來看,這可能是你的衚衕。

+1

編程可以是魔術,如果你做錯了! – fredley 2010-09-01 08:09:42

+0

哈哈...Touché! – 2010-09-01 08:55:35