Exemplo n.º 1
0
def enemyPossibleMoves(enemy: Enemy, game: Dungeon):
    """
    Gets a list of the possible moves a given enemy can feasibly make.
    In essence, gets all the moves are traversable within each enemy's
    walkable distance.
    :params enemy: Enemy
    :params game: Dungeon
    """
    possibleMoves = []
    enemyBoardNum = whichBoardInLevel(game.levels[game.currLevel],
                                      enemy.location)
    enemyBoard: Board = game.levels[game.currLevel].boards[enemyBoardNum]
    if enemy.enemyType == "zombie":
        tilesAround = getLocationsAround(enemy.location)
        for loc in tilesAround:
            if locationInBounds(loc, enemyBoard.origin, enemyBoard.dimensions):
                tile = enemyBoard.tiles[loc[0]][loc[1]]
                if tile.tileType != TileEnum.WALL and tile.tileType != TileEnum.DOOR:
                    possibleMoves.append(loc)
    elif enemy.enemyType == "ghost":
        tilesAround = getLocationsAround(enemy.location)
        for loc in tilesAround:
            if locationInLevelBounds(game.levels[game.currLevel], loc):
                possibleMoves.append(loc)
    return possibleMoves
Exemplo n.º 2
0
def playerPossibleCardinalMoves(location: tuple, numMoves: int, level: Level,
                                boardNumber: int):
    """
    Outputs the possible moves for a player given the number of cardinal moves.
    :param location: tuple
    :param numMoves: int
    :param level: Level
    :param boardNumber: int
    """
    board = level.boards[boardNumber]
    possibleMoves = []
    while numMoves > 0:
        if len(possibleMoves) == 0:
            possibleMoves += list(filter(
                lambda lamLoc: locationInLevelBounds(level, lamLoc),
                getLocationsAround(location)))
        else:
            temp = []
            for loc in possibleMoves:
                temp += list(filter(
                    lambda lamLoc: locationInBounds(lamLoc, board.origin,
                                                    board.dimensions),
                    getLocationsAround(loc)))
            possibleMoves += temp
        numMoves -= 1
        possibleMoves = list(unique_everseen(possibleMoves))

    return possibleMoves
Exemplo n.º 3
0
def playerPossibleCardinalMoves(location: tuple, numMoves: int, level: Level):
    """
    Outputs the possible moves for a player given the number of cardinal moves.
    :param location: tuple
    :param numMoves: int
    :param level: Level
    """
    possibleMoves = []
    while numMoves > 0:
        if len(possibleMoves) == 0:
            possibleMoves += list(
                filter(lambda lamLoc: locationInLevelBounds(level, lamLoc),
                       getLocationsAround(location)))
        else:
            temp = []
            for loc in possibleMoves:
                temp += list(
                    filter(lambda lamLoc: locationInLevelBounds(level, lamLoc),
                           getLocationsAround(loc)))
            possibleMoves += temp
        possibleMoves = list(unique_everseen(possibleMoves, key=tuple))
        numMoves -= 1
    return possibleMoves