#!/usr/bin/python from __future__ import print_function import argparse import yaml import sys from PySide import QtGui, QtCore from music import MusicBox from question import Questions, QuestionException from gamestate import GameState from game import SeopardyGame from config import check_config from buttonreader import get_input, InputException def _parser(): parser = argparse.ArgumentParser(description="Sebas jeopardy/beopardy clone") parser.add_argument("--gamestate", action="store", default=None, help="Gamestate to load to recover a crashed game") parser.add_argument("--conf", action="store", default="seopardy.conf", help="Path to config file") parser.add_argument("--no-cwd", action="store_true", default=False, help="Do not change working directory to question folder") parser.add_argument("-v", "--verbose", action="store_true", default=False, help="Be more verbose, print filenames of missing files") parser.add_argument("questions", action="store", help="Path to questionfile") return parser if __name__ == '__main__': parser = _parser() args = parser.parse_args() questions = None try: questions = Questions(args.questions, appendPath=not args.no_cwd, verbose=args.verbose) except QuestionException as e: print(str(e), file=sys.stderr) sys.exit(1) # start gui app = QtGui.QApplication([sys.argv[0]]) QtCore.QCoreApplication.setApplicationName("Seopardy") # check and load config file config = None try: config = yaml.safe_load(open(args.conf)) except IOError as e: print("Error: Could not load config: %s" % (str(e),), file=sys.stderr) sys.exit(1) except yaml.scanner.ScannerError as e: print("Error: Could not parse config file: %s" % (str(e),), file=sys.stderr) sys.exit(1) check_config(config) # create or load gamestate gamestate = None if args.gamestate: sstream = None try: sstream = open(args.gamestate, "r") except IOError as e: print("Error: Could not load gamestate: %s" % (str(e),), file=sys.stderr) sys.exit(1) gamestate = GameState.load(sstream, config["savedir"]) else: gamestate = GameState(config["savedir"]) # init music box MusicBox.init() for name, path in config["music"].iteritems(): if path: if not MusicBox.add_music(name, path): print("Error: Could not load music %s (file %s)" % (name, path), file=sys.stderr) sys.exit(1) # create and start input threads inputs = [] if config["playerInput"] is not None: for playerInput in config["playerInput"]: args = playerInput.get("Args", []) if args is None: args = [] try: inp = get_input(playerInput["Type"], args, app) inputs.append(inp) except InputException as e: print("Error: %s" % e, file=sys.stderr) sys.exit(1) inputs[-1].start() # create board board = SeopardyGame(questions, gamestate, inputs) board.show() app.exec_() sys.exit()