
Pythonの習得に何か楽しい方法は無いかと考えていたところ、JavaにはRobocodeというゲーム感覚で学習できるソフトウェアがある事を思い出し、Pythonにも似たようなものが無いかと探して見たところありました。その名もpybotwar。
Robocodeは戦車の動きをプログラミングして自動で戦わせるシミュレーションゲームです。勝とう勝とうと組んでるうちに自然とJavaを学べるというものだそうで、Pythonでも同じ事が言えるかは分かりませんが面白そうなのでまずはやってみます。
インストールと起動
Windows 7 64bitで実施しました。
まずは依存する以下のモジュールをインストールします。
Python2.6
動作確認を2.6.4でやっているとの事ですが、2.6.6をインストールしました。なお、64bit版では以下のpybox2dがインストールできませんでしたので、32bit版をインストールしました。
pybox2d
2Dでの物理エンジンのPython実装です。Box2D-2.0.2b1.win32-py2.6.exeをインストールしました。
pygame
Pythonでゲームを作る為のモジュール群です。pygame-1.9.1.win32-py2.6.msiをインストールしました。
pygsear
pygameのFrameworkだそうです。pygsear-0.53.2をインストールしました。
pyqt4
main.pyを-Qオプション付きで起動するとpybotwarのグラフィックが向上します。なくてもOK。
以上がインストールできたら、一度main.pyを実行します。すると、config.pyが作成されますので、エディタで開き、以下を追記します。
subproc_python = 'python.exeへのフルパス'
保存後、main.pyを実行すると、サンプルのロボットが対戦を始めます。
自分のロボットを動かしてみる
template.pyをhogetank.pyにコピーして編集します。
from robot import Robot
class TheRobot(Robot):
def initialize(self):
pass
def respond(self):
self.force(100)
とりあえず真っ直ぐ走りました。
サンプルのロボットのコードを見て動きを追加していきます。
from robot import Robot
class TheRobot(Robot):
def initialize(self):
pass
def resoind(self):
self.ping() #砲身の先に何があるか検知する??
self.ping_react()
def ping_react():
kind, angle, dist = self.sensors['PING']
if kind == 'w': #砲身の先が壁wで
if dist < 10: #距離が10未満なら
self.torque(100) #右に面舵いっぱーい
self.force(-100) #バックぜんかーい
else: #10以上なら
self.torque(70) #右に70%のカーブで
self.force(100) #アクセル全開!
if kind == 'r': #砲身の先が敵rなら
self.fire(dist) #敵の位置目がけて発射!
もっとコードを読み込めば多彩な動きが可能になるのかなと思っております。
ヘルプはこちら
http://code.google.com/p/pybotwar/wiki/Programming
最後に
pybotwarで検索しても、情報があまり出てこなかったので認知度が低いのかもしれませんが、なかなかに面白いので、挑戦する人が増えないかなと期待しています。
とりあえずサンプルのボットたおす。