Convertir un .py en .jar via Jython pour Robocode
Bonjour.
À l'école, j'apprends le Java. Mais, je préfère Python, de plus il me permet de changer.
Je vais devoir programmer un petit robot pour Robocode (multiplateforme). Malheureusement, il ne comprend que le Java. J'ai donc envisagé d'utiliser Jython qui permet de transformer du code Python (seulement Python2 pour l'instant) en bytecode Java et d'utiliser les classes Java.
J'ai converti le code Java du robot par défaut en Python :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #!/usr/bin/python3
# -*-coding:Utf-8 -*
from Robocode import *
class Default(Robot):
def run():
"""run: Default's default behavior"""
while True:
ahead(100)
turnGunRight(360)
back(100)
turnGunRight(360)
def onScannedRobot(e):
"""onScannedRobot: What to do when you see another robot"""
fire(1)
def onHitByBullet(e):
"""onHitByBullet: What to do when you're hit by a bullet"""
turnLeft(90 - e.getBearing()) |
Habitué à tous convertir en class (je n'ai jamais fait de jar), j'ai cherché à faire la même chose. J'ai donc adapté un script pour remplacer jythonc (visiblement pas disbonible avec jython2.5, que j'ai installé via les dépots d'Ubuntu).
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| #!/usr/bin/python3
# -*-coding:Utf-8 -*
from java.io import *
import _py_compile
import imp as pyimp
import org.python.core.imp as jimp
import os.path
import sys
#Show info
def jcompile_usage():
print ("Usage $:jython jcompile.py")
print ("file.py gets compiled to file$py.class")
#Compile .py to .class
def jcompile_compile( fname ):
#java file object
jfile = File( fname )
#Get module name
mname = _py_compile.getModuleName( jfile )
#Compile and get bytes
bytes = jimp.compileSource( mname, jfile )
#Dump bytecode into a file
jimp.cacheCompiledSource( os.path.abspath( fname ), os.path.abspath( "./" + mname + "$py.class" ), bytes )
if len(sys.argv) != 2 :
jcompile_usage(); #insufficient arguments
sys.exit(0) #exit
if os.path.exists( sys.argv[1] ):
print "compiling %s" % sys.argv[1]
jcompile_compile( sys.argv[1] )
else:
print "Given file doesn't exist"
jcompile_usage() |
J'ai trouvé certains posts qui devraient expliquer comment résoudre; mais soit je ne les comprends pas, soit il ne sont plus d'actualité (avec les nouvelles versions). Par exemple, certains nécessitent une méthode main, hors la classe qui doit être créé juste être utilisé par Robocode.
Comment puis je faire pour convertir mon code Python en jar utilisable pour Robocode ?
Merci.