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
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
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