Sokoban Game
This commit is contained in:
parent
b25133dcba
commit
c032ee7fbd
985
Sokoban Game/Source.cpp
Normal file
985
Sokoban Game/Source.cpp
Normal file
@ -0,0 +1,985 @@
|
||||
//Fernando Méndez //Sokoban Game
|
||||
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
#include <Windows.h>
|
||||
#include <conio.h>
|
||||
#include <iomanip>
|
||||
using namespace std;
|
||||
|
||||
//Constantes:
|
||||
const int MAX = 50;
|
||||
const int MAXH = 12;
|
||||
const int MAXE = 100;
|
||||
|
||||
//Tipos:
|
||||
typedef enum tCasilla{ Libre, Muro, DestinoL, DestinoC, DestinoJ, Jugador, Caja };
|
||||
typedef tCasilla tTablero[MAX][MAX];
|
||||
typedef struct{
|
||||
tTablero tablero;
|
||||
int nfilas;
|
||||
int ncolumnas;
|
||||
int fila;
|
||||
int columna;
|
||||
int numCajas;
|
||||
int numCajasColocadas;
|
||||
}tSokoban;
|
||||
typedef struct{
|
||||
tSokoban tableros[MAXH];
|
||||
int cont;
|
||||
}tHistoria;
|
||||
typedef struct{
|
||||
tSokoban estado;
|
||||
int numMovimientos;
|
||||
string nFichero;
|
||||
int nivel;
|
||||
tHistoria historial;
|
||||
}tJuego;
|
||||
typedef enum tTecla{ Arriba, Abajo, Derecha, Izquierda, Salir, Nada, Deshacer };
|
||||
typedef struct{
|
||||
string nombreFichero;
|
||||
int nivel;
|
||||
int contadorMovimientos;
|
||||
}tPartida;
|
||||
typedef tPartida tExitos[MAXE];
|
||||
typedef struct{
|
||||
string nombre;
|
||||
tExitos exitos;
|
||||
int contadorGanadas;
|
||||
}tInfo;
|
||||
|
||||
//Funciones:
|
||||
void ejecutarMenu(tJuego &juego, tInfo &informacion); //Ejecuta la opcion del menú que ha elegido el usuario en la funcion menu().
|
||||
int menu(); //Muestra el menú del programa con las opciones posibles. Devuelve la opción elegida por el usuario.
|
||||
void jugar(tJuego &Juego, tInfo &informacion); //Una vez cargado el tablero, ejecuta el juego hasta que el jugador gane o pulse ESC.
|
||||
void colorFondo(int color); //Función para implementar los colores de las distintas casillas.
|
||||
void dibujaCasilla(tCasilla casilla); //Muestra una casilla del tablero.
|
||||
void dibujar(const tJuego &juego); //Muestra el tablero del juego, el nombre del fichero desde que se ha cargado, su nivel y el número de movimientos realizados.
|
||||
void inicializa(tJuego &juego); //Inicializa el tablero vacio y el numMovimientos a 0.
|
||||
bool cargarJuego(tJuego &juego); //Solicita al usuario el nombre del archivo y el nivel que quiere jugar y carga ambos.
|
||||
bool cargarNivel(ifstream &fichero, tJuego &juego, int nivel); //Busca el nivel en el fichero y ducuelve un booleano (true si lo ha encontrado, false en caso contrario).
|
||||
void cargar(ifstream &fichero, tJuego &juego); //Una vez encontrado el nivel en el fichero, trasforma cada carácter de cada línea del nivel en un tipo tCasilla.
|
||||
tTecla leerTecla(); //Devuelve el valor tTecla que el jugador ha introducido por teclado pulsando una de las fechas de dirección para moverse, ESC para salir o no devuelve nada si se ha pulsado otra tecla.
|
||||
void hacerMovimiento(tJuego &juego, tTecla tecla); //Dado el movimiento del jugador, realiza ese movimiento o no hace nada si no se puede realizar dicho movimiento.
|
||||
void movimientoArriba(tJuego &juego); //Realiza un movimiento hacia arriba.
|
||||
void movimientoAbajo(tJuego &juego); //Realiza un movimiento hacia abajo.
|
||||
void movimientoDerecha(tJuego &juego); //Realiza un movimiento hacia la derecha.
|
||||
void movimientoIzquierda(tJuego &juego); //Realiza un movimiento hacia la izquierda.
|
||||
void guardarHistorial(tJuego &juego); //Guarda en un array el tablero de cada movimiento anteriormente realizado.
|
||||
bool bloqueado(const tJuego &juego); //Devuelve true si alguna de las cajas ha quedado atrapada en una esquina, false, mientras ninguna caja esté atrapada.
|
||||
bool deshacerMovimiento(tJuego &juego); //Deshace el movimiento anterior, hasta un máximo de MAXH. Devuelve true si el movimiento se ha deshecho correctamente, false en caso contrario.
|
||||
void cargarRanking(tInfo &informacion); //Dado un nombre de un jugador, carga el archivo con la información de sus anteriores partidas. En caso de no existir, creará un archivo nuevo.
|
||||
void ordenar(tInfo &informacion); //Ordena la información de las partidas de un usuario, teniendo en cuenta el nombre de los archivos de las partidas y el nivel jugado. Además si un nivel ya se había jugado, sólo guarda la información en caso de haberlo superado en menos movimientos.
|
||||
void mostar(tInfo &informacion); //Muesta las partidas jugadas por un usuario, clasificandolas en tres campos, nombre del fichero del tablero, nivel que se ha jugado y número de movimientos en los que se ha resuelto el tablero.
|
||||
void guardar(tInfo &informacion); //Guarda en el archivo del jugador la información actualizada de las partidas jugadas una vez ganada una partida.
|
||||
void nuevaPartida(tJuego &juego, tInfo &informacion); //Si el usuario gana una partida, esta función guarda en el array tInfo la información de la partida, para más tarde (y mediante las funciones ordenar y guardar) compararla, ordenarla y guardarla en el fichero del jugador.
|
||||
|
||||
int main(){
|
||||
tJuego juego;
|
||||
tInfo informacion;
|
||||
|
||||
cargarRanking(informacion);
|
||||
ejecutarMenu(juego, informacion);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ejecutarMenu(tJuego &juego, tInfo &informacion){
|
||||
int opcion = 1; //Entero que representa la opción escogida por el jugador.
|
||||
bool carga = false; //Booleano que se iguala a la función cargarJuego(juego) para comprobar si se ha cargado el fichero del nivel (true) o no (false).
|
||||
|
||||
system("cls");
|
||||
while (opcion != 0){
|
||||
opcion = menu();
|
||||
switch (opcion){
|
||||
case 1: inicializa(juego); carga = cargarJuego(juego); if (carga == true){ jugar(juego, informacion); } break;
|
||||
case 2: mostar(informacion); break;
|
||||
case 0: guardar(informacion); break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int menu(){
|
||||
//Parámetros: no tiene.
|
||||
//Devuelve: la opción del menú elegida por el usuario.
|
||||
|
||||
int opc = 1;
|
||||
|
||||
cout << "<--------------Menu-------------->" << endl;
|
||||
cout << " 1-Jugar partida." << endl;
|
||||
cout << " 2-Mostrar partidas ganadas." << endl;
|
||||
cout << " 0-Salir" << endl;
|
||||
cout << "<-------------------------------->" << endl;
|
||||
cout << endl;
|
||||
|
||||
cout << "Seleccione una opcion del menu: ";
|
||||
cin >> opc;
|
||||
while (opc < 0 || opc > 2){
|
||||
cout << "Seleccione una opcion del menu (entre 0 y 2): ";
|
||||
cin >> opc;
|
||||
}
|
||||
return opc;
|
||||
}
|
||||
|
||||
void jugar(tJuego &juego, tInfo &informacion){
|
||||
bool ganado = false; //Variable booleana que se iguala a true en caso de que el jugador haya completado un tablero para salir del bucle del juego y volver al menú.
|
||||
tTecla tecla = Nada; //Tecla pulsada por el jugador que se lee mediante la función leerTecla().
|
||||
bool estaBloqueado = false; //Variable booleana que se iguala a la funció bloqueado(juego) para que en caso de que haya una caja bloqueada se ponga a true y avise al jugador.
|
||||
|
||||
while ((tecla != Salir) && (ganado == false)){
|
||||
if (juego.estado.numCajasColocadas != juego.estado.numCajas){
|
||||
estaBloqueado = bloqueado(juego);
|
||||
if (estaBloqueado == true){
|
||||
dibujar(juego);
|
||||
cout << "Te has quedado bloqueado. Pulsa D/d para deshacer movimiento." << endl;
|
||||
tecla = leerTecla();
|
||||
hacerMovimiento(juego, tecla);
|
||||
}
|
||||
else{
|
||||
dibujar(juego);
|
||||
tecla = leerTecla();
|
||||
hacerMovimiento(juego, tecla);
|
||||
}
|
||||
}
|
||||
if (juego.estado.numCajasColocadas == juego.estado.numCajas){
|
||||
dibujar(juego);
|
||||
cout << "Enhorabuena, has ganado." << endl;
|
||||
nuevaPartida(juego, informacion);
|
||||
ordenar(informacion);
|
||||
ganado = true;
|
||||
system("PAUSE");
|
||||
}
|
||||
}
|
||||
system("cls");
|
||||
}
|
||||
|
||||
void colorFondo(int color) {
|
||||
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||
SetConsoleTextAttribute(handle, 15 | (color << 4));
|
||||
}
|
||||
|
||||
void dibujaCasilla(tCasilla casilla){
|
||||
int color = 0; //Variable entera que representa el color de fondo correspondiente a cada casilla.
|
||||
|
||||
switch (casilla){
|
||||
case Libre: color = 1; break;
|
||||
case Muro: color = 2; break;
|
||||
case DestinoL: color = 12; break;
|
||||
case DestinoC: color = 4; break;
|
||||
case DestinoJ: color = 4; break;
|
||||
case Jugador: color = 6; break;
|
||||
case Caja: color = 8; break;
|
||||
default: color = 0;
|
||||
}
|
||||
|
||||
colorFondo(color);
|
||||
}
|
||||
|
||||
void dibujar(const tJuego &juego){
|
||||
|
||||
system("cls");
|
||||
cout << "Fichero: " << juego.nFichero << " Nivel: " << juego.nivel << endl;
|
||||
|
||||
for (int i = 0; i < juego.estado.nfilas; i++){
|
||||
cout << endl;
|
||||
for (int j = 0; j <= juego.estado.ncolumnas; j++){
|
||||
dibujaCasilla(juego.estado.tablero[i][j]);
|
||||
if (juego.estado.tablero[i][j] == Libre){
|
||||
cout << char(0) << char(0);
|
||||
}
|
||||
if (juego.estado.tablero[i][j] == Muro){
|
||||
cout << char(176) << char(176);
|
||||
}
|
||||
if (juego.estado.tablero[i][j] == DestinoL){
|
||||
cout << char(46) << char(46);
|
||||
}
|
||||
if (juego.estado.tablero[i][j] == DestinoC){
|
||||
cout << char(91) << char(93);
|
||||
}
|
||||
if (juego.estado.tablero[i][j] == DestinoJ){
|
||||
cout << char(48) << char(48);
|
||||
}
|
||||
if (juego.estado.tablero[i][j] == Jugador){
|
||||
cout << char(48) << char(48);
|
||||
}
|
||||
if (juego.estado.tablero[i][j] == Caja){
|
||||
cout << char(40) << char(41);
|
||||
}
|
||||
}
|
||||
}
|
||||
cout << endl << endl;
|
||||
colorFondo(0);
|
||||
|
||||
cout << "Numero de movimientos: " << juego.numMovimientos << endl;
|
||||
}
|
||||
|
||||
void inicializa(tJuego &juego){
|
||||
juego.numMovimientos = 0;
|
||||
juego.nivel = 0;
|
||||
juego.estado.nfilas = 0;
|
||||
juego.estado.ncolumnas = 0;
|
||||
juego.estado.numCajas = 0;
|
||||
juego.estado.numCajasColocadas = 0;
|
||||
juego.estado.fila = 0;
|
||||
juego.estado.columna = 0;
|
||||
juego.historial.cont = 0;
|
||||
|
||||
for (int i = 0; i < MAX; i++){
|
||||
for (int j = 0; j < MAX; j++){
|
||||
juego.estado.tablero[i][j] = Libre;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
bool cargarJuego(tJuego &juego){
|
||||
bool carga = true; //Variable booleana que se iguala a la función cargarNivel(fichero, juego, nivel), para ponerse a true en caso de que de que el fichero se haya cargado correctamente. En caso de que no se haya encontrado el archivo, se iguala directamente a false.
|
||||
string archivo; //Archivo a cargar. Se iguala al nombre del archivo, con extensión, introducido por el usuario.
|
||||
int nivel = 0; //Nivel a cargar del archivo, seleccionado por el jugador.
|
||||
|
||||
cout << "Introduzca el nombre del fichero: ";
|
||||
cin >> juego.nFichero;
|
||||
archivo = juego.nFichero;
|
||||
|
||||
ifstream fichero;
|
||||
fichero.open(archivo);
|
||||
if (!fichero.is_open()){
|
||||
cout << "No se ha encontrado el archivo." << endl;
|
||||
system("PAUSE");
|
||||
system("cls");
|
||||
carga = false;
|
||||
}
|
||||
else{
|
||||
cout << "Introduzca el nivel que quiere jugar: ";
|
||||
cin >> juego.nivel;
|
||||
nivel = juego.nivel;
|
||||
carga = cargarNivel(fichero, juego, nivel);
|
||||
if (carga == false){
|
||||
cout << "Error, no se ha encontrado el nivel." << endl;
|
||||
system("PAUSE");
|
||||
system("cls");
|
||||
}
|
||||
}
|
||||
fichero.close();
|
||||
|
||||
return carga; //Devuelve true en caso de carga correcta del archivo, false en caso contrario.
|
||||
}
|
||||
|
||||
bool cargarNivel(ifstream &fichero, tJuego &juego, int nivel){
|
||||
string linea; //Cadena de caracteres que se carga al leer cada una de las líneas del nivel a cargar.
|
||||
string miNivel = "Level " + to_string(nivel); // Cadena de caracteres que sirve para leer y encontrar el nivel seleccionado por el jugador. Se compone de la palabra "Level" + el nivl elegido por el usuario.
|
||||
bool cargarNivel = false; //Variable booleana que devuelve la función.
|
||||
|
||||
|
||||
getline(fichero, linea);
|
||||
while ((linea != miNivel) && (!fichero.eof())){
|
||||
getline(fichero, linea);
|
||||
}
|
||||
if (fichero.eof()){
|
||||
cargarNivel = false;
|
||||
}
|
||||
else{
|
||||
cargar(fichero, juego);
|
||||
cargarNivel = true;
|
||||
}
|
||||
|
||||
return cargarNivel; //Devuelve true en caso de que se haya encontrado el nivel, false en caso de que haya llegado al final del archivo sin encontrarlo.
|
||||
}
|
||||
|
||||
void cargar(ifstream &fichero, tJuego &juego){
|
||||
tCasilla casilla = Caja; //Representa cada uno de las posibles casillas del tablero.
|
||||
int contadorC = 0; //Contador de las columnas del nivel cargado.
|
||||
int contadorF = 0; //Contador de las filas del nivel cargado.
|
||||
char tipo; //Cada uno de los caracteres que se lee del archivo y luego se iguala a su correspondiente casilla.
|
||||
string linea; //Cadena de caracteres que se lee del archivo.
|
||||
|
||||
getline(fichero, linea);
|
||||
while ((!fichero.eof()) && (linea != "")){
|
||||
for (int i = 0; i < linea.length(); i++){
|
||||
tipo = linea[i];
|
||||
switch (tipo){
|
||||
case '#': juego.estado.tablero[contadorF][i] = Muro; break;
|
||||
case '.': juego.estado.tablero[contadorF][i] = DestinoL; break;
|
||||
case '*': juego.estado.tablero[contadorF][i] = DestinoC; juego.estado.numCajas++; juego.estado.numCajasColocadas++; break;
|
||||
case '+': juego.estado.tablero[contadorF][i] = DestinoJ; juego.estado.fila = contadorF; juego.estado.columna = i; break;
|
||||
case '@': juego.estado.tablero[contadorF][i] = Jugador; juego.estado.fila = contadorF; juego.estado.columna = i; break;
|
||||
case '$': juego.estado.tablero[contadorF][i] = Caja; juego.estado.numCajas++; break;
|
||||
case ' ': juego.estado.tablero[contadorF][i] = Libre; break;
|
||||
default: juego.estado.tablero[contadorF][i] = Libre;
|
||||
}
|
||||
if (i > contadorC){
|
||||
contadorC = i;
|
||||
}
|
||||
}
|
||||
contadorF++;
|
||||
getline(fichero, linea);
|
||||
}
|
||||
|
||||
juego.estado.nfilas = contadorF;
|
||||
juego.estado.ncolumnas = contadorC;
|
||||
}
|
||||
|
||||
tTecla leerTecla(){
|
||||
tTecla tecla = Nada; //Tecla pulsada por el usuario.
|
||||
int dir = 27; //Variable entera que representa el número de la tecla pulsada por el jugador.
|
||||
|
||||
cin.sync();
|
||||
dir = _getch();
|
||||
if (dir == 0xe0){
|
||||
dir = _getch();
|
||||
switch (dir){
|
||||
case 72: tecla = Arriba; break;
|
||||
case 80: tecla = Abajo; break;
|
||||
case 77: tecla = Derecha; break;
|
||||
case 75: tecla = Izquierda; break;
|
||||
}
|
||||
}
|
||||
else{
|
||||
switch (dir){
|
||||
case 27: tecla = Salir; break;
|
||||
case 68: tecla = Deshacer; break;
|
||||
case 100: tecla = Deshacer; break;
|
||||
}
|
||||
}
|
||||
|
||||
return tecla; //Devuelve el tipo tTecla con la tecla pulsada.
|
||||
}
|
||||
|
||||
void hacerMovimiento(tJuego &juego, tTecla tecla){
|
||||
|
||||
switch (tecla){
|
||||
case Arriba: movimientoArriba(juego); break;
|
||||
case Abajo: movimientoAbajo(juego); break;
|
||||
case Derecha: movimientoDerecha(juego); break;
|
||||
case Izquierda: movimientoIzquierda(juego); break;
|
||||
case Salir: break;
|
||||
case Nada: break;
|
||||
case Deshacer: deshacerMovimiento(juego); break;
|
||||
}
|
||||
guardarHistorial(juego);
|
||||
}
|
||||
|
||||
void guardarHistorial(tJuego &juego){
|
||||
int contador = juego.historial.cont; //Contador del número de tableros guardados hasta el momento.
|
||||
|
||||
if (contador < MAXH){
|
||||
juego.historial.tableros[contador].fila = juego.estado.fila;
|
||||
juego.historial.tableros[contador].columna = juego.estado.columna;
|
||||
juego.historial.tableros[contador].nfilas = juego.estado.nfilas;
|
||||
juego.historial.tableros[contador].ncolumnas = juego.estado.ncolumnas;
|
||||
juego.historial.tableros[contador].numCajas = juego.estado.numCajas;
|
||||
juego.historial.tableros[contador].numCajasColocadas = juego.estado.numCajasColocadas;
|
||||
|
||||
for (int i = 0; i <= juego.historial.tableros[contador].nfilas; i++){
|
||||
for (int j = 0; j <= juego.historial.tableros[contador].ncolumnas; j++){
|
||||
juego.historial.tableros[contador].tablero[i][j] = juego.estado.tablero[i][j];
|
||||
}
|
||||
}
|
||||
}
|
||||
else{
|
||||
contador = MAXH - 1;
|
||||
|
||||
juego.historial.tableros[contador].fila = juego.estado.fila;
|
||||
juego.historial.tableros[contador].columna = juego.estado.columna;
|
||||
juego.historial.tableros[contador].nfilas = juego.estado.nfilas;
|
||||
juego.historial.tableros[contador].ncolumnas = juego.estado.ncolumnas;
|
||||
juego.historial.tableros[contador].numCajas = juego.estado.numCajas;
|
||||
juego.historial.tableros[contador].numCajasColocadas = juego.estado.numCajasColocadas;
|
||||
|
||||
for (int i = 0; i <= juego.historial.tableros[contador].nfilas; i++){
|
||||
for (int j = 0; j <= juego.historial.tableros[contador].ncolumnas; j++){
|
||||
juego.historial.tableros[contador].tablero[i][j] = juego.estado.tablero[i][j];
|
||||
}
|
||||
}
|
||||
|
||||
for (int x = 0; x < contador; x++){
|
||||
juego.historial.tableros[x].fila = juego.historial.tableros[x + 1].fila;
|
||||
juego.historial.tableros[x].columna = juego.historial.tableros[x + 1].columna;
|
||||
juego.historial.tableros[x].nfilas = juego.historial.tableros[x + 1].nfilas;
|
||||
juego.historial.tableros[x].ncolumnas = juego.historial.tableros[x + 1].ncolumnas;
|
||||
juego.historial.tableros[x].numCajas = juego.historial.tableros[x + 1].numCajas;
|
||||
juego.historial.tableros[x].numCajasColocadas = juego.historial.tableros[x + 1].numCajasColocadas;
|
||||
|
||||
for (int i = 0; i <= juego.historial.tableros[contador].nfilas; i++){
|
||||
for (int j = 0; j <= juego.historial.tableros[contador].ncolumnas; j++){
|
||||
juego.historial.tableros[x].tablero[i][j] = juego.historial.tableros[x + 1].tablero[i][j];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
juego.historial.cont = contador;
|
||||
}
|
||||
}
|
||||
|
||||
bool bloqueado(const tJuego &juego){
|
||||
bool estaBloqueada = false; //Variable booleana que representa si una caja está bloqueada entre dos muros.
|
||||
|
||||
for (int i = 0; i < juego.estado.nfilas; i++){
|
||||
for (int j = 0; j <= juego.estado.ncolumnas; j++){
|
||||
if (juego.estado.tablero[i][j] == Caja){
|
||||
if ((juego.estado.tablero[i + 1][j] == Muro && juego.estado.tablero[i][j + 1] == Muro) || (juego.estado.tablero[i - 1][j] == Muro && juego.estado.tablero[i][j + 1] == Muro) || (juego.estado.tablero[i - 1][j] == Muro && juego.estado.tablero[i][j - 1] == Muro) || (juego.estado.tablero[i + 1][j] == Muro && juego.estado.tablero[i][j - 1] == Muro)){
|
||||
estaBloqueada = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return estaBloqueada; //Devuelve true si una caja está bloqueada, false en caso contrario.
|
||||
}
|
||||
|
||||
bool deshacerMovimiento(tJuego &juego){
|
||||
bool desMov = false; //Variable booleana que representa si un movimiento se ha deshecho correctamente.
|
||||
int contador = juego.historial.cont - 1; //Entero que representa el número de tableros guardados hasta el momento.
|
||||
|
||||
if (contador > 0){
|
||||
juego.estado.fila = juego.historial.tableros[contador].fila;
|
||||
juego.estado.columna = juego.historial.tableros[contador].columna;
|
||||
juego.estado.nfilas = juego.historial.tableros[contador].nfilas;
|
||||
juego.estado.ncolumnas = juego.historial.tableros[contador].ncolumnas;
|
||||
juego.estado.numCajas = juego.historial.tableros[contador].numCajas;
|
||||
juego.estado.numCajasColocadas = juego.historial.tableros[contador].numCajasColocadas;
|
||||
juego.numMovimientos--;
|
||||
|
||||
for (int i = 0; i <= juego.estado.nfilas; i++){
|
||||
for (int j = 0; j <= juego.estado.ncolumnas; j++){
|
||||
juego.estado.tablero[i][j] = juego.historial.tableros[contador].tablero[i][j];
|
||||
}
|
||||
}
|
||||
|
||||
desMov = true;
|
||||
juego.historial.cont--;
|
||||
}
|
||||
else{
|
||||
desMov = false;
|
||||
}
|
||||
|
||||
return desMov; //Devuelve true si el movimiento se ha deshecho correctamente, false en caso contrario.
|
||||
}
|
||||
|
||||
void cargarRanking(tInfo &informacion){
|
||||
string nombre; //Nombre el usuario,
|
||||
string nomFichero; //Nombre del fichero que se le asigna al usuario en base a su nombre.
|
||||
int lvl; //Entero que se lee del archivo y representa el o los niveles que ha superado el usuario con anterioridad.
|
||||
int movimientos; //Entero que se lee del archivo representa el número de movimientos que ha empleado el usuario en resolver un nivel.
|
||||
int contador = 0; //Contador que va aumentado según el número de tableros que haya resuelto el usuario anteriormente.
|
||||
|
||||
cout << "Introduzca su nombre: ";
|
||||
cin >> nombre;
|
||||
informacion.nombre = nombre;
|
||||
string miArchivo = nombre + ".txt";
|
||||
|
||||
ifstream archivo;
|
||||
archivo.open(miArchivo);
|
||||
if (!archivo.is_open()){
|
||||
ofstream fichero;
|
||||
fichero.open(miArchivo);
|
||||
nomFichero = "XXX";
|
||||
fichero << nomFichero;
|
||||
cout << "No se encuentra la informacion del jugador. Se ha creado una nueva." << endl;
|
||||
system("PAUSE");
|
||||
fichero.close();
|
||||
}
|
||||
else{
|
||||
while ((contador < MAXE) && (nomFichero != "XXX")){
|
||||
archivo >> nomFichero;
|
||||
informacion.exitos[contador].nombreFichero = nomFichero;
|
||||
archivo >> lvl;
|
||||
informacion.exitos[contador].nivel = lvl;
|
||||
archivo >> movimientos;
|
||||
informacion.exitos[contador].contadorMovimientos = movimientos;
|
||||
|
||||
contador++;
|
||||
}
|
||||
|
||||
informacion.contadorGanadas = contador - 1;
|
||||
cout << "Bienvenido " << informacion.nombre << endl;
|
||||
system("PAUSE");
|
||||
}
|
||||
archivo.close();
|
||||
}
|
||||
|
||||
void ordenar(tInfo &informacion){
|
||||
int pos = informacion.contadorGanadas - 1; //Entero que representa la posición en la que se encuentra la información de un tablero resuelto cargado del archivo con respecto a los demás tableros resueltos.
|
||||
int tmp; //Entero auxiliar.
|
||||
string aux; //Cadena de caracteres auxiliar.
|
||||
|
||||
while (pos > 0){
|
||||
if ((informacion.exitos[pos].nombreFichero == informacion.exitos[pos - 1].nombreFichero) && (informacion.exitos[pos].nivel == informacion.exitos[pos - 1].nivel)){
|
||||
if (informacion.exitos[pos].contadorMovimientos < informacion.exitos[pos - 1].contadorMovimientos){
|
||||
informacion.exitos[pos - 1].nombreFichero = informacion.exitos[pos].nombreFichero;
|
||||
informacion.exitos[pos - 1].nivel = informacion.exitos[pos].nivel;
|
||||
informacion.exitos[pos - 1].contadorMovimientos = informacion.exitos[pos].contadorMovimientos;
|
||||
}
|
||||
for (int i = pos; i < informacion.contadorGanadas - 1; i++){
|
||||
informacion.exitos[i].nombreFichero = informacion.exitos[i + 1].nombreFichero;
|
||||
informacion.exitos[i].nivel = informacion.exitos[i + 1].nivel;
|
||||
informacion.exitos[i].contadorMovimientos = informacion.exitos[i + 1].contadorMovimientos;
|
||||
}
|
||||
informacion.contadorGanadas--;
|
||||
}
|
||||
|
||||
if ((informacion.exitos[pos].nombreFichero < informacion.exitos[pos - 1].nombreFichero) || ((informacion.exitos[pos].nombreFichero == informacion.exitos[pos - 1].nombreFichero) && (informacion.exitos[pos].nivel < informacion.exitos[pos - 1].nivel))){
|
||||
aux = informacion.exitos[pos].nombreFichero;
|
||||
informacion.exitos[pos].nombreFichero = informacion.exitos[pos - 1].nombreFichero;
|
||||
informacion.exitos[pos - 1].nombreFichero = aux;
|
||||
|
||||
tmp = informacion.exitos[pos].nivel;
|
||||
informacion.exitos[pos].nivel = informacion.exitos[pos - 1].nivel;
|
||||
informacion.exitos[pos - 1].nivel = tmp;
|
||||
|
||||
tmp = informacion.exitos[pos].contadorMovimientos;
|
||||
informacion.exitos[pos].contadorMovimientos = informacion.exitos[pos - 1].contadorMovimientos;
|
||||
informacion.exitos[pos - 1].contadorMovimientos = tmp;
|
||||
}
|
||||
pos--;
|
||||
}
|
||||
}
|
||||
|
||||
void mostar(tInfo &informacion){
|
||||
int i = 0; //Variable entera que lleva la cuenta del número de tableros resueltos mostrados, no puede ser mayor que la variable 'contador'.
|
||||
int contador = informacion.contadorGanadas; //Variable entera que representa el número de tableros resueltos que se han leido del archivo personal del usuario.
|
||||
|
||||
system("cls");
|
||||
cout << "Tableros resueltos por " << informacion.nombre << endl << endl;
|
||||
cout << "NOMBRE FICHERO" << setw(10) << "NIVEL" << setw(20) << "MOVIMIENTOS" << endl;
|
||||
cout << "--------------------------------------------------" << endl;
|
||||
while (i < contador){
|
||||
cout << informacion.exitos[i].nombreFichero << setw(10) << informacion.exitos[i].nivel << setw(18) << informacion.exitos[i].contadorMovimientos << endl;
|
||||
i++;
|
||||
}
|
||||
cout << "--------------------------------------------------" << endl << endl;
|
||||
system("PAUSE");
|
||||
system("cls");
|
||||
}
|
||||
|
||||
void guardar(tInfo &informacion){
|
||||
int contador = informacion.contadorGanadas; //Variable entera que representa el número de tableros resueltos que se han leido del archivo personal del usuario.
|
||||
string nomFichero; //Nombre del fichero del jugador.
|
||||
int lvl; //Entero que se lee del archivo y representa el o los niveles que ha superado el usuario con anterioridad.
|
||||
int numMov; //Entero que se lee del archivo representa el número de movimientos que ha empleado el usuario en resolver un nivel.
|
||||
string miArchivo = informacion.nombre + ".txt"; //Nombre del jugador más extensión que representa el archivo del usuario que ha iniciado sesión.
|
||||
|
||||
ofstream archivo;
|
||||
archivo.open(miArchivo);
|
||||
if (archivo.is_open()){
|
||||
for (int i = 0; i < contador; i++){
|
||||
nomFichero = informacion.exitos[i].nombreFichero;
|
||||
archivo << nomFichero << " ";
|
||||
|
||||
lvl = informacion.exitos[i].nivel;
|
||||
archivo << lvl << " ";
|
||||
|
||||
numMov = informacion.exitos[i].contadorMovimientos;
|
||||
archivo << numMov << endl;
|
||||
}
|
||||
archivo << "XXX";
|
||||
}
|
||||
archivo.close();
|
||||
}
|
||||
|
||||
void nuevaPartida(tJuego &juego, tInfo &informacion){
|
||||
int contador = informacion.contadorGanadas; //Variable entera que representa el número de tableros resueltos que se han leido del archivo personal del usuario.
|
||||
|
||||
informacion.exitos[contador].nombreFichero = juego.nFichero;
|
||||
informacion.exitos[contador].nivel = juego.nivel;
|
||||
informacion.exitos[contador].contadorMovimientos = juego.numMovimientos;
|
||||
|
||||
informacion.contadorGanadas++;
|
||||
|
||||
}
|
||||
|
||||
//Las funciones de los movimientos son provisionales, no sólo se pueden optimizar, si no que se pueden juntar en una función.
|
||||
|
||||
void movimientoArriba(tJuego &juego){
|
||||
int f = juego.estado.fila; //Fila en la que se encuentra el jugador.
|
||||
int c = juego.estado.columna; //Columna en la que se encuentra el jugador.
|
||||
|
||||
if (juego.estado.tablero[f][c] == DestinoJ){
|
||||
if (juego.estado.tablero[f - 1][c] == Libre){
|
||||
juego.estado.tablero[f - 1][c] = Jugador;
|
||||
juego.estado.tablero[f][c] = DestinoL;
|
||||
juego.estado.fila = juego.estado.fila - 1;
|
||||
}
|
||||
if ((juego.estado.tablero[f - 1][c] == Caja) && (juego.estado.tablero[f - 2][c] == DestinoL)){
|
||||
juego.estado.tablero[f - 2][c] = DestinoC;
|
||||
juego.estado.tablero[f - 1][c] = Jugador;
|
||||
juego.estado.tablero[f][c] = DestinoL;
|
||||
juego.estado.fila = juego.estado.fila - 1;
|
||||
juego.estado.numCajasColocadas++;
|
||||
}
|
||||
if ((juego.estado.tablero[f - 1][c] == Caja) && (juego.estado.tablero[f - 2][c] != Muro)){
|
||||
if (juego.estado.tablero[f - 2][c] == DestinoL){
|
||||
juego.estado.tablero[f - 2][c] = DestinoC;
|
||||
juego.estado.tablero[f - 1][c] = Jugador;
|
||||
juego.estado.tablero[f][c] = DestinoL;
|
||||
juego.estado.fila = juego.estado.fila - 1;
|
||||
juego.estado.numCajasColocadas++;
|
||||
}
|
||||
if (juego.estado.tablero[f - 2][c] == Libre){
|
||||
juego.estado.tablero[f - 2][c] = Caja;
|
||||
juego.estado.tablero[f - 1][c] = Jugador;
|
||||
juego.estado.tablero[f][c] = DestinoL;
|
||||
juego.estado.fila = juego.estado.fila - 1;
|
||||
}
|
||||
}
|
||||
if (juego.estado.tablero[f - 1][c] == DestinoL){
|
||||
juego.estado.tablero[f - 1][c] = DestinoJ;
|
||||
juego.estado.tablero[f][c] = DestinoL;
|
||||
juego.estado.fila = juego.estado.fila - 1;
|
||||
}
|
||||
if ((juego.estado.tablero[f - 1][c] == DestinoC) && (juego.estado.tablero[f - 2][c] != Muro) && (juego.estado.tablero[f - 2][c] != Caja)){
|
||||
if (juego.estado.tablero[f - 2][c] == DestinoL){
|
||||
juego.estado.tablero[f - 2][c] = DestinoC;
|
||||
juego.estado.tablero[f - 1][c] = DestinoJ;
|
||||
juego.estado.tablero[f][c] = DestinoL;
|
||||
juego.estado.fila = juego.estado.fila - 1;
|
||||
}
|
||||
if (juego.estado.tablero[f - 2][c] == Libre){
|
||||
juego.estado.tablero[f - 2][c] = Caja;
|
||||
juego.estado.tablero[f - 1][c] = DestinoJ;
|
||||
juego.estado.tablero[f][c] = DestinoL;
|
||||
juego.estado.fila = juego.estado.fila - 1;
|
||||
juego.estado.numCajasColocadas--;
|
||||
}
|
||||
}
|
||||
juego.numMovimientos++;
|
||||
juego.historial.cont++;
|
||||
}
|
||||
|
||||
if (juego.estado.tablero[f][c] == Jugador){
|
||||
if (juego.estado.tablero[f - 1][c] == Libre){
|
||||
juego.estado.tablero[f - 1][c] = Jugador;
|
||||
juego.estado.tablero[f][c] = Libre;
|
||||
juego.estado.fila = juego.estado.fila - 1;
|
||||
}
|
||||
if ((juego.estado.tablero[f - 1][c] == Caja) && (juego.estado.tablero[f - 2][c] == DestinoL)){
|
||||
juego.estado.tablero[f - 2][c] = DestinoC;
|
||||
juego.estado.tablero[f - 1][c] = Jugador;
|
||||
juego.estado.tablero[f][c] = Libre;
|
||||
juego.estado.fila = juego.estado.fila - 1;
|
||||
juego.estado.numCajasColocadas++;
|
||||
}
|
||||
if ((juego.estado.tablero[f - 1][c] == Caja) && (juego.estado.tablero[f - 2][c] != Muro)){
|
||||
if (juego.estado.tablero[f - 2][c] == DestinoL){
|
||||
juego.estado.tablero[f - 2][c] = DestinoC;
|
||||
juego.estado.tablero[f - 1][c] = Jugador;
|
||||
juego.estado.tablero[f][c] = Libre;
|
||||
juego.estado.fila = juego.estado.fila - 1;
|
||||
juego.estado.numCajasColocadas++;
|
||||
}
|
||||
if (juego.estado.tablero[f - 2][c] == Libre){
|
||||
juego.estado.tablero[f - 2][c] = Caja;
|
||||
juego.estado.tablero[f - 1][c] = Jugador;
|
||||
juego.estado.tablero[f][c] = Libre;
|
||||
juego.estado.fila = juego.estado.fila - 1;
|
||||
}
|
||||
}
|
||||
if (juego.estado.tablero[f - 1][c] == DestinoL){
|
||||
juego.estado.tablero[f - 1][c] = DestinoJ;
|
||||
juego.estado.tablero[f][c] = Libre;
|
||||
juego.estado.fila = juego.estado.fila - 1;
|
||||
}
|
||||
if ((juego.estado.tablero[f - 1][c] == DestinoC) && (juego.estado.tablero[f - 2][c] != Muro) && (juego.estado.tablero[f - 2][c] != Caja)){
|
||||
if (juego.estado.tablero[f - 2][c] == DestinoL){
|
||||
juego.estado.tablero[f - 2][c] = DestinoC;
|
||||
juego.estado.tablero[f - 1][c] = DestinoJ;
|
||||
juego.estado.tablero[f][c] = Libre;
|
||||
juego.estado.fila = juego.estado.fila - 1;
|
||||
}
|
||||
if (juego.estado.tablero[f - 2][c] == Libre){
|
||||
juego.estado.tablero[f - 2][c] = Caja;
|
||||
juego.estado.tablero[f - 1][c] = DestinoJ;
|
||||
juego.estado.tablero[f][c] = Libre;
|
||||
juego.estado.fila = juego.estado.fila - 1;
|
||||
juego.estado.numCajasColocadas--;
|
||||
}
|
||||
}
|
||||
juego.numMovimientos++;
|
||||
juego.historial.cont++;
|
||||
}
|
||||
}
|
||||
|
||||
void movimientoAbajo(tJuego &juego){
|
||||
int f = juego.estado.fila; //Fila en la que se encuentra el jugador.
|
||||
int c = juego.estado.columna; //columna en la que se encuentra el jugador.
|
||||
|
||||
if (juego.estado.tablero[f][c] == DestinoJ){
|
||||
if (juego.estado.tablero[f + 1][c] == Libre){
|
||||
juego.estado.tablero[f + 1][c] = Jugador;
|
||||
juego.estado.tablero[f][c] = DestinoL;
|
||||
juego.estado.fila = juego.estado.fila + 1;
|
||||
}
|
||||
if ((juego.estado.tablero[f + 1][c] == Caja) && (juego.estado.tablero[f + 2][c] != Muro)){
|
||||
if (juego.estado.tablero[f + 2][c] == DestinoL){
|
||||
juego.estado.tablero[f + 2][c] = DestinoC;
|
||||
juego.estado.tablero[f + 1][c] = Jugador;
|
||||
juego.estado.tablero[f][c] = DestinoL;
|
||||
juego.estado.fila = juego.estado.fila + 1;
|
||||
juego.estado.numCajasColocadas++;
|
||||
}
|
||||
if (juego.estado.tablero[f + 2][c] == Libre){
|
||||
juego.estado.tablero[f + 2][c] = Caja;
|
||||
juego.estado.tablero[f + 1][c] = Jugador;
|
||||
juego.estado.tablero[f][c] = DestinoL;
|
||||
juego.estado.fila = juego.estado.fila + 1;
|
||||
}
|
||||
}
|
||||
if (juego.estado.tablero[f + 1][c] == DestinoL){
|
||||
juego.estado.tablero[f + 1][c] = DestinoJ;
|
||||
juego.estado.tablero[f][c] = DestinoL;
|
||||
juego.estado.fila = juego.estado.fila + 1;
|
||||
}
|
||||
if ((juego.estado.tablero[f + 1][c] == DestinoC) && (juego.estado.tablero[f + 2][c] != Muro) && (juego.estado.tablero[f + 2][c] != Caja)){
|
||||
if (juego.estado.tablero[f + 2][c] == DestinoL){
|
||||
juego.estado.tablero[f + 2][c] = DestinoC;
|
||||
juego.estado.tablero[f + 1][c] = DestinoJ;
|
||||
juego.estado.tablero[f][c] = DestinoL;
|
||||
juego.estado.fila = juego.estado.fila + 1;
|
||||
}
|
||||
if (juego.estado.tablero[f + 2][c] == Libre){
|
||||
juego.estado.tablero[f + 2][c] = Caja;
|
||||
juego.estado.tablero[f + 1][c] = DestinoJ;
|
||||
juego.estado.tablero[f][c] = DestinoL;
|
||||
juego.estado.fila = juego.estado.fila + 1;
|
||||
juego.estado.numCajasColocadas--;
|
||||
}
|
||||
}
|
||||
juego.numMovimientos++;
|
||||
juego.historial.cont++;
|
||||
}
|
||||
|
||||
if (juego.estado.tablero[f][c] == Jugador){
|
||||
if (juego.estado.tablero[f + 1][c] == Libre){
|
||||
juego.estado.tablero[f + 1][c] = Jugador;
|
||||
juego.estado.tablero[f][c] = Libre;
|
||||
juego.estado.fila = juego.estado.fila + 1;
|
||||
}
|
||||
if ((juego.estado.tablero[f + 1][c] == Caja) && (juego.estado.tablero[f + 2][c] != Muro)){
|
||||
if (juego.estado.tablero[f + 2][c] == DestinoL){
|
||||
juego.estado.tablero[f + 2][c] = DestinoC;
|
||||
juego.estado.tablero[f + 1][c] = Jugador;
|
||||
juego.estado.tablero[f][c] = Libre;
|
||||
juego.estado.fila = juego.estado.fila + 1;
|
||||
juego.estado.numCajasColocadas++;
|
||||
}
|
||||
if (juego.estado.tablero[f + 2][c] == Libre){
|
||||
juego.estado.tablero[f + 2][c] = Caja;
|
||||
juego.estado.tablero[f + 1][c] = Jugador;
|
||||
juego.estado.tablero[f][c] = Libre;
|
||||
juego.estado.fila = juego.estado.fila + 1;
|
||||
}
|
||||
}
|
||||
if (juego.estado.tablero[f + 1][c] == DestinoL){
|
||||
juego.estado.tablero[f + 1][c] = DestinoJ;
|
||||
juego.estado.tablero[f][c] = Libre;
|
||||
juego.estado.fila = juego.estado.fila + 1;
|
||||
}
|
||||
if ((juego.estado.tablero[f + 1][c] == DestinoC) && (juego.estado.tablero[f + 2][c] != Muro) && (juego.estado.tablero[f + 2][c] != Caja)){
|
||||
if (juego.estado.tablero[f + 2][c] == DestinoL){
|
||||
juego.estado.tablero[f + 2][c] = DestinoC;
|
||||
juego.estado.tablero[f + 1][c] = DestinoJ;
|
||||
juego.estado.tablero[f][c] = Libre;
|
||||
juego.estado.fila = juego.estado.fila + 1;
|
||||
}
|
||||
if (juego.estado.tablero[f + 2][c] == Libre){
|
||||
juego.estado.tablero[f + 2][c] = Caja;
|
||||
juego.estado.tablero[f + 1][c] = DestinoJ;
|
||||
juego.estado.tablero[f][c] = Libre;
|
||||
juego.estado.fila = juego.estado.fila + 1;
|
||||
juego.estado.numCajasColocadas--;
|
||||
}
|
||||
}
|
||||
juego.numMovimientos++;
|
||||
juego.historial.cont++;
|
||||
}
|
||||
}
|
||||
|
||||
void movimientoDerecha(tJuego &juego){
|
||||
int f = juego.estado.fila; //Fila en la que se encuentra el jugador.
|
||||
int c = juego.estado.columna; //Columna en la que se encuentra el jugador.
|
||||
|
||||
if (juego.estado.tablero[f][c] == DestinoJ){
|
||||
if (juego.estado.tablero[f][c + 1] == Libre){
|
||||
juego.estado.tablero[f][c + 1] = Jugador;
|
||||
juego.estado.tablero[f][c] = DestinoL;
|
||||
juego.estado.columna = juego.estado.columna + 1;
|
||||
}
|
||||
if ((juego.estado.tablero[f][c + 1] == Caja) && (juego.estado.tablero[f][c + 2] != Muro)){
|
||||
if (juego.estado.tablero[f][c + 2] == DestinoL){
|
||||
juego.estado.tablero[f][c + 2] = DestinoC;
|
||||
juego.estado.tablero[f][c + 1] = Jugador;
|
||||
juego.estado.tablero[f][c] = DestinoL;
|
||||
juego.estado.columna = juego.estado.columna + 1;
|
||||
juego.estado.numCajasColocadas++;
|
||||
}
|
||||
if (juego.estado.tablero[f][c + 2] == Libre){
|
||||
juego.estado.tablero[f][c + 2] = Caja;
|
||||
juego.estado.tablero[f][c + 1] = Jugador;
|
||||
juego.estado.tablero[f][c] = DestinoL;
|
||||
juego.estado.columna = juego.estado.columna + 1;
|
||||
}
|
||||
}
|
||||
if (juego.estado.tablero[f][c + 1] == DestinoL){
|
||||
juego.estado.tablero[f][c + 1] = DestinoJ;
|
||||
juego.estado.tablero[f][c] = DestinoL;
|
||||
juego.estado.columna = juego.estado.columna + 1;
|
||||
}
|
||||
if ((juego.estado.tablero[f][c + 1] == DestinoC) && (juego.estado.tablero[f][c + 2] != Muro) && (juego.estado.tablero[f][c + 2] != Caja)){
|
||||
if (juego.estado.tablero[f][c + 2] == DestinoL){
|
||||
juego.estado.tablero[f][c + 2] = DestinoC;
|
||||
juego.estado.tablero[f][c + 1] = DestinoJ;
|
||||
juego.estado.tablero[f][c] = DestinoL;
|
||||
juego.estado.columna = juego.estado.columna + 1;
|
||||
}
|
||||
if (juego.estado.tablero[f][c + 2] == Libre){
|
||||
juego.estado.tablero[f][c + 2] = Caja;
|
||||
juego.estado.tablero[f][c + 1] = DestinoJ;
|
||||
juego.estado.tablero[f][c] = DestinoL;
|
||||
juego.estado.columna = juego.estado.columna + 1;
|
||||
juego.estado.numCajasColocadas--;
|
||||
}
|
||||
}
|
||||
juego.numMovimientos++;
|
||||
juego.historial.cont++;
|
||||
}
|
||||
|
||||
if (juego.estado.tablero[f][c] == Jugador){
|
||||
if (juego.estado.tablero[f][c + 1] == Libre){
|
||||
juego.estado.tablero[f][c + 1] = Jugador;
|
||||
juego.estado.tablero[f][c] = Libre;
|
||||
juego.estado.columna = juego.estado.columna + 1;
|
||||
}
|
||||
if ((juego.estado.tablero[f][c + 1] == Caja) && (juego.estado.tablero[f][c + 2] != Muro)){
|
||||
if (juego.estado.tablero[f][c + 2] == DestinoL){
|
||||
juego.estado.tablero[f][c + 2] = DestinoC;
|
||||
juego.estado.tablero[f][c + 1] = Jugador;
|
||||
juego.estado.tablero[f][c] = Libre;
|
||||
juego.estado.columna = juego.estado.columna + 1;
|
||||
juego.estado.numCajasColocadas++;
|
||||
}
|
||||
if (juego.estado.tablero[f][c + 2] == Libre){
|
||||
juego.estado.tablero[f][c + 2] = Caja;
|
||||
juego.estado.tablero[f][c + 1] = Jugador;
|
||||
juego.estado.tablero[f][c] = Libre;
|
||||
juego.estado.columna = juego.estado.columna + 1;
|
||||
}
|
||||
}
|
||||
if (juego.estado.tablero[f][c + 1] == DestinoL){
|
||||
juego.estado.tablero[f][c + 1] = DestinoJ;
|
||||
juego.estado.tablero[f][c] = Libre;
|
||||
juego.estado.columna = juego.estado.columna + 1;
|
||||
}
|
||||
if ((juego.estado.tablero[f][c + 1] == DestinoC) && (juego.estado.tablero[f][c + 2] != Muro) && (juego.estado.tablero[f][c + 2] != Caja)){
|
||||
if (juego.estado.tablero[f][c + 2] == DestinoL){
|
||||
juego.estado.tablero[f][c + 2] = DestinoC;
|
||||
juego.estado.tablero[f][c + 1] = DestinoJ;
|
||||
juego.estado.tablero[f][c] = Libre;
|
||||
juego.estado.columna = juego.estado.columna + 1;
|
||||
}
|
||||
if (juego.estado.tablero[f][c + 2] == Libre){
|
||||
juego.estado.tablero[f][c + 2] = Caja;
|
||||
juego.estado.tablero[f][c + 1] = DestinoJ;
|
||||
juego.estado.tablero[f][c] = Libre;
|
||||
juego.estado.columna = juego.estado.columna + 1;
|
||||
juego.estado.numCajasColocadas--;
|
||||
}
|
||||
}
|
||||
juego.numMovimientos++;
|
||||
juego.historial.cont++;
|
||||
}
|
||||
}
|
||||
|
||||
void movimientoIzquierda(tJuego &juego){
|
||||
int f = juego.estado.fila; //Fila en la que se encuentra el jugador.
|
||||
int c = juego.estado.columna; //Columnaa en la que se encuentra el jugador.
|
||||
|
||||
if (juego.estado.tablero[f][c] == DestinoJ){
|
||||
if (juego.estado.tablero[f][c - 1] == Libre){
|
||||
juego.estado.tablero[f][c - 1] = Jugador;
|
||||
juego.estado.tablero[f][c] = DestinoL;
|
||||
juego.estado.columna = juego.estado.columna - 1;
|
||||
}
|
||||
if ((juego.estado.tablero[f][c - 1] == Caja) && (juego.estado.tablero[f][c - 2] != Muro)){
|
||||
if (juego.estado.tablero[f][c - 2] == DestinoL){
|
||||
juego.estado.tablero[f][c - 2] = DestinoC;
|
||||
juego.estado.tablero[f][c - 1] = Jugador;
|
||||
juego.estado.tablero[f][c] = DestinoL;
|
||||
juego.estado.columna = juego.estado.columna - 1;
|
||||
juego.estado.numCajasColocadas++;
|
||||
}
|
||||
if (juego.estado.tablero[f][c - 2] == Libre){
|
||||
juego.estado.tablero[f][c - 2] = Caja;
|
||||
juego.estado.tablero[f][c - 1] = Jugador;
|
||||
juego.estado.tablero[f][c] = DestinoL;
|
||||
juego.estado.columna = juego.estado.columna - 1;
|
||||
}
|
||||
}
|
||||
if (juego.estado.tablero[f][c - 1] == DestinoL){
|
||||
juego.estado.tablero[f][c - 1] = DestinoJ;
|
||||
juego.estado.tablero[f][c] = DestinoL;
|
||||
juego.estado.columna = juego.estado.columna - 1;
|
||||
}
|
||||
if ((juego.estado.tablero[f][c - 1] == DestinoC) && (juego.estado.tablero[f][c - 2] != Muro) && (juego.estado.tablero[f][c - 2] != Caja)){
|
||||
if (juego.estado.tablero[f][c - 2] == DestinoL){
|
||||
juego.estado.tablero[f][c - 2] = DestinoC;
|
||||
juego.estado.tablero[f][c - 1] = DestinoJ;
|
||||
juego.estado.tablero[f][c] = DestinoL;
|
||||
juego.estado.columna = juego.estado.columna - 1;
|
||||
}
|
||||
if (juego.estado.tablero[f][c - 2] == Libre){
|
||||
juego.estado.tablero[f][c - 2] = Caja;
|
||||
juego.estado.tablero[f][c - 1] = DestinoJ;
|
||||
juego.estado.tablero[f][c] = DestinoL;
|
||||
juego.estado.columna = juego.estado.columna - 1;
|
||||
juego.estado.numCajasColocadas--;
|
||||
}
|
||||
}
|
||||
juego.numMovimientos++;
|
||||
juego.historial.cont++;
|
||||
}
|
||||
|
||||
if (juego.estado.tablero[f][c] == Jugador){
|
||||
if (juego.estado.tablero[f][c - 1] == Libre){
|
||||
juego.estado.tablero[f][c - 1] = Jugador;
|
||||
juego.estado.tablero[f][c] = Libre;
|
||||
juego.estado.columna = juego.estado.columna - 1;
|
||||
}
|
||||
if ((juego.estado.tablero[f][c - 1] == Caja) && (juego.estado.tablero[f][c - 2] != Muro)){
|
||||
if (juego.estado.tablero[f][c - 2] == DestinoL){
|
||||
juego.estado.tablero[f][c - 2] = DestinoC;
|
||||
juego.estado.tablero[f][c - 1] = Jugador;
|
||||
juego.estado.tablero[f][c] = Libre;
|
||||
juego.estado.columna = juego.estado.columna - 1;
|
||||
juego.estado.numCajasColocadas++;
|
||||
}
|
||||
if (juego.estado.tablero[f][c - 2] == Libre){
|
||||
juego.estado.tablero[f][c - 2] = Caja;
|
||||
juego.estado.tablero[f][c - 1] = Jugador;
|
||||
juego.estado.tablero[f][c] = Libre;
|
||||
juego.estado.columna = juego.estado.columna - 1;
|
||||
}
|
||||
}
|
||||
if (juego.estado.tablero[f][c - 1] == DestinoL){
|
||||
juego.estado.tablero[f][c - 1] = DestinoJ;
|
||||
juego.estado.tablero[f][c] = Libre;
|
||||
juego.estado.columna = juego.estado.columna - 1;
|
||||
}
|
||||
if ((juego.estado.tablero[f][c - 1] == DestinoC) && (juego.estado.tablero[f][c - 2] != Muro) && (juego.estado.tablero[f][c - 2] != Caja)){
|
||||
if (juego.estado.tablero[f][c - 2] == DestinoL){
|
||||
juego.estado.tablero[f][c - 2] = DestinoC;
|
||||
juego.estado.tablero[f][c - 1] = DestinoJ;
|
||||
juego.estado.tablero[f][c] = Libre;
|
||||
juego.estado.columna = juego.estado.columna - 1;
|
||||
}
|
||||
if (juego.estado.tablero[f][c - 2] == Libre){
|
||||
juego.estado.tablero[f][c - 2] = Caja;
|
||||
juego.estado.tablero[f][c - 1] = DestinoJ;
|
||||
juego.estado.tablero[f][c] = Libre;
|
||||
juego.estado.columna = juego.estado.columna - 1;
|
||||
juego.estado.numCajasColocadas--;
|
||||
}
|
||||
}
|
||||
juego.numMovimientos++;
|
||||
juego.historial.cont++;
|
||||
}
|
||||
}
|
841
Sokoban Game/levels.txt
Normal file
841
Sokoban Game/levels.txt
Normal file
@ -0,0 +1,841 @@
|
||||
Level -1
|
||||
########
|
||||
###.####
|
||||
### ####
|
||||
###$ $.#
|
||||
#. $@###
|
||||
####$###
|
||||
####.###
|
||||
########
|
||||
|
||||
Level 0
|
||||
###################
|
||||
##### ###########
|
||||
#####$ ###########
|
||||
##### $###########
|
||||
### $ $ ##########
|
||||
### # ## ##########
|
||||
# # ## ##### ..#
|
||||
# $ $ ..#
|
||||
##### ### #@## ..#
|
||||
##### #########
|
||||
###################
|
||||
|
||||
Level 1
|
||||
####
|
||||
# ###
|
||||
# #
|
||||
# $ #
|
||||
### ###
|
||||
# $ $ #
|
||||
#..@..#
|
||||
# $ #
|
||||
### ##
|
||||
####
|
||||
|
||||
Level 2
|
||||
#####
|
||||
# @####
|
||||
# $. #
|
||||
###$.# #
|
||||
# $.# #
|
||||
# #$. #
|
||||
# ###
|
||||
######
|
||||
|
||||
Level 3
|
||||
#####
|
||||
# #
|
||||
#### # #
|
||||
# . .# #
|
||||
# . #
|
||||
# .## $##
|
||||
## #$$ #
|
||||
## $@#
|
||||
## ###
|
||||
####
|
||||
|
||||
Level 4
|
||||
#### ####
|
||||
# ### #
|
||||
# # $$ #
|
||||
# $$ # #
|
||||
# # ##
|
||||
### $.# #
|
||||
#..*.@.#
|
||||
## ###
|
||||
#####
|
||||
|
||||
Level 5
|
||||
###### ####
|
||||
# ### #
|
||||
# * * #
|
||||
## #***# #
|
||||
# *+* ##
|
||||
## #*$*# ##
|
||||
# # # # #
|
||||
# #
|
||||
# ########
|
||||
####
|
||||
|
||||
Level 6
|
||||
########
|
||||
## . . #
|
||||
# *$# # #
|
||||
#. #$# ##
|
||||
##* # # #
|
||||
# # * #
|
||||
# $#@ .# #
|
||||
# $ ###
|
||||
## # #
|
||||
########
|
||||
|
||||
Level 7
|
||||
####
|
||||
# #
|
||||
#$ #
|
||||
# # ####
|
||||
#### #### #
|
||||
# .. .. #
|
||||
# $*. *.$@##
|
||||
# #$ $#$ #
|
||||
##### # #
|
||||
#########
|
||||
|
||||
Level 8
|
||||
####
|
||||
# #
|
||||
#$ #
|
||||
# # ####
|
||||
### #### #
|
||||
# .. .. ###
|
||||
# $*. *.$@ #
|
||||
## #$ $#$ # #
|
||||
# # # # #
|
||||
# ###### #
|
||||
## ##
|
||||
##########
|
||||
|
||||
Level 9
|
||||
#######
|
||||
# @ #
|
||||
# ### ##
|
||||
#### # # # #####
|
||||
# ### # # . #
|
||||
# . # # * $$ #
|
||||
# * $$ # # *## ##
|
||||
# *## ## # * #
|
||||
# . # # *## #
|
||||
# #### # . #
|
||||
#### # ####
|
||||
####
|
||||
|
||||
Level 10
|
||||
########
|
||||
## ##
|
||||
# .#### #
|
||||
# . # #
|
||||
# * $$ # #
|
||||
# *## # #
|
||||
# + # ##
|
||||
# $### #
|
||||
## ##
|
||||
#######
|
||||
|
||||
Level 11
|
||||
#########
|
||||
## ##
|
||||
# .##### #
|
||||
# . # #
|
||||
# * $$ # #
|
||||
# *## ## #
|
||||
# * # ##
|
||||
# *## # ##
|
||||
# + # #
|
||||
# $### #
|
||||
## ##
|
||||
#######
|
||||
|
||||
Level 12
|
||||
#######
|
||||
# @ #
|
||||
# $.$ #
|
||||
##.$.##
|
||||
## $ ##
|
||||
# $.$ #
|
||||
# .$. #
|
||||
# .$. #
|
||||
# # #
|
||||
#######
|
||||
|
||||
Level 13
|
||||
#####
|
||||
#### #
|
||||
# $$# #
|
||||
## *..$ #
|
||||
#@ .#. #
|
||||
# $..* ##
|
||||
# #$$ #
|
||||
# ####
|
||||
#####
|
||||
|
||||
Level 14
|
||||
######
|
||||
####### # ##
|
||||
# ### ## ##
|
||||
# # $.##$ # ##
|
||||
# # *.@.* # #
|
||||
## # $##.$ # #
|
||||
## ## ### #
|
||||
## # #######
|
||||
######
|
||||
|
||||
Level 15
|
||||
#######
|
||||
# ####
|
||||
# # # . ##
|
||||
# $$$**$$ #
|
||||
#....@....#
|
||||
# $$**$$$ #
|
||||
## . # # #
|
||||
#### #
|
||||
#######
|
||||
|
||||
Level 16
|
||||
########
|
||||
# # ##
|
||||
##### # ####
|
||||
# $ $$ $ $ #
|
||||
#..........#
|
||||
# $ $ $$ $ #
|
||||
#### # #####
|
||||
## @ # #
|
||||
########
|
||||
|
||||
Level 17
|
||||
#####
|
||||
# #
|
||||
## # #
|
||||
# * #
|
||||
# # ##
|
||||
####### # #
|
||||
# # .$.$.####
|
||||
# # $$.$$ ###
|
||||
# *##..@..##* #
|
||||
### $$.$$ # #
|
||||
####.$.$. # #
|
||||
# # #######
|
||||
## # #
|
||||
# * #
|
||||
# # ##
|
||||
# #
|
||||
#####
|
||||
|
||||
Level 18
|
||||
#######
|
||||
## ###
|
||||
### .$###
|
||||
# $$.$ #
|
||||
# . . #
|
||||
## $.$###
|
||||
###$.$ #
|
||||
# . . #
|
||||
# .$$ #
|
||||
###. ###
|
||||
###@ ##
|
||||
######
|
||||
|
||||
Level 19
|
||||
#######
|
||||
###### ### #
|
||||
### # # $$##.#
|
||||
##### $ $ ### #$ ##.#
|
||||
# $ $ # # .#
|
||||
## # # $ # ### # ## #
|
||||
# $ $ #### # ## #
|
||||
# $#.*##$ # ## ###
|
||||
#.*..... .# ######
|
||||
# .#######
|
||||
## @#
|
||||
# #
|
||||
####
|
||||
|
||||
Level 20
|
||||
###########
|
||||
## ##
|
||||
# ####### #
|
||||
# # # #
|
||||
# # ##### # #
|
||||
## # $# ##
|
||||
#### ## ### .$ #
|
||||
# ###$ .....# #
|
||||
# #$ $ $ # @ #
|
||||
# ### #########
|
||||
##### ####
|
||||
|
||||
Level 21
|
||||
##############
|
||||
# # # ####
|
||||
# #### # @ . #
|
||||
# $..... # #$ #
|
||||
##$##### # ##. #
|
||||
# ### $ #
|
||||
# ## $ ## ## #
|
||||
## ### $ #####
|
||||
# $ # #####
|
||||
# ####
|
||||
### #
|
||||
####
|
||||
|
||||
Level 22
|
||||
#####
|
||||
# ###
|
||||
#### ##
|
||||
### #.## ##
|
||||
# $ $ $ $$@ #
|
||||
# # ##.## #
|
||||
## # # . #####
|
||||
# # ...*. #
|
||||
# $### # #
|
||||
# $ ### ###
|
||||
# # ##
|
||||
###########
|
||||
|
||||
Level 23
|
||||
######
|
||||
###### #
|
||||
# $ $$ #
|
||||
# $ ## #
|
||||
# $## #$ #
|
||||
# $ $$ # #
|
||||
# .....#$ #
|
||||
##@#.#$ $ #
|
||||
#.....#$ #
|
||||
#...**# #
|
||||
# $ ##
|
||||
#### ###
|
||||
####
|
||||
|
||||
Level 24
|
||||
########
|
||||
# #
|
||||
###*####.#
|
||||
# $ $ #
|
||||
# #......###
|
||||
# #$ # #
|
||||
# #. #@# # #
|
||||
# $$## #$# #
|
||||
# $ $ #
|
||||
# #########
|
||||
####
|
||||
|
||||
Level 25
|
||||
#####
|
||||
# #####
|
||||
###### # ##
|
||||
# ## * #### ##
|
||||
### $ # ###
|
||||
# #####$# $ # #
|
||||
# $ $ # $$# # #
|
||||
###.#..*......... ##
|
||||
### $# # $ $ # #
|
||||
# $ $## #### #### #
|
||||
# # ## @ # ##
|
||||
# ## ###### ####
|
||||
## ##
|
||||
##############
|
||||
|
||||
Level 26
|
||||
#####
|
||||
## # #####
|
||||
###### # $ # # ####
|
||||
# ### #$#### # ##
|
||||
# ## # # $$ ### #
|
||||
# ### ##$ @ $ # #
|
||||
# # . # $$ # $ $$ # #
|
||||
#..# .## $# ## #
|
||||
# . ##$ #### #
|
||||
#..##.# # #######
|
||||
# . # ##
|
||||
#..# . ####
|
||||
# ###.# #
|
||||
#### # #
|
||||
#####
|
||||
|
||||
Level 27
|
||||
####### ########
|
||||
# # # ## #
|
||||
#### ### # #####$ $##
|
||||
# # ### # ## $ #
|
||||
# # # # $ $$$## #
|
||||
# # #####$ # ### #
|
||||
### ##### ## # $# $ #
|
||||
# # # #$ # #####
|
||||
# # # ## ## # #
|
||||
# # #### ## # $ $ #
|
||||
##### ## ## # # #
|
||||
# #### ##### ######
|
||||
# # # # $$$ # ##
|
||||
# # ## $ $ #
|
||||
######## ############## # #
|
||||
# @..................#
|
||||
# # ##################
|
||||
# #
|
||||
#####
|
||||
|
||||
Level 28
|
||||
##### ####
|
||||
# ############..#
|
||||
# $# $ $ $ $ $ #
|
||||
## $ # # # #$ ..#
|
||||
# # . . . *.. #
|
||||
### $####@## # ## ##
|
||||
## ## # ## ####$ ###
|
||||
# ..* . . . # #
|
||||
#.. $# # # # $ ##
|
||||
# $ $ $ $ $ #$ #
|
||||
#..############ #
|
||||
#### #####
|
||||
|
||||
Level 29
|
||||
#####
|
||||
# #
|
||||
## # #####
|
||||
## * # #
|
||||
### # ## # #####
|
||||
### $$# * # #
|
||||
# *#. $ # ## # #
|
||||
# # *... $$# * #
|
||||
# #$$ ....$ # #####
|
||||
##### # $.+.. $$# #
|
||||
# * #$$ ...* # #
|
||||
# # ## # $ .#* #
|
||||
# # * #$$ ###
|
||||
##### # ## # ###
|
||||
# # * ##
|
||||
##### # ##
|
||||
# #
|
||||
#####
|
||||
|
||||
Level 30
|
||||
####
|
||||
# #
|
||||
# #
|
||||
# #
|
||||
########## #
|
||||
# $ $ $$#
|
||||
# @ $..*. #
|
||||
# # *...$#
|
||||
#####$...* #####
|
||||
# .*..$# #
|
||||
#$$ $ $ #
|
||||
# ##########
|
||||
# #
|
||||
# #
|
||||
# #
|
||||
####
|
||||
|
||||
Level 31
|
||||
####
|
||||
# #
|
||||
# #
|
||||
# #
|
||||
############ #
|
||||
# $ $.* $$#
|
||||
# @ $..*.*. #
|
||||
# # * $ .$#
|
||||
#####*.$ *.#
|
||||
#.* $.*#
|
||||
#$. $ * #####
|
||||
# .*.*..$# #
|
||||
#$$ *.$ $ #
|
||||
# ############
|
||||
# #
|
||||
# #
|
||||
# #
|
||||
####
|
||||
|
||||
Level 32
|
||||
#########
|
||||
# # #
|
||||
## # # # ##
|
||||
# *.*$*.* #
|
||||
# # #
|
||||
### $@$ ###
|
||||
# # #
|
||||
# *.*$*.* #
|
||||
## # # # ##
|
||||
# # #
|
||||
#########
|
||||
|
||||
Level 33
|
||||
#
|
||||
# ######## #
|
||||
# #
|
||||
# *$.$.$* #
|
||||
# *###* #
|
||||
# $# #$ #
|
||||
#.. .@. ..#
|
||||
# $# #$ #
|
||||
# *###* #
|
||||
# *$.$.$* #
|
||||
# #
|
||||
# ######## #
|
||||
#
|
||||
|
||||
Level 34
|
||||
#### # ####
|
||||
## # # ##
|
||||
# ##### #
|
||||
# $. * .$ #
|
||||
###.$.$.$.###
|
||||
# .$ $. #
|
||||
# #*$ @ $*# #
|
||||
# .$ $. #
|
||||
###.$.$.$.###
|
||||
# $. * .$ #
|
||||
# ##### #
|
||||
## # # ##
|
||||
#### # ####
|
||||
|
||||
Level 35
|
||||
###########
|
||||
## # ##
|
||||
# .$$. .$$. #
|
||||
# $..$ $..$ #
|
||||
# .$$...$$. #
|
||||
# $..$ $..$ #
|
||||
## $$.*.$$ ##
|
||||
# $..$ $..$ #
|
||||
# .$$...$$. #
|
||||
# $..$ $..$ #
|
||||
# .$$.@.$$. #
|
||||
## # ##
|
||||
###########
|
||||
|
||||
Level 36
|
||||
#############
|
||||
# # #
|
||||
# # # # # #
|
||||
# .$.$.$. #
|
||||
# #$.$.$.$# #
|
||||
# .$.$.$. #
|
||||
# #$.$@$.$# #
|
||||
# .$.$.$. #
|
||||
# #$.$.$.$# #
|
||||
# .$.$.$. #
|
||||
# # # # # # #
|
||||
# # #
|
||||
#############
|
||||
|
||||
Level 37
|
||||
############
|
||||
# @ #
|
||||
# # $ ## $ # #
|
||||
# #.## ##.# #
|
||||
# . ## . #
|
||||
# $# #*##*# #$ #
|
||||
# # * * # #
|
||||
# # ## * ## # #
|
||||
# # ## * ## # #
|
||||
# # * * # #
|
||||
# $# #*##*# #$ #
|
||||
# . ## . #
|
||||
# #.## ##.# #
|
||||
# # $ ## $ # #
|
||||
# #
|
||||
############
|
||||
|
||||
Level 38
|
||||
##########
|
||||
##### @ *#####
|
||||
## $$ ##. . ##
|
||||
# # ## # #
|
||||
## # ## ## # ##
|
||||
##. ## $##
|
||||
#* # #*##*# # $ #
|
||||
# . # * * # #
|
||||
# ## ## * ## ## #
|
||||
# ## ## * ## ## #
|
||||
# # * * # . #
|
||||
# $ # #*##*# # *#
|
||||
##$ ## .##
|
||||
## # ## ## # ##
|
||||
# # ## # #
|
||||
## . .## $$ ##
|
||||
#####* #####
|
||||
##########
|
||||
|
||||
Level 39
|
||||
#########
|
||||
# #
|
||||
###$#$ $#$###
|
||||
# . . . . . #
|
||||
###$#$#$ $#$#$###
|
||||
# . . . . . . . #
|
||||
# #$#$#$#$#$#$# #
|
||||
# . . . . . . #
|
||||
###$#$##@##$#$###
|
||||
# . . . . . . #
|
||||
# #$#$#$#$#$#$# #
|
||||
# . . . . . . . #
|
||||
###$#$#$ $#$#$###
|
||||
# . . . . . #
|
||||
###$#$ $#$###
|
||||
# #
|
||||
#########
|
||||
|
||||
Level 40
|
||||
###### ######
|
||||
# ### #
|
||||
# .$.$. # .$.$. #
|
||||
# $.$.$ # $.$.$ #
|
||||
# .$.$ ### $.$. #
|
||||
# $.$.# .$.$ #
|
||||
# .$ #$ $## $. #
|
||||
## # $...$ # ##
|
||||
#### .@. ####
|
||||
## # $...$ # ##
|
||||
# .$ ##$ $# $. #
|
||||
# $.$. #.$.$ #
|
||||
# .$.$ ### $.$. #
|
||||
# $.$.$ # $.$.$ #
|
||||
# .$.$. # .$.$. #
|
||||
# ### #
|
||||
###### ######
|
||||
|
||||
Level 41
|
||||
#####
|
||||
# ## ######
|
||||
# ## # ## #
|
||||
# # # # # ### #
|
||||
# # # ### # # #
|
||||
# # $ # $ # #
|
||||
# #$#*.#.*#$## #
|
||||
## *.$ $.* ##
|
||||
### .$ . $. ####
|
||||
### .#. ###
|
||||
#### .$ . $. ###
|
||||
## *.$@$.* ##
|
||||
# ##$#*.#.*#$# #
|
||||
# # $ # $ # #
|
||||
# # # ### # # #
|
||||
# ### # # # # #
|
||||
# ## # ## #
|
||||
###### ## #
|
||||
#####
|
||||
|
||||
Level 42
|
||||
##### #####
|
||||
# # # #
|
||||
### ##### ###
|
||||
# .$.$. # $.$ #
|
||||
### $.$.$ #.$.$.$.###
|
||||
# $.$.$.$ $.$.$.$ #
|
||||
# .$.$.$. .$.$.$. #
|
||||
# $.$.$.$ $.$.$.$ #
|
||||
### $.$.$ #.$.$.$.###
|
||||
# .$.$. . $.$ #
|
||||
### #.@.# ###
|
||||
# $.$ . .$.$. #
|
||||
###.$.$.$.# $.$.$ ###
|
||||
# $.$.$.$ $.$.$.$ #
|
||||
# .$.$.$. .$.$.$. #
|
||||
# $.$.$.$ $.$.$.$ #
|
||||
###.$.$.$.# $.$.$ ###
|
||||
# $.$ # .$.$. #
|
||||
### ##### ###
|
||||
# # # #
|
||||
##### #####
|
||||
|
||||
Level 43
|
||||
#####
|
||||
## ##
|
||||
##.$.$.##
|
||||
##$.$.$##
|
||||
# .$.$. #
|
||||
# $.$.$ #
|
||||
# .$.$. #
|
||||
###### $.$.$ ######
|
||||
### .$.$. ###
|
||||
##.$.$.$.$.$.$.$.$.$.##
|
||||
# $.$.$.$.$ $.$.$.$.$ #
|
||||
# .$.$.$.$ @ $.$.$.$. #
|
||||
# $.$.$.$.$ $.$.$.$.$ #
|
||||
##.$.$.$.$.$.$.$.$.$.##
|
||||
### .$.$. ###
|
||||
###### $.$.$ ######
|
||||
# .$.$. #
|
||||
# $.$.$ #
|
||||
# .$.$. #
|
||||
##$.$.$##
|
||||
##.$.$.##
|
||||
## ##
|
||||
#####
|
||||
|
||||
Level 44
|
||||
#
|
||||
# #
|
||||
## ##
|
||||
# $ #
|
||||
# $ $ #
|
||||
## .$.$.$. ##
|
||||
# .$.$.$.$. #
|
||||
# .$.$.$.$.$. #
|
||||
## .$.$.$.$.$.$. ##
|
||||
# $.$.$. .$.$.$ #
|
||||
# $.$.$. .$.$.$ #
|
||||
# $ $.$. @ .$.$ $ #
|
||||
# $.$.$. .$.$.$ #
|
||||
# $.$.$. .$.$.$ #
|
||||
## .$.$.$.$.$.$. ##
|
||||
# .$.$.$.$.$. #
|
||||
# .$.$.$.$. #
|
||||
## .$.$.$. ##
|
||||
# $ $ #
|
||||
# $ #
|
||||
## ##
|
||||
# #
|
||||
#
|
||||
|
||||
Level 45
|
||||
####
|
||||
# ########
|
||||
# . #
|
||||
# ### $$ #
|
||||
# $# # .$#
|
||||
##### # . .#.######
|
||||
# $. # # . $ #
|
||||
# $.#.###$### $ #
|
||||
# $ . #. .#####.##
|
||||
# # ## *$$ # # #
|
||||
# # . $ $@$ $ . # #
|
||||
# # # $$* ## # #
|
||||
##.#####. .# . $ #
|
||||
# $ ###$###.#.$ #
|
||||
# $ . # # .$ #
|
||||
######.#. . # #####
|
||||
#$. # #$ #
|
||||
# $$ ### #
|
||||
# . #
|
||||
######## #
|
||||
####
|
||||
|
||||
Level 46
|
||||
#####
|
||||
# #####
|
||||
# # # #####
|
||||
# # # #
|
||||
#####$# #$#
|
||||
# $ $ ####$ #####
|
||||
# # # # ## # #
|
||||
# ##### # # $$ # #
|
||||
### $ #@# # #
|
||||
# ####.... # # ###
|
||||
# # # .... # # #
|
||||
# # # .... # # #
|
||||
### # # ....#### #
|
||||
# # # # $ ###
|
||||
# # $$ # # ##### #
|
||||
# # ## # # # #
|
||||
##### $#### $ $ #
|
||||
#$# #$#####
|
||||
# # # #
|
||||
##### # # #
|
||||
##### #
|
||||
#####
|
||||
|
||||
Level 47
|
||||
################ #######
|
||||
# # # #
|
||||
# $ $ $ $ ### ##### ### ##
|
||||
# $ $ $ $ $ . # $ . ##
|
||||
# $ $ ### #.#.# ### #.#.###
|
||||
# $ $ $ . # . $ . # . #
|
||||
## ### #.#.# ### #.#.# ### ##
|
||||
# . # . $ # . $ $.$##
|
||||
###.#.# ### # @ # ### #.#.###
|
||||
##$.$ $ . # $ . # . #
|
||||
## ### #.#.# ### #.#.# ### ##
|
||||
# . # . $ . # . $ $ $ #
|
||||
###.#.# ### #.#.# ### $ $ #
|
||||
## . $ # . $ $ $ $ $ #
|
||||
## ### ##### ### $ $ $ $ #
|
||||
# # # #
|
||||
####### ################
|
||||
|
||||
Level 48
|
||||
########################## #
|
||||
## ##
|
||||
# *.*.* *.*.* *.*.* *.*.* ###
|
||||
# .$ $.$.$ $.$.$ $.$.$ $. .###
|
||||
# * $ * * $ * * $ * * $ *# #
|
||||
# .$ $.*.$ $.*.$ $.*.$ $.*.* #
|
||||
# *.*.$ $.*.$ $.*.$ $.*.$ $. #
|
||||
# $ * $ * * $ * * $ * * $ * #
|
||||
# *.*.$ $.*.$ $.*.$ $.*.$ $. #
|
||||
# .$ $.*.$ $.*+$ $.*.$ $.*.* #
|
||||
# * $ * * $ * * $ * * $ * $ #
|
||||
# .$ $.*.$ $.*.$ $.*.$ $.*.* #
|
||||
# *.*.$ $.*.$ $.*.$ $.*.$ $. #
|
||||
# #* $ * * $ * * $ * * $ * #
|
||||
###. .$ $.$.$ $.$.$ $.$.$ $. #
|
||||
### *.*.* *.*.* *.*.* *.*.* #
|
||||
## ##
|
||||
# ##########################
|
||||
|
||||
Level 49
|
||||
####################
|
||||
# # # #
|
||||
###$.$ $.$ $.$ $.$###
|
||||
# $. .$$.#.$$. .$$.#.$ #
|
||||
# .###.. # ..###.. # . #
|
||||
# $. .$$.#.$$. .$$.#.$ #
|
||||
# $.$ $.$ $.$ $.$ #
|
||||
# $.$ $.$ $.$ $.$ #
|
||||
# $.#.$$. .$$.#.$$. .$ #
|
||||
##. # ..###.. # ..###.##
|
||||
# $.#.$$. .$$.#.$$. .$ #
|
||||
# $.$ $.$ $.$ $.$ #
|
||||
# $.$ $.$ $.$ $.$ #
|
||||
# $. .$$.#.$$. .$$.#.$ #
|
||||
##.###.. # ..###.. # .##
|
||||
# $. .$$.#.$$. .$$.#.$ #
|
||||
# $.$ $.$ $.$ $.$ #
|
||||
# $.$ $.$ $.$ $.$ #
|
||||
# $.#.$$. .$$.#.$$. .$ #
|
||||
# . # ..###.. # ..###. #
|
||||
# $.#.$$. .$$.#.$$. .$ #
|
||||
###$.$ $.$ $.$ $.$###
|
||||
# # # @#
|
||||
####################
|
||||
|
||||
Level 50
|
||||
#########################
|
||||
## # # # ##
|
||||
# # .$.$.$.$ $.$.$.$. # #
|
||||
# .$.$.$.$.$.$.$.$.$. #
|
||||
# .$.$.$.$.$.$.$.$.$.$. #
|
||||
##.$.$.$.$.$.$.$.$.$.$.$.##
|
||||
# $.$.$.$.$.$.$.$.$.$.$.$ #
|
||||
# .$.$.$.$.$.$.$.$.$.$.$. #
|
||||
# $.$.$.$.$.$.$.$.$.$.$.$ #
|
||||
# .$.$.$.$.$.$.$.$.$.$.$. #
|
||||
# $.$.$.$.$.$.$.$.$.$.$.$ #
|
||||
# .$.$.$.$. .$.$.$.$. #
|
||||
# $.$.$.$.$ $ $.$.$.$.$ #
|
||||
## $.$.$.$. $@$ .$.$.$.$ ##
|
||||
# $.$.$.$.$ $ $.$.$.$.$ #
|
||||
# .$.$.$.$. .$.$.$.$. #
|
||||
# $.$.$.$.$.$.$.$.$.$.$.$ #
|
||||
# .$.$.$.$.$.$.$.$.$.$.$. #
|
||||
# $.$.$.$.$.$.$.$.$.$.$.$ #
|
||||
# .$.$.$.$.$.$.$.$.$.$.$. #
|
||||
# $.$.$.$.$.$.$.$.$.$.$.$ #
|
||||
##.$.$.$.$.$.$.$.$.$.$.$.##
|
||||
# .$.$.$.$.$.$.$.$.$.$. #
|
||||
# .$.$.$.$.$.$.$.$.$. #
|
||||
# # .$.$.$.$ $.$.$.$. # #
|
||||
## # # # ##
|
||||
#########################
|
||||
|
42
Sokoban Game/microBan.txt
Normal file
42
Sokoban Game/microBan.txt
Normal file
@ -0,0 +1,42 @@
|
||||
Level 1
|
||||
####
|
||||
# .#
|
||||
# ###
|
||||
#*@ #
|
||||
# $ #
|
||||
# ###
|
||||
####
|
||||
|
||||
Level 2
|
||||
######
|
||||
# #
|
||||
# #@ #
|
||||
# $* #
|
||||
# .* #
|
||||
# #
|
||||
######
|
||||
|
||||
Level 3
|
||||
####
|
||||
### ####
|
||||
# $ #
|
||||
# # #$ #
|
||||
# . .#@ #
|
||||
#########
|
||||
|
||||
Level 4
|
||||
########
|
||||
# #
|
||||
# .**$@#
|
||||
# #
|
||||
##### #
|
||||
####
|
||||
|
||||
Level 5
|
||||
#######
|
||||
# #
|
||||
# .$. #
|
||||
## $@$ #
|
||||
# .$. #
|
||||
# #
|
||||
########
|
Loading…
Reference in New Issue
Block a user