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']])
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
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']])
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']])
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']])
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']])
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']])