gym-super-mario-brosのマリオのスピードを取得する
gym-super-mario-brosのマリオの座標だけでなくスピードを取得する方法がわかったのでメモします。
方針
スーパーマリオのメモリマップからx方向とy方向のスピードを探し出して、取得します。
メモリマップの参考
Super Mario Bros.:RAM map - Data Crystal
A Comprehensive Super Mario Bros. Disassembly · GitHub
実装
下記のように SuperMarioBrosEnv
クラスに x_speed
メソッドと y_speed
メソッドを実装します。
元々あった_x_positionメソッドや_y_positionメソッドをマネしています。
def x_speed(self): s = self.ram[0x57] return s if s < 0x80 else s - 0x100 def y_speed(self): s = self.ram[0x9f] return s if s < 0x80 else s - 0x100 SuperMarioBrosEnv.x_speed = x_speed SuperMarioBrosEnv.y_speed = y_speed
_x_position
メソッドや _y_position
メソッドと同様に _
で始まるメソッド名にしようかとも考えたのですが、そうするとWrapperクラスもメソッドを追加する手間が増えるので、 _
はつけませんでした。
今回のColab
Colabの中で動かすとコマ送りできるので研究がはかどります。