Crear un juego de Sokoban con deshacer es un proyecto práctico de C++ para quienes ya conocen los fundamentos del lenguaje. Crearás un juego de terminal en el que el jugador empuja cajas hasta las metas, rechaza movimientos imposibles y puede deshacer por completo la acción anterior.
El curso combina dos laboratorios guiados con un desafío independiente. Primero implementarás los pasos, el empuje de una sola caja y la comprobación real de las metas. Después guardarás estados completos y los restaurarás al deshacer. Por último, aplicarás las mismas reglas a un almacén diferente con dos cajas. Cada laboratorio proporciona sus propios archivos; no depende de archivos ni de una partida del entorno anterior.
Lo que aprenderás
Al completar el curso, podrás:
- separar las paredes y metas fijas de las posiciones cambiantes del jugador y las cajas;
- comprobar las condiciones de movimiento y empuje antes de modificar el estado, de modo que una acción rechazada no cambie nada;
- determinar si todas las cajas ocupan metas y recalcular la finalización después de un movimiento o de deshacer;
- copiar estados completos a un historial
vectorsolo para movimientos legales y restaurar con seguridad al jugador y todas las cajas; - compilar y jugar con un motor reutilizable en C++ que admita distintas rutas legales y conserve los niveles originales.
A quién va dirigido este curso
Este curso está dirigido a estudiantes de C++ que quieren usar objetos, copias por valor y contenedores estándar para crear un programa interactivo con reglas claras.
Requisitos previos: Navegación básica en la terminal y familiaridad con clases, funciones, cadenas y vector de C++. Los laboratorios guiados explican el modelo de terreno fijo, las condiciones de movimiento, las instantáneas completas y las operaciones del historial.
Entorno de aprendizaje: LabEx proporciona un entorno Linux preparado en el navegador, con compilador C++17, estructura de código, niveles pequeños, un ejemplo funcional y Terminal. Los controles, mensajes y salidas de comandos del juego permanecen en inglés.
Preguntas frecuentes
¿Escribo toda la aplicación del juego?
Implementarás las funciones de movimiento, finalización y deshacer en engine.cpp. La carga de niveles, el dibujo de texto y la lectura de comandos están preparados. Compilarás tu motor en un programa jugable, sin instalación local ni motor gráfico.
¿Debo encontrar la solución más corta?
No. Se aceptan distintas rutas legales. El proyecto se centra en cambios de estado correctos y una restauración completa, no en resolver automáticamente el puzle ni en minimizar los movimientos.
¿Puedo deshacer un empuje que complete el nivel?
Sí. Puedes seguir jugando después de completarlo, y deshacer restaura al jugador y todas las cajas, incluido el estado anterior al empuje ganador. El historial pertenece a la partida actual en memoria; volver a ejecutar el programa inicia una partida nueva, no carga una sesión guardada.

