Skip to content

Commit

Permalink
mouredev#33 - C++
Browse files Browse the repository at this point in the history
  • Loading branch information
hectorio23 committed Sep 2, 2024
1 parent 6b96020 commit 5453231
Show file tree
Hide file tree
Showing 3 changed files with 228 additions and 0 deletions.
78 changes: 78 additions & 0 deletions Roadmap/33 - RESCATANDO A MICKEY/c++/hectorio23.cpp
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;
}
85 changes: 85 additions & 0 deletions Roadmap/33 - RESCATANDO A MICKEY/javascript/hectorio23.js
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
65 changes: 65 additions & 0 deletions Roadmap/33 - RESCATANDO A MICKEY/python/hectorio23.py
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.")

0 comments on commit 5453231

Please sign in to comment.