diff options
Diffstat (limited to 'snakegame/__init__.py')
-rw-r--r-- | snakegame/__init__.py | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/snakegame/__init__.py b/snakegame/__init__.py new file mode 100644 index 0000000..be1f7a7 --- /dev/null +++ b/snakegame/__init__.py @@ -0,0 +1,55 @@ +from snakegame.engine import Engine +from snakegame.viewers import BUILTIN_VIEWERS + +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 main(argv=None): + import argparse + + parser = argparse.ArgumentParser(conflict_handler='resolve') + parser.add_argument( + '-v', '--viewer', + default=first(BUILTIN_VIEWERS), + ) + parser.add_argument( + '-w', '--width', + default=30, + type=int, + ) + parser.add_argument( + '-h', '--height', + default=20, + type=int, + ) + parser.add_argument( + '-a', '--apples', + default=40, + type=int, + ) + parser.add_argument('bot', nargs='+') + args = parser.parse_args(argv) + + viewer_name = BUILTIN_VIEWERS.get(args.viewer, args.viewer) + viewer_class = import_thing(viewer_name, 'Viewer') + + game = Engine(args.height, args.width, args.apples) + + for name in args.bot: + bot = import_thing(name, 'bot') + game.add_bot(bot) + + viewer = viewer_class(game) + viewer.run() + |