Esempio n. 1
0
 def test_syntax_checker_good_game8(self):
     game_internal = Game([[
         GameObject('starting_room', [], [
             GameObject('door', [GameObjectAttribute.IMMOBILE]),
             GameObject('keypart1'),
             GameObject('box', [GameObjectAttribute.IMMOBILE],
                        [GameObject('keypart2')])
         ]),
         GameObject('ending_room')
     ], [GameObject('key')],
                           [
                               GamePassage(11, 'starting_room',
                                           'ending_room', 'N', 'S',
                                           [GameObjectAttribute.INVISIBLE])
                           ],
                           [
                               GamePassageRevealAction('door', 'key', 11),
                               GameObjectUseAction('keypart1', 'keypart2',
                                                   'key')
                           ], [], 'ending_room', {}])
     verdict = GameSyntaxChecker().check(game_internal)
     assert (verdict == '')
     solution = GameSolver().solve(game_internal)
     assert (solution == [['take', 'keypart1'], ['open', 'box'],
                          ['take', 'keypart2'],
                          ['use', 'keypart1', 'keypart2'],
                          ['use', 'door', 'key'], ['go', 'N']])
Esempio n. 2
0
def main(argv):
    if len(argv) != 2:
        print "USAGE:", os.path.basename(argv[0]), "<game dat file>"
        return
    gamefile = argv[1]
    exit_commands = ['quit', 'exit']
    inventory_commands = ['inventory']
    game = None
    try:
        with open(gamefile, 'r') as myfile:
            game_blueprints = myfile.read().replace('\n', '')
            game = Game(GameDecoder().decode(game_blueprints))
    except IOError as e:
        print "I/O error({0}): {1}".format(e.errno, e.strerror)
        return
    except Exception as e:
        print "Could not parse game file."
        print e
        return
    result = GameSyntaxChecker().check(game)
    if result != "":
        print "Error: ", result
        return
    else:
        print "Game description in", gamefile, "is error-free."
    solution = GameSolver().solve(game)
    print
    print "The solution is:"
    print solution
Esempio n. 3
0
 def test_solver_on_full_game(self):
     verdict = GameSyntaxChecker().check(self.game1)
     assert (verdict == '')
     solution = GameSolver().solve(self.game1)
     assert (solution == [['take', 'candle'], ['take', 'match'],
                          ['take', 'bird'], ['take', 'stone'],
                          ['use', 'candle', 'match'],
                          ['use', 'bird', 'stone'], ['use', '', 'picture'],
                          ['go', 'W']])
Esempio n. 4
0
 def test_syntax_checker_good_game1(self):
     # minimal valid game
     game_internal = Game(
         [[GameObject('starting_room'),
           GameObject('final_room')], [],
          [GamePassage(11, 'starting_room', 'final_room', 'N', 'S')], [],
          [], 'final_room', {}])
     assert (GameSyntaxChecker().check(game_internal) == '')
     assert (GameSolver().solve(game_internal) == [['go', 'N']])
Esempio n. 5
0
 def test_syntax_checker_good_game3(self):
     game_internal = Game([[
         GameObject('starting_room', [],
                    [GameObject('door', [GameObjectAttribute.IMMOBILE])]),
         GameObject('ending_room')
     ], [],
                           [
                               GamePassage(11, 'starting_room',
                                           'ending_room', 'N', 'S',
                                           [GameObjectAttribute.INVISIBLE])
                           ], [GamePassageRevealAction('door', '', 11)], [],
                           'ending_room', {}])
     verdict = GameSyntaxChecker().check(game_internal)
     assert (verdict == '')
     assert (GameSolver().solve(game_internal) == [['use', '', 'door'],
                                                   ['go', 'N']])
Esempio n. 6
0
 def test_syntax_checker_good_game_2(self):
     # testing whether final room is accessible
     game_internal = Game([[
         GameObject('roomA'),
         GameObject('roomB'),
         GameObject('roomC'),
         GameObject('roomD'),
         GameObject('roomE'),
         GameObject('roomF')
     ], [],
                           [
                               GamePassage(11, 'roomA', 'roomB', 'N', 'S'),
                               GamePassage(12, 'roomA', 'roomE', 'E', 'W'),
                               GamePassage(13, 'roomD', 'roomC', 'E', 'W'),
                               GamePassage(14, 'roomE', 'roomB', 'N', 'E'),
                               GamePassage(15, 'roomD', 'roomE', 'N', 'S'),
                               GamePassage(16, 'roomC', 'roomF', 'E', 'W')
                           ], [], [], 'roomF', {}])
     assert (GameSyntaxChecker().check(game_internal) == '')
     assert (GameSolver().solve(game_internal) == [['go', 'N'], ['go', 'E'],
                                                   ['go', 'S'], ['go', 'E'],
                                                   ['go', 'E']])
Esempio n. 7
0
 def test_syntax_checker_good_game10(self):
     game_internal = Game(
         [[
             GameObject('starting_room', [], [
                 GameObject('door', [GameObjectAttribute.IMMOBILE]),
                 GameObject('key', [])
             ]),
             GameObject('strange_room'),
             GameObject('ending_room')
         ], [GameObject('broken_key')],
          [
              GamePassage(11, 'starting_room', 'strange_room', 'W', 'E',
                          []),
              GamePassage(12, 'strange_room', 'ending_room', 'N', 'S',
                          [GameObjectAttribute.INVISIBLE])
          ], [GameObjectUseAction('door', 'key', 'broken_key')],
          [GamePassageRevealAction('broken_key', '', 12)], 'ending_room',
          {}])
     verdict = GameSyntaxChecker().check(game_internal)
     assert (verdict == "")
     assert (GameSolver().solve(game_internal) == [['take', 'key'],
                                                   ['use', 'door', 'key'],
                                                   ['go', 'W'], ['go',
                                                                 'N']])