superbeam-env / play_scripted.py
StarAtNyte1's picture
SUPERBEAM OpenEnv environment
5a2a073 verified
Raw History Blame Contribute Delete
1.43 kB
"""Scripted policy against a running SUPERBEAM server (run right; right+jump near gaps/walkers).
python play_scripted.py [--url http://localhost:8000] [--level classic]
"""
import argparse
import os
import re
import sys
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from superbeam_env import SuperBeamAction, SuperBeamEnv # noqa: E402
def policy(obs):
ahead = [int(v) for v in re.findall(r"\((-?\d+) px ahead\)", obs.facts)]
if "standing on ground" in obs.facts and any(0 <= d < 8 for d in ahead):
return "right+jump"
return "right"
def main():
ap = argparse.ArgumentParser()
ap.add_argument("--url", default="http://localhost:8000")
ap.add_argument("--level", default=None)
a = ap.parse_args()
kw = {"level": a.level} if a.level else {}
with SuperBeamEnv(base_url=a.url).sync() as env:
r = env.reset(**kw)
print(r.observation.screen); print(r.observation.facts)
n, total = 0, 0.0
while not r.done:
r = env.step(SuperBeamAction(action=policy(r.observation)))
n += 1
total += r.reward or 0
o = r.observation
print(o.screen); print(o.facts)
print("won=%s dead=%s steps=%d frames=%d progress=%.2f reward=%.1f level=%s state=%s"
% (o.won, o.dead, n, o.frames, o.progress, total, o.level, env.state()))
if __name__ == "__main__":
main()