def turn_control(self):
        # TODO: Give this a good cleaning
        self.phase = utterances.UTT_GREET
        turns = 1
        talking = True
        either = [self.ai, self.pl]
        while talking:
            # For now we'll just time conversations
            if turns > 1:
                self.phase = utterances.UTT_Q
            elif turns > 5:
                self.phase = utterances.UTT_PART
            elif turns > 6:
                talking = False

            # Choose a random person to go first
            random.shuffle(either)
            self.first, self.second = either

            # Do a set of turns.
            if self.first == self.ai:
                self.ai_turn()
                self.pl_turn()
                if utterances.coherent(self.phase, self.ai_said, self.pl_said):
                    words = []
                    if isinstance(self.ai_said, utterances.Verbal):
                        words.extend(self.ai_said.word_array)
                    if isinstance(self.pl_said, utterances.Verbal):
                        words.extend(self.pl_said.word_array)
                    self.pl.learn_words(words)
                self.pl.encounter_utterance(self.ai_said)
            else:
                self.pl_turn()
                self.ai_turn()
                if utterances.coherent(self.phase, self.pl_said, self.ai_said):
                    words = []
                    if isinstance(self.ai_said, utterances.Verbal):
                        words.extend(self.ai_said.word_array)
                    if isinstance(self.pl_said, utterances.Verbal):
                        words.extend(self.pl_said.word_array)
                    self.pl.learn_words(words)
                self.pl.encounter_utterance(self.ai_said)

            turns += 1

        self._destruct()
Example #2
0
 def choose_utterance(self, phase, prompt=None):
     # TODO: This works, but it's messy, clean it up.
     if prompt is not None:
         if not utterances.coherent(phase, prompt):
             options = utterances.filter_utts(utype=utterances.UTT_CONF)
             return random.choice(options)
     if phase == utterances.UTT_GREET:
         options = utterances.filter_utts(utype=utterances.UTT_GREET)
     elif phase == utterances.UTT_PART:
         options = utterances.filter_utts(utype=utterances.UTT_PART)
     else:
         if prompt is None:
             options = utterances.filter_utts(utterances.UTT_Q)
         else:
             for key in self.traits:
                 if isinstance(self.traits[key], prompt.prompts_for):
                     options = utterances.filter_utts(responds_with=self.traits[key])
     return random.choice(options)