summaryrefslogtreecommitdiff
path: root/snakegame/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'snakegame/__init__.py')
-rw-r--r--snakegame/__init__.py60
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()
+