コード例 #1
0
ファイル: quest_tests.py プロジェクト: mm3/questgen
    def check_quest(self, quest_class):
        self.kb += quest_class.construct_from_place(
            nesting=0,
            selector=self.selector,
            start_place=self.selector.new_place(candidates=('place_1', )))

        self.kb.validate_consistency([
            restrictions.SingleStartStateWithNoEnters(),
            restrictions.FinishStateExists(),
            restrictions.AllStatesHasJumps(),
            restrictions.SingleLocationForObject(),
            restrictions.ReferencesIntegrity(),
            restrictions.ConnectedStateJumpGraph(),
            restrictions.NoCirclesInStateJumpGraph(),
            # restrictions.MultipleJumpsFromNormalState(),
            restrictions.ChoicesConsistency(),
            restrictions.QuestionsConsistency(),
            restrictions.FinishResultsConsistency(),
            restrictions.RequirementsConsistency(),
            restrictions.ActionsConsistency()
        ])
コード例 #2
0
ファイル: restrictions_tests.py プロジェクト: mm3/questgen
    def setUp(self):
        super(FinishResultsConsistencyTests, self).setUp()
        self.restriction = restrictions.FinishResultsConsistency()

        self.finish_1 = facts.Finish(start='start_1',
                                     uid='finish_1',
                                     results={
                                         'p1': 0,
                                         'p2': 0
                                     },
                                     nesting=0)
        self.finish_2 = facts.Finish(start='start_2',
                                     uid='finish_2',
                                     results={
                                         'p3': 0,
                                         'p4': 0,
                                         'p5': 0
                                     },
                                     nesting=0)

        self.kb += [
            facts.Start(uid='start_1', type='test', nesting=0),
            facts.Start(uid='start_2', type='test', nesting=0), self.finish_1,
            self.finish_2,
            facts.QuestParticipant(start='start_1',
                                   participant='p1',
                                   role='role'),
            facts.QuestParticipant(start='start_1',
                                   participant='p2',
                                   role='role'),
            facts.QuestParticipant(start='start_2',
                                   participant='p3',
                                   role='role'),
            facts.QuestParticipant(start='start_2',
                                   participant='p4',
                                   role='role'),
            facts.QuestParticipant(start='start_2',
                                   participant='p5',
                                   role='role')
        ]
コード例 #3
0
ファイル: example.py プロジェクト: mm3/questgen
]

# список ограничений для графа задания
QUEST_RESTRICTIONS = [
    restrictions.SingleStartStateWithNoEnters(
    ),  # только одна начальная вершина для задания
    restrictions.FinishStateExists(),  # существуют завершающие вершины
    restrictions.AllStatesHasJumps(),  # существуют переходы из всех состояний
    restrictions.ConnectedStateJumpGraph(),  # граф связаный
    restrictions.NoCirclesInStateJumpGraph(),  # граф без циклов
    restrictions.MultipleJumpsFromNormalState(
    ),  # каждая обычная вершина имеет только одну исходящую дугу
    restrictions.ChoicesConsistency(),  # проверяем целостность развилок
    restrictions.QuestionsConsistency(
    ),  # проверяем целостность условных узлов
    restrictions.FinishResultsConsistency(
    )  # проверяем, что для каждого окончания квеста указаны результаты для каждого его участника
]


# создаём задание
# эта функция может вызвать исключение questgen.exceptions.RollBackError и это её нормальное поведение
# исключение означает, что создать задание не получилось и надо повторить попытку
def create_quest():

    # формируем список заданий для генерации
    qb = QuestsBase()
    qb += [
        Spying, Hunt, Hometown, SearchSmith, Delivery, Caravan, CollectDebt,
        HelpFriend, InterfereEnemy, Help
    ]
コード例 #4
0
        facts.UpgradeEquipmentCost(money=777)
    ]

    selector = Selector(kb, qb)
    kb += Quest.construct_from_place(
        nesting=0,
        selector=selector,
        start_place=selector.new_place(candidates=('place_1', )))

    try:
        kb.validate_consistency([
            restrictions.SingleStartStateWithNoEnters(),
            restrictions.FinishStateExists(),
            restrictions.AllStatesHasJumps(),
            restrictions.SingleLocationForObject(),
            restrictions.ReferencesIntegrity(),
            restrictions.ConnectedStateJumpGraph(),
            restrictions.NoCirclesInStateJumpGraph(),
            # restrictions.MultipleJumpsFromNormalState(),
            restrictions.ChoicesConsistency(),
            # restrictions.QuestionsConsistency(),
            restrictions.FinishResultsConsistency()
        ])
        pass
    except Exception:
        print('quesr %s is invalid' % Quest.TYPE)
        raise

    drawer = Drawer(knowledge_base=kb)
    drawer.draw('./svgs/%s.svg' % Quest.TYPE)