Exemple #1
0
def main(stdscr, filename, player_x, player_y):
    curses.noecho()
    stdscr.keypad(True)

    for y, line in enumerate(open(filename, 'r').read()[:-1].split('\n')):
        for x, char in enumerate(line):
            if char == 'A':
                goal_x, goal_y = x, y

    dungeon = Dungeon(filename)
    dijkstra = Dijkstra(dungeon, goal_x, goal_y)
    dijkstra.find()

    while True:
        stdscr.clear()

        #dijkstra.find()
        path = list(dijkstra.pathFrom(player_x, player_y))

        for y, line in enumerate(dungeon.cells):
            for x, cell in enumerate(line):
                if cell in path[1:]:
                    stdscr.addch(y, x, '.')
                elif x == player_x and y == player_y:
                    stdscr.addch(y, x, '@')
                else:
                    stdscr.addch(y, x, cell.char)
        if len(path) != 0:
            dist = path[0].dist
        else:
            dist = float('inf')

        stdscr.addstr(20, 0, 'A: %s' % str(dist))

        key = stdscr.getkey()
        if key == 'q':
            break
        elif key == 'h' or key == 'a':
            player_x -= 1
            if player_x < 0:
                player_x += 1
        elif key == 'l' or key == 'd':
            player_x += 1
            if player_x >= len(dungeon.cells[0]):
                player_x -= 1
        elif key == 'k' or key == 'w':
            player_y -= 1
            if player_y < 0:
                player_y += 1
        elif key == 'j' or key == 's':
            player_y += 1
            if player_y > len(dungeon.cells) - 1:
                player_y -= 1
Exemple #2
0
def main(filename):
    dungeon = Dungeon(filename)

    for y, line in enumerate(open(filename, 'r').read()[:-1].split('\n')):
        for x, char in enumerate(line):
            if char == 'A':
                Ax, Ay = x, y
            elif char == 'B':
                Bx, By = x, y

    dijkstra = Dijkstra(dungeon, Ax, Ay)
    dijkstra.find()
    path = dijkstra.pathFrom(Bx, By)
    print(list(path))