示例#1
0
class GUI:
    def __init__(self):
        self.exit = False
        self.logic = Logic()
        self.logic.bind('<<events>>', self.events)
        self.options = []

        self.user = []
        self.me = Player()
        self.logic.addPlayer(self.me)

        self.oDescription = {'chooseCharacter': 'Choose a Character'}

        self.oMethods = {'chooseCharacter': self._chooseCharacter}

        self.cmdCommands = {
            'exit': self._exit,
            'start': self._start,
            'addKI': self._addKI
        }

    def events(self, *args, **kv):
        event = kv['event']
        if event == 'GameStart':
            self._eventGameStart()
        elif event == 'NextPlayer':
            pass
        else:
            raise Exception('unhandled event:' + event)

    def cmd(self, line):
        args = line.split()
        arg = args[0]

        m = self.cmdCommands.get(arg)
        if m == None:
            d = {str(i): v for i, v in enumerate(self.logic.getOptions())}
            opt = d.get(line)
            if opt == None:
                print('unknown command')
            else:
                self.oMethods[opt](args)
        else:
            m(args)

    def _addKI(self, *args):
        self.user.append(KI(self.logic))

    def _exit(self, *args):
        self.exit = True

    def _start(self, *args):
        self.logic.startGame()

    def loop(self):
        for x in self.cmdCommands.keys():
            print(x)
        while not self.exit:

            self.printOptions()
            line = input('>> ')
            #print(line)
            self.cmd(line)

    def printOptions(self):
        ##print(self.logic.getOptions())

        options = self.logic.getOptions()
        if len(options) > 0:
            print('Choose option:')
            for i, x in enumerate(options):
                print('[' + str(i) + ']: ' + self.oDescription[x])

    def printOptions_(self):
        if len(self.options) == 0:
            return
        map: Mapping = self.options[len(self.options) - 1]
        for k, v in map.items():
            print('[' + k + ']: ' + v)

    def _chooseCharacter(self, *args):
        char = self.chooseCharacter(self.logic.getAvailableCharacters())
        if char == None:
            print('no such character')
        else:
            self.logic.chooseCharacterCard(self.me, char)

    def chooseCharacter(self, chars: List[CharacterCard]):
        print('Choose a Character:')
        dic = {str(i): c for i, c in enumerate(chars)}
        return dic.get(input('>> '))

    def _eventGameStart(self):
        self.cmdCommands.pop('addKI')
        self.cmdCommands.pop('start')