forked from mouredev/roadmap-retos-programacion
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
6b96020
commit 5453231
Showing
3 changed files
with
228 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
// Autor: Héctor Adán | ||
// Github: https://github.com/hectorio23 | ||
|
||
#include <cstdlib> | ||
#include <iostream> | ||
#include <vector> | ||
#include <string> | ||
|
||
// Imprime el laberinto en su estado actual | ||
void printLabyrinth(const std::vector<std::vector<std::string>>& labyrinth) { | ||
for (const auto& row : labyrinth) { | ||
for (const auto& cell : row) { | ||
std::cout << cell << " "; | ||
} | ||
std::cout << std::endl; | ||
} | ||
} | ||
|
||
// Intenta mover a Mickey a una nueva posición y valida el movimiento | ||
bool moveMickey(std::vector<std::vector<std::string>>& labyrinth, int& mickeyX, int& mickeyY, int newX, int newY) { | ||
// Validación de límites del laberinto | ||
if (newX < 0 || newX >= 6 || newY < 0 || newY >= 6) { | ||
std::cout << "Movimiento inválido, fuera de los límites del laberinto." << std::endl; | ||
return false; | ||
} | ||
// Validación de obstáculos | ||
if (labyrinth[newX][newY] == "⬛️") { | ||
std::cout << "Movimiento inválido, obstáculo en el camino." << std::endl; | ||
return false; | ||
} | ||
// Actualización de la posición de Mickey | ||
labyrinth[mickeyX][mickeyY] = "⬜️"; // Limpia la posición anterior | ||
mickeyX = newX; | ||
mickeyY = newY; | ||
|
||
// Verificación si Mickey ha llegado a la salida | ||
if (labyrinth[mickeyX][mickeyY] == "🚪") { | ||
std::cout << "¡Mickey ha escapado!" << std::endl; | ||
return true; | ||
} | ||
|
||
labyrinth[mickeyX][mickeyY] = "🐭"; // Actualiza la posición de Mickey | ||
return false; | ||
} | ||
|
||
int main() { | ||
// Definición inicial del laberinto | ||
std::vector<std::vector<std::string>> labyrinth = { | ||
{"⬜️", "⬜️", "⬜️", "⬛️", "⬛️", "⬛️"}, | ||
{"⬛️", "⬛️", "⬜️", "⬛️", "🚪", "⬛️"}, | ||
{"⬛️", "⬛️", "⬜️", "⬛️", "⬜️", "⬛️"}, | ||
{"⬛️", "⬛️", "⬜️", "⬜️", "⬜️", "⬛️"}, | ||
{"⬛️", "⬛️", "⬜️", "⬛️", "⬛️", "⬛️"}, | ||
{"🐭", "⬜️", "⬜️", "⬛️", "⬛️", "⬛️"} | ||
}; | ||
|
||
// Posición inicial de Mickey | ||
int mickeyX = 5, mickeyY = 0; | ||
std::string direction; | ||
bool escaped = false; | ||
|
||
// Ciclo principal de interacción con el usuario | ||
while (!escaped) { | ||
std::system("clear"); | ||
printLabyrinth(labyrinth); // Muestra el estado actual del laberinto | ||
std::cout << "Introduce dirección (arriba, abajo, izquierda, derecha): "; | ||
std::cin >> direction; | ||
|
||
// Procesa la dirección ingresada y mueve a Mickey si es válido | ||
if (direction == "arriba") escaped = moveMickey(labyrinth, mickeyX, mickeyY, mickeyX - 1, mickeyY); | ||
else if (direction == "abajo") escaped = moveMickey(labyrinth, mickeyX, mickeyY, mickeyX + 1, mickeyY); | ||
else if (direction == "izquierda") escaped = moveMickey(labyrinth, mickeyX, mickeyY, mickeyX, mickeyY - 1); | ||
else if (direction == "derecha") escaped = moveMickey(labyrinth, mickeyX, mickeyY, mickeyX, mickeyY + 1); | ||
else std::cout << "Dirección inválida. Intenta nuevamente." << std::endl; | ||
} | ||
|
||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,85 @@ | ||
// Autor: Héctor Adán | ||
// GitHub: https://github.com/hectorio23 | ||
|
||
const readline = require('readline'); | ||
|
||
const rl = readline.createInterface({ | ||
input: process.stdin, | ||
output: process.stdout | ||
}); | ||
|
||
// Definición inicial del laberinto | ||
const labyrinth = [ | ||
['⬜️', '⬜️', '⬜️', '⬛️', '⬛️', '⬛️'], | ||
['⬛️', '⬛️', '⬜️', '⬛️', '🚪', '⬛️'], | ||
['⬛️', '⬛️', '⬜️', '⬛️', '⬜️', '⬛️'], | ||
['⬛️', '⬛️', '⬜️', '⬜️', '⬜️', '⬛️'], | ||
['⬛️', '⬛️', '⬜️', '⬛️', '⬛️', '⬛️'], | ||
['🐭', '⬜️', '⬜️', '⬛️', '⬛️', '⬛️'] | ||
]; | ||
|
||
let mickeyX = 5, mickeyY = 0; // Posición inicial de Mickey | ||
let escaped = false; | ||
|
||
// Imprime el estado actual del laberinto | ||
function printLabyrinth() { | ||
labyrinth.forEach(row => { | ||
console.log(row.join(' ')); | ||
}); | ||
console.log(); | ||
} | ||
|
||
// Mueve a Mickey a una nueva posición y valida el movimiento | ||
function moveMickey(newX, newY) { | ||
// Validación de límites del laberinto | ||
if (newX < 0 || newX >= 6 || newY < 0 || newY >= 6) { | ||
console.log("Movimiento inválido, fuera de los límites del laberinto."); | ||
return false; | ||
} | ||
// Validación de obstáculos | ||
if (labyrinth[newX][newY] === '⬛️') { | ||
console.log("Movimiento inválido, obstáculo en el camino."); | ||
return false; | ||
} | ||
|
||
// Actualiza la posición de Mickey | ||
labyrinth[mickeyX][mickeyY] = '⬜️'; // Limpia la posición anterior | ||
mickeyX = newX; | ||
mickeyY = newY; | ||
|
||
// Verificación si Mickey ha llegado a la salida | ||
if (labyrinth[mickeyX][mickeyY] === '🚪') { | ||
console.log("¡Mickey ha escapado!"); | ||
return true; | ||
} | ||
|
||
labyrinth[mickeyX][mickeyY] = '🐭'; // Actualiza la posición de Mickey | ||
return false; | ||
} | ||
|
||
// Solicita al usuario que introduzca una dirección y procesa el movimiento | ||
function askDirection() { | ||
|
||
console.clear(); | ||
|
||
printLabyrinth(); // Muestra el estado actual del laberinto | ||
rl.question('Introduce dirección (arriba, abajo, izquierda, derecha): ', (direction) => { | ||
let newX = mickeyX, newY = mickeyY; | ||
|
||
// Determina la nueva posición basada en la dirección ingresada | ||
if (direction === "arriba") newX--; | ||
else if (direction === "abajo") newX++; | ||
else if (direction === "izquierda") newY--; | ||
else if (direction === "derecha") newY++; | ||
else console.log("Dirección inválida. Intenta nuevamente."); | ||
|
||
// Intenta mover a Mickey si no ha escapado todavía | ||
if (!escaped) escaped = moveMickey(newX, newY); | ||
|
||
// Si Mickey no ha escapado, pide otra dirección | ||
if (!escaped) askDirection(); | ||
else rl.close(); // Cierra la interfaz si Mickey ha escapado | ||
}); | ||
} | ||
|
||
askDirection(); // Inicia el ciclo de interacción con el usuario |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
# Autor: Héctor Adán | ||
# GitHub: https://github.com/hectorio23 | ||
import subprocess | ||
|
||
# Imprime el estado actual del laberinto | ||
def print_labyrinth(labyrinth): | ||
for row in labyrinth: | ||
print(" ".join(row)) | ||
print() | ||
|
||
# Mueve a Mickey a una nueva posición y valida el movimiento | ||
def move_mickey(labyrinth, mickey_x, mickey_y, new_x, new_y): | ||
# Validación de límites del laberinto | ||
if new_x < 0 or new_x >= 6 or new_y < 0 or new_y >= 6: | ||
print("Movimiento inválido, fuera de los límites del laberinto.") | ||
return mickey_x, mickey_y, False | ||
# Validación de obstáculos | ||
if labyrinth[new_x][new_y] == '⬛️': | ||
print("Movimiento inválido, obstáculo en el camino.") | ||
return mickey_x, mickey_y, False | ||
|
||
# Actualiza la posición de Mickey | ||
labyrinth[mickey_x][mickey_y] = '⬜️' # Limpia la posición anterior | ||
mickey_x, mickey_y = new_x, new_y | ||
|
||
# Verificación si Mickey ha llegado a la salida | ||
if labyrinth[mickey_x][mickey_y] == '🚪': | ||
print("¡Mickey ha escapado!") | ||
return mickey_x, mickey_y, True | ||
|
||
labyrinth[mickey_x][mickey_y] = '🐭' # Actualiza la posición de Mickey | ||
return mickey_x, mickey_y, False | ||
|
||
# Definición inicial del laberinto | ||
labyrinth = [ | ||
['⬜️', '⬜️', '⬜️', '⬛️', '⬛️', '⬛️'], | ||
['⬛️', '⬛️', '⬜️', '⬛️', '🚪', '⬛️'], | ||
['⬛️', '⬛️', '⬜️', '⬛️', '⬜️', '⬛️'], | ||
['⬛️', '⬛️', '⬜️', '⬜️', '⬜️', '⬛️'], | ||
['⬛️', '⬛️', '⬜️', '⬛️', '⬛️', '⬛️'], | ||
['🐭', '⬜️', '⬜️', '⬛️', '⬛️', '⬛️'] | ||
] | ||
|
||
# Posición inicial de Mickey | ||
mickey_x, mickey_y = 5, 0 | ||
escaped = False | ||
|
||
# Ciclo principal de interacción con el usuario | ||
while not escaped: | ||
subprocess.call(['clear']) | ||
|
||
print_labyrinth(labyrinth) # Muestra el estado actual del laberinto | ||
direction = input("Introduce dirección (arriba, abajo, izquierda, derecha): ") | ||
|
||
# Procesa la dirección ingresada y mueve a Mickey si es válido | ||
if direction == "arriba": | ||
mickey_x, mickey_y, escaped = move_mickey(labyrinth, mickey_x, mickey_y, mickey_x - 1, mickey_y) | ||
elif direction == "abajo": | ||
mickey_x, mickey_y, escaped = move_mickey(labyrinth, mickey_x, mickey_y, mickey_x + 1, mickey_y) | ||
elif direction == "izquierda": | ||
mickey_x, mickey_y, escaped = move_mickey(labyrinth, mickey_x, mickey_y, mickey_x, mickey_y - 1) | ||
elif direction == "derecha": | ||
mickey_x, mickey_y, escaped = move_mickey(labyrinth, mickey_x, mickey_y, mickey_x, mickey_y + 1) | ||
else: | ||
print("Dirección inválida. Intenta nuevamente.") |