diff options
Diffstat (limited to 'snakegame/__init__.py')
-rw-r--r-- | snakegame/__init__.py | 60 |
1 files changed, 56 insertions, 4 deletions
diff --git a/snakegame/__init__.py b/snakegame/__init__.py index 7fbff4d..73e1060 100644 --- a/snakegame/__init__.py +++ b/snakegame/__init__.py @@ -1,10 +1,62 @@ import argparse from snakegame.engines import BUILTIN_ENGINES -from snakegame.bots import BUILTIN_BOTS + +def first(d): + for item in d: + return item + +def rsplit_get(s, sep, default): + if sep not in s: + return (s, default) + return s.rsplit(sep, 1) + +def import_thing(name, default_obj): + pkg, obj = rsplit_get(name, ':', default_obj) + mod = __import__(pkg, fromlist=[obj]) + return getattr(mod, obj) + +def load_engine(name, builtins=BUILTIN_ENGINES): + engine = BUILTIN_ENGINES.get(name, name) + return import_thing(engine, 'Engine') def main(argv=None): - parser = argparse.ArgumentParser() - parser.add_argument('-e', '--engine') + parser = argparse.ArgumentParser(conflict_handler='resolve') + parser.add_argument( + '-e', '--engine', + default=first(BUILTIN_ENGINES), + ) + parser.add_argument( + '-l', '--loop', + action='store_true', + default=False, + ) + parser.add_argument( + '-w', '--width', + default=30, + ) + parser.add_argument( + '-h', '--height', + default=20, + ) + parser.add_argument( + '-a', '--apples', + default=40, + ) + parser.add_argument('bot', nargs='+') args = parser.parse_args(argv) - print args + + engine = load_engine(args.engine) + + game = engine(args.height, args.width, args.apples) + + for name in args.bot: + bot = import_thing(name, 'bot') + game.add_bot(bot) + + game.run() + + if args.loop: + while True: + game.run() + |