2013-01-07 134 views
3

目標:允許最終用戶使用Java編寫將創建AI對象的[用於控制遊戲中的飛船隊列]的jython腳本。將Jython代碼轉換爲Java類

我希望用戶能夠將AI中的所有邏輯寫入.py文件,然後將該代碼轉換爲java對象。我希望在不使用Java反射的情況下執行此操作,並且每次需要時都不需要通過解釋器運行用戶的代碼。這樣做的關鍵就是讓代碼儘可能快地運行,因爲AI邏輯必須運行每個遊戲循環。

我見過Jython的__toJava__方法,但我真的不明白如何使用它或者如果它是我需要的。

我將非常感謝任何洞察到一個很好的解決我的問題,或知識__toJava__。我致力於Java和Jython,所以建議替代品不是生產性的:)

+1

任何原因,你不能使用jythonc也?如果「走得快」是一個目標,我不確定我是否會允許編寫腳本,但這是一個單獨的問題,我不知道你真的需要多快。 –

+1

我不能使用jythonc,因爲我不知道如何(鏈接是好的!),並且我在某處讀過它被棄用(?)通過一個很好的解決方案來解決我的問題,腳本不應該是速度問題,因爲一次我從腳本創建我的java對象,我可以重複使用它,而不是再次通過腳本。 – TLive

回答

1

您應該看看these ways以使用來自java應用程序的jython代碼。

您應該使用jython編寫代碼,並在Java應用程序中使用它,只需付出一點努力即可。

1

Jythonc已棄用,但無論如何這裏是old version with jythonc。像這樣的東西編譯:

jythonc --core --jar foo.jar foo.py 

另一個(未經測試)的解決辦法是寫你的類保存爲foo.py,在同一個文件夾中打開一個Jython外殼並鍵入

import foo 

這會自動將在該文件夾中創建一個foo $ py.class。

儘管Jython是一種很好的語言,但由於缺乏良好的打包工具,我使用Clojure可以很容易地將其與Leiningen進行java互操作。而且既然你要寫人工智能,使用lisp可能不是一個壞主意。

3

'jythonc'不再受支持。您可以使用Jython編譯:

jython 

>>> import compileall 
>>> compileall.compile_dir('directory/', force=True) 

單個文件:

>>> import py_compile 
>>> py_compile.compile('Building.py') 
+0

一切都很好,但請注意:http://bugs.jython.org/issue1672 – Paolo