Algoritmos.MapaInteractivo
1.0.26020.3
dotnet add package Algoritmos.MapaInteractivo --version 1.0.26020.3
NuGet\Install-Package Algoritmos.MapaInteractivo -Version 1.0.26020.3
<PackageReference Include="Algoritmos.MapaInteractivo" Version="1.0.26020.3" />
<PackageVersion Include="Algoritmos.MapaInteractivo" Version="1.0.26020.3" />
<PackageReference Include="Algoritmos.MapaInteractivo" />
paket add Algoritmos.MapaInteractivo --version 1.0.26020.3
#r "nuget: Algoritmos.MapaInteractivo, 1.0.26020.3"
#:package Algoritmos.MapaInteractivo@1.0.26020.3
#addin nuget:?package=Algoritmos.MapaInteractivo&version=1.0.26020.3
#tool nuget:?package=Algoritmos.MapaInteractivo&version=1.0.26020.3
Algoritmos.MapaInteractivo
Descripción
Algoritmos.MapaInteractivo es una librería de .NET 10 que proporciona un sistema de simulación interactivo para navegación de vehículos en un mapa ASCII tipo GPS. Permite crear escenarios donde un vehículo autónomo navega y entrega paquetes en intersecciones de un mapa personalizable.
Características
- Mapas ASCII dinámicos - Renderizado en tiempo real con colores en consola
- Control de vehículos - Operaciones básicas: Mover, Girar Izquierda/Derecha, Entregar
- Sistema de entregas - Puntos de entrega sin identificación que cambian de color al completarse
- Navegación "a ciegas" - El vehículo no conoce su posición exacta, solo detecta entregas alrededor
- Consultas de estado - Detecta entregas en direcciones específicas, camino disponible, etc.
- Manejo de errores - Detención automática en movimientos inválidos
- Visualización pausada - Retrasos configurables para seguimiento visual de operaciones
- Resúmenes automáticos - Estadísticas de operaciones y entregas al finalizar
Instalación
dotnet add package Algoritmos.MapaInteractivo
O a través del Package Manager:
Install-Package Algoritmos.MapaInteractivo
Uso Rápido
using MapaInteractivo;
// Configurar y crear el gestor
var gestor = new ConfiguradorMapa(3, 3)
.ConVehiculo(1, 1, DireccionVehiculo.Arriba)
.AgregarEntregas((0, 0), (0, 2), (2, 1))
.Construir();
// Ejecutar lógica de navegación
gestor.Ejecutar(v =>
{
while (v.HayEntregasPendientes())
{
if (v.EstoyEnUnaEntrega())
{
v.EntregarPaquete();
}
else if (v.HayEntregaAlFrente() && v.HayCaminoFrente())
{
v.MoverAdelante();
}
else if (v.HayEntregaALaDerecha())
{
v.GirarDerecha();
}
else if (v.HayEntregaALaIzquierda())
{
v.GirarIzquierda();
}
else if (v.HayCaminoFrente())
{
v.MoverAdelante();
}
else
{
v.GirarDerecha();
}
}
});
// Los resúmenes se imprimen automáticamente
API Principal
ConfiguradorMapa
Constructor fluido para configurar el mapa:
var gestor = new ConfiguradorMapa(filasIntersecciones, columnasIntersecciones)
.ConVehiculo(fila, columna, direccionInicial)
.AgregarEntregas((fila1, col1), (fila2, col2), ...)
.Construir();
Parámetros:
filasIntersecciones- Número de filas del mapacolumnasIntersecciones- Número de columnas del mapafila- Fila inicial del vehículo (0-indexed)columna- Columna inicial del vehículo (0-indexed)direccionInicial- Dirección inicial del vehículo (tipoDireccionVehiculo)alturaCelda- Alto de cada celda en caracteres (default: 2)anchoCelda- Ancho de cada celda en caracteres (default: 4)
IEjecutor - Operaciones Disponibles
Operaciones de Movimiento
bool MoverAdelante() // Mueve una intersección hacia adelante
void GirarIzquierda() // Gira 90° a la izquierda
void GirarDerecha() // Gira 90° a la derecha
void EntregarPaquete() // Entrega paquete en posición actual
Consultas de Estado
bool EstoyEnUnaEntrega() // ¿Hay paquete sin entregar aquí?
bool HayCaminoFrente() // ¿Puedo moverme hacia adelante?
bool HayEntregasPendientes() // ¿Quedan paquetes por entregar?
bool HayEntregaAlFrente() // ¿Hay paquete frente a mí?
bool HayEntregaALaDerecha() // ¿Hay paquete a mi derecha?
bool HayEntregaALaIzquierda() // ¿Hay paquete a mi izquierda?
DireccionVehiculo - Enum
public enum DireccionVehiculo
{
Arriba, // Norte
Abajo, // Sur
Derecha, // Este
Izquierda // Oeste
}
Visualización
El mapa se renderiza con los siguientes símbolos:
| Símbolo | Significado |
|---|---|
+ |
Intersección |
- |
Calle horizontal |
\| |
Calle vertical |
^ |
Vehículo mirando al norte (Verde) |
v |
Vehículo mirando al sur (Verde) |
> |
Vehículo mirando al este (Verde) |
< |
Vehículo mirando al oeste (Verde) |
X |
Vehículo en error (Rojo) |
o |
Paquete pendiente (Blanco) |
O |
Paquete entregado (Verde) |
Características Avanzadas
Detención Automática
Si intentas un movimiento inválido (fuera del mapa), la ejecución se detiene automáticamente:
gestor.Ejecutar(v =>
{
// Si v.MoverAdelante() falla, lanza MovimientoInvalidoException
// La excepción es capturada internamente y se muestran los resúmenes
v.MoverAdelante();
});
Retrasos Visuales
Cada operación incluye un retraso de 1.5 segundos para permitir seguimiento visual claro del vehículo.
Resúmenes Automáticos
Al finalizar la ejecución se muestra automáticamente:
OPERACIONES EJECUTADAS: 15
Movimientos: 7
Giros izquierda: 3
Giros derecha: 4
Entregas: 1
Total entregas: 3 | Completadas: 1 | Pendientes: 2
Total de pasos del vehículo: 15
Casos de Uso
- Algoritmos de búsqueda - Implementar BFS, DFS para navegación
- Aprendizaje automático - Entrenar agentes autónomos
- Enseñanza - Demostración de algoritmos de pathfinding
- Simulaciones - Sistemas de entrega y logística
- Juegos educativos - Retos de programación
Arquitectura
Clases Principales
| Clase | Responsabilidad |
|---|---|
ConfiguradorMapa |
Construcción fluida del gestor |
Vehiculo |
Estado y movimiento del vehículo |
GestorEntregas |
Gestión de puntos de entrega |
GeneradorMapaAscii |
Renderizado del mapa en consola |
GestorOperaciones |
Orquestación de operaciones y lambda |
Flujo de Ejecución
- Construcción -
ConfiguradorMapacrea todas las dependencias - Inicialización - Se muestra el mapa inicial
- Ejecución - Se ejecuta la lambda del usuario
- Captura de errores - Se detiene si hay
MovimientoInvalidoException - Resúmenes - Se muestran estadísticas finales
Ejemplo Completo
using MapaInteractivo;
// Crear un mapa 5x5 con vehículo en el centro
var gestor = new ConfiguradorMapa(5, 5)
.ConVehiculo(2, 2, DireccionVehiculo.Arriba)
.AgregarEntregas(
(0, 0), (0, 4), (4, 0), (4, 4), // Esquinas
(2, 2) // Centro
)
.Construir();
// Estrategia: Entregar por espiral
gestor.Ejecutar(v =>
{
// Buscar entregas en espiral
var entregasRealizadas = 0;
while (entregasRealizadas < 5)
{
if (v.EstoyEnUnaEntrega())
{
v.EntregarPaquete();
entregasRealizadas++;
}
if (v.HayEntregasPendientes())
{
if (v.HayCaminoFrente())
v.MoverAdelante();
else if (v.HayEntregaALaDerecha())
v.GirarDerecha();
else
v.GirarIzquierda();
}
}
});
// Resultado: Mapa actualizado + resúmenes automáticos
Console.Read();
Configuración Personalizada
Tamaño de Celdas
new ConfiguradorMapa(
filasIntersecciones: 3,
columnasIntersecciones: 3,
alturaCelda: 3, // Más alto
anchoCelda: 6 // Más ancho
)
Entregas con Tuplas
.AgregarEntregas(
(0, 0), // Fila 0, Columna 0
(1, 1), // Fila 1, Columna 1
(2, 2) // Fila 2, Columna 2
)
Limitaciones y Notas
- El vehículo no sabe su posición exacta - Solo detecta entregas cercanas
- Las entregas no tienen identificadores - Todos los puntos son iguales
- El mapa es 2D rectangular - No soporta geometrías complejas
- La ejecución se detiene en movimientos inválidos automáticamente
- Cada operación espera 1.5 segundos para visualización clara
Contribuciones
Las contribuciones son bienvenidas. Por favor:
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
Licencia
Este proyecto está bajo licencia MIT. Ver archivo LICENSE para detalles.
Autor
Freddy Alarcón - Creador y mantenedor
Enlaces
Soporte
Para reportar bugs o sugerencias, abre un issue en GitHub o contacta al autor.
Última actualización: Diciembre 2025 | Versión: 1.0.0 | .NET: 10.0
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.26020.3 | 117 | 1/20/2026 |
| 1.0.26020.2 | 114 | 1/20/2026 |
| 1.0.26020.1 | 106 | 1/20/2026 |
| 1.0.26010.2 | 129 | 1/10/2026 |
| 1.0.26010.1 | 107 | 1/10/2026 |
| 1.0.26009.1 | 111 | 1/9/2026 |
| 1.0.26005.1 | 121 | 1/5/2026 |
| 1.0.25364.4 | 106 | 12/30/2025 |
| 1.0.25364.3 | 112 | 12/30/2025 |