Así que estoy tratando de crear una función para un juego de rol de texto que permita a las personas hacer clic en un botón de "vagar" y terminar en una ubicación aleatoria cerca de la actual. Creé varios arreglos que contienen la información sobre qué ubicaciones están cerca de otras, y me gustaría poder presionar un botón, generar una nueva ubicación, guardar esa ubicación como la ubicación actual y generar un nuevo resultado de desplazamiento a partir de la nueva ubicación la próxima vez que se presione el botón.
//Starting area locations const startingAreaLocations = [Clearing, BigForrest, SmallForrest, Cliffs, Cave, Pond, Start, River, TownEnterance]; const locationsNearStart = [BigForrest, Cliffs, Cave]; const locationsNearBigForrest = [Start, Clearing, River]; const locationsNearCliffs = [Start, Cave, River]; const locationsNearCave = [Cliffs, Pond, River, Start]; const locationsNearClearing = [BigForrest, River, Start]; const locationsNearSmallForrest = [Pond, River, TownEnterance]; const locationsNearPond = [SmallForrest, Cave, River]; const locationsNearRiver = [BigForrest, Cliffs, Cave, Clearing, SmallForrest, Pond, TownEnterance]; const locationsNearTowerEnterance = [SmallForrest, River];
Mi problema en este momento es que cuando genero y cargo una nueva ubicación, no sé cómo decirle al sistema a qué matriz debe hacer referencia para las próximas ubicaciones. Traté de nombrar las variables para poder agregar la variable de nombre de ubicación a una cadena y obtener el nombre de la matriz, pero incluso cuando lo puse a través de un JSON.parse()
, lee la cadena, no el contenido de mi formación.
function wander(location) { wanderLocation = location[Math.floor(Math.random()*location.length)]; console.log(wanderLocation); locationsNearCurrentArea = "locationsNear" + wanderLocation.name; console.log(locationsNearCurrentArea); callPannel(wanderLocation.string); }
¿Cómo puedo crear mejor una característica que me permita rebotar entre ubicaciones como esta?
Usaría una estructura de datos explícita para esto en lugar de un montón de variables. Un mapa con la ubicación actual como clave y ubicaciones cercanas en una matriz como valor debería ser suficiente
const nearbyLocations = new Map([ //[ key, [ values, ... ] ], [ Start, [ BigForrest, Cliffs, Cave ] ], [ BigForrest, [ Start, Clearing, River ] ], [ Cliffs, [ Start, Cave, River ] ], // etc ])
Entonces puedes usar algo como esto para obtener una ubicación cercana al azar
const wander = (currentLocation) => { const nearby = nearbyLocations.get(currentLocation) return nearby?.[Math.floor(Math.random() * nearby?.length)] }
Debe poner los datos al menos en JSON, objeto o lista. Aquí hay un ejemplo usando el objeto:
let data = { startingAreaLocations: ["Clearing", "BigForrest", "SmallForrest"], locationsNearStart: ["BigForrest", "Cliffs", "Cave"], locationsNearBigForrest: ["Start", "Clearing", "River"], }; let newLocation = "River"; let newWander = ["SmallForrest", "BigForrest"]; let dataKey = Object.values(data); data[Object.keys(data)[Object.keys(data).length - 1]].forEach((e) => { if (e === newLocation) { data[`locationsNear${e}`] = newWander; } }); console.log(data);