File size: 1,431 Bytes
5a2a073 | 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 37 38 39 40 41 42 43 | """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()
|