##! Memoria general
set_memory 100000 1000000000
##!
##! JUEGO DE PRUEBAS DE CAMBRA
##!
##!
##1 Cambra: Constructora
##!
##1.1 Constructora basica
init c cambra
print_c
#***
#* *
#***
##1.2 Constructora 1 orientacion
init cN cambra N
print_c
#* *
#* *
#***
init cE cambra E
print_c
#***
#*  
#***
init cW cambra W
print_c
#***
#  *
#***
init cS cambra S
print_c
#***
#* *
#* *
##1.3 Constructora 2 orientaciones
init cNS cambra N S
print_c
#* *
#* *
#* *
init cEW cambra E W
print_c
#***
#   
#***
init cNE cambra N E
print_c
#* *
#*  
#***
init cNW cambra N W
print_c
#* *
#  *
#***
init cES cambra E S
print_c
#***
#*  
#* *
init cSW cambra S W
print_c
#***
#  *
#* *
##1.4 Constructora 3 orientaciones
init cNES cambra N E S
print_c
#* *
#*  
#* *
init cESW cambra E S W
print_c
#***
#   
#* *
init cSWN cambra S W N
print_c
#* *
#  *
#* *
init cNEW cambra N E W
print_c
#* *
#   
#***
##1.5 Constructora 4 orientaciones
init cNESW cambra N E W S
print_c
#* *
#   
#* *
##!
##2 Cambra: constructora por copia y destructora
##!
initcopy ccopia = c
ccopia print_c
#***
#* *
#***
ccopia destroy
initcopy ccopia = cNEW
ccopia print_c
#* *
#   
#***
ccopia destroy
##!
##3 Cambra: copia
##!
init ccopia cambra
ccopia = cNEW
ccopia print_c
#* *
#   
#***
ccopia destroy
##!
##4 Cambra: hi_ha_porta
##!
c hi_ha_porta N
#false
c hi_ha_porta E
#false
c hi_ha_porta W
#false
c hi_ha_porta S
#false
##!
cN hi_ha_porta N
#true
cN hi_ha_porta E
#false
cN hi_ha_porta W
#false
cN hi_ha_porta S
#false
##!
cE hi_ha_porta N
#false
cE hi_ha_porta E
#true
cE hi_ha_porta W
#false
cE hi_ha_porta S
#false
##!
cW hi_ha_porta N
#false
cW hi_ha_porta E
#false
cW hi_ha_porta W
#true
cW hi_ha_porta S
#false
##!
cNES hi_ha_porta N
#true
cNES hi_ha_porta E
#true
cNES hi_ha_porta W
#false
cNES hi_ha_porta S
#true
##!
cESW hi_ha_porta N
#false
cESW hi_ha_porta E
#true
cESW hi_ha_porta W
#true
cESW hi_ha_porta S
#true
##!
cNESW hi_ha_porta N
#true
cNESW hi_ha_porta E
#true
cNESW hi_ha_porta W
#true
cNESW hi_ha_porta S
#true
##!
cNESW hi_ha_porta norte
#false
cNESW hi_ha_porta NO_DIR
#false
c hi_ha_porta NO_DIR
#false
##!
##5 Cambra: obre_porta_c
##!
c obre_porta_c N
c print_c
#* *
#* *
#***
c obre_porta_c E
c print_c
#* *
#*  
#***
c obre_porta_c W
c print_c
#* *
#   
#***
c obre_porta_c S
c print_c
#* *
#   
#* *
c obre_porta_c S
c print_c
#* *
#   
#* *
c obre_porta_c Sur
#Error::cambra:21:La paret no existeix
c obre_porta_c NO_DIR
#Error::cambra:21:La paret no existeix
##!
##6 Cambra: tanca_porta_c
##!
c tanca_porta_c N
c print_c
#***
#   
#* *
c tanca_porta_c S
c print_c
#***
#   
#***
c tanca_porta_c W
c print_c
#***
#*  
#***
c tanca_porta_c E
c print_c
#***
#* *
#***
c tanca_porta_c E
c print_c
#***
#* *
#***
c tanca_porta_c Norte
#Error::cambra:21:La paret no existeix
c tanca_porta_c NO_DIR
#Error::cambra:21:La paret no existeix
##!
##7 Cambra: ==
##!
cNE == cNE
#true
cN == cNE
#false
c == c
#true
cNESW == cNESW
#true
initcopy cSWcopia = cSW
cSWcopia == cSW
#true
cSWcopia obre_porta_c N
cSWcopia == cSW
#false
cSWcopia == cSWN
#true
##!
##8 Cambra: !=
##!
cNE != cNE
#false
cN != cNE
#true
c != c
#false
cNESW != cNESW
#false
initcopy cSWcopia = cSW
cSWcopia != cSW
#false
cSWcopia obre_porta_c N
cSWcopia != cSW
#true
cSWcopia != cSWN
#false
cSWcopia destroy
##!
##9 Cambra: destruccion
##!
c destroy
cN destroy
cE destroy
cS destroy
cW destroy
cNE destroy
cNS destroy
cNW destroy 
cES destroy
cEW destroy
cSW destroy
cNES destroy
cNEW destroy
cESW destroy
cSWN destroy
cNESW destroy
##!
##!
##! JUEGO DE PRUEBAS DE LABERINT
##!
##1 Laberint: Constructora con dimensiones
##!
##1.1 Entrada correcta
##!
init lab1x1 laberint 1 1
print
#1 1
#***
#* *
#***
init lab3x3 laberint 3 3
print
#3 3
#*******
#* * * *
#*******
#* * * *
#*******
#* * * *
#*******
init lab5x2 laberint 5 2
print
#5 2
#*****
#* * *
#*****
#* * *
#*****
#* * *
#*****
#* * *
#*****
#* * *
#*****
init lab2x5 laberint 2 5
print
#2 5
#***********
#* * * * * *
#***********
#* * * * * *
#***********
##!
##1.2 Entrada incorrecta
##!
init laberr laberint 0 14
#Error::laberint:31:El num de fils o cols es incorrecte.
init laberr laberint 12 0
#Error::laberint:31:El num de fils o cols es incorrecte.
init laberr laberint 0 0
#Error::laberint:31:El num de fils o cols es incorrecte.
##!
##1.3 Entrada grande
##!
init lab_gran laberint 100 100
num_files
#100
num_columnes
#100
lab1x1 destroy
lab3x3 destroy
lab5x2 destroy
lab2x5 destroy
lab_gran destroy 
##!
##2 Laberint: Constructora con ficheros
##!
##!
##2.1 Laberinto sin ciclos
##!
init lab_unico laberint ./juegos/laberint_3x3.txt
print
#3 3
#*******
#*   * *
#*** * *
#* * * *
#* * ***
#* *   *
#*******
##!
##2.2 Laberinto con ciclos
##!
init lab_ciclo laberint ./juegos/laberint_3x3_ciclo.txt
print
#3 3
#*******
#*     *
#*** * *
#*   * *
#* * * *
#* *   *
#*******
##!
##2.3 Laberinto sin puertas
##!
init lab_sin_puertas laberint ./juegos/laberint_3x3_sinpuertas.txt
print
#3 3
#*******
#* * * *
#*******
#* * * *
#*******
#* * * *
#*******
##!
##2.4 Laberinto grande
##!
init lab_gran laberint ./juegos/laberint_100x100.txt
num_files
#100
num_columnes
#100
##!
##!
##3 Laberint: Constructora por copia, copia y destructora
##!
##3.1 Constructora por copia
##!
initcopy copia = lab_unico
copia print
#3 3
#*******
#*   * *
#*** * *
#* * * *
#* * ***
#* *   *
#*******
copia destroy
initcopy copia = lab_ciclo
copia print
#3 3
#*******
#*     *
#*** * *
#*   * *
#* * * *
#* *   *
#*******
copia destroy
initcopy copia = lab_sin_puertas
copia print
#3 3
#*******
#* * * *
#*******
#* * * *
#*******
#* * * *
#*******
copia destroy
initcopy copia = lab_gran
copia num_files
#100
copia num_columnes
#100
copia destroy
##!
##3.2 copia
##!
init copia laberint 1 1
copia = lab_unico
copia print
#3 3
#*******
#*   * *
#*** * *
#* * * *
#* * ***
#* *   *
#*******
copia = lab_ciclo
copia print
#3 3
#*******
#*     *
#*** * *
#*   * *
#* * * *
#* *   *
#*******
copia = lab_gran
copia num_files
#100
copia num_columnes
#100
copia = lab_sin_puertas
copia print
#3 3
#*******
#* * * *
#*******
#* * * *
#*******
#* * * *
#*******
##!
##3.3 Destructora
##!
copia destroy
lab_unico destroy
lab_ciclo destroy
lab_sin_puertas destroy
lab_gran destroy
##!
##!
##4 Laberint: consultoras de filas y columnas
##!
##!
init lab1 laberint ./juegos/laberint_7x15.txt
init lab2 laberint ./juegos/laberint_12x3.txt
init lab3 laberint 1 1
init lab4 laberint 20 2
init lab5 laberint ./juegos/laberint_3x3_sinpuertas.txt
##!
##!
lab1 num_columnes 
#15
lab1 num_files
#7
lab2 num_columnes
#3
lab2 num_files
#12
lab3 num_columnes
#1
lab3 num_files
#1
lab4 num_columnes
#2
lab4 num_files
#20
lab5 num_columnes
#3
lab5 num_files
#3
##!
##!
##5 Laberint: obre_porta
##!
##!
##5.1 Apertura erronea
##!
lab1 obre_porta_l Norte 2 2
#Error::cambra:21:La paret no existeix
lab1 obre_porta_l N 0 0
#Error::laberint:32:La posicio no existeix
lab1 obre_porta_l S 7 16
#Error::laberint:32:La posicio no existeix
lab1 obre_porta_l S 8 15
#Error::laberint:32:La posicio no existeix
lab3 obre_porta_l E 1 2
#Error::laberint:32:La posicio no existeix
##!
lab1 obre_porta_l N 1 1
#Error::laberint:33:No es pot obrir una porta a l'exterior
lab1 obre_porta_l N 1 8
#Error::laberint:33:No es pot obrir una porta a l'exterior
lab1 obre_porta_l S 7 14
#Error::laberint:33:No es pot obrir una porta a l'exterior
lab1 obre_porta_l W 3 1
#Error::laberint:33:No es pot obrir una porta a l'exterior
lab1 obre_porta_l E 2 15
#Error::laberint:33:No es pot obrir una porta a l'exterior
##!
lab3 obre_porta_l N 1 1
#Error::laberint:33:No es pot obrir una porta a l'exterior
lab3 obre_porta_l S 1 1
#Error::laberint:33:No es pot obrir una porta a l'exterior
lab3 obre_porta_l E 1 1
#Error::laberint:33:No es pot obrir una porta a l'exterior
lab3 obre_porta_l W 1 1
#Error::laberint:33:No es pot obrir una porta a l'exterior
##!
##!
##5.2 Apertura correcta
##!
##!
##! las siguientes operaciones se realizan con lab5 (3x3)
sel_curr_obj lab5
obre_porta_l S 1 1
print
#3 3
#*******
#* * * *
#* *****
#* * * *
#*******
#* * * *
#*******
obre_porta_l S 1 1
print
#3 3
#*******
#* * * *
#* *****
#* * * *
#*******
#* * * *
#*******
obre_porta_l N 2 1
print
#3 3
#*******
#* * * *
#* *****
#* * * *
#*******
#* * * *
#*******
obre_porta_l W 2 2
print
#3 3
#*******
#* * * *
#* *****
#*   * *
#*******
#* * * *
#*******
obre_porta_l W 3 3
print
#3 3
#*******
#* * * *
#* *****
#*   * *
#*******
#* *   *
#*******
obre_porta_l E 3 1
print
#3 3
#*******
#* * * *
#* *****
#*   * *
#*******
#*     *
#*******
##!
##!
##!
##6 Laberint: operator() 
##!
##!
##6.1 Consultas correctas
obt_cambra 1 1
#***
#* *
#* *
obt_cambra 3 3
#***
#  *
#***
obt_cambra 2 1
#* *
#*  
#***
obt_cambra 1 2
#***
#* *
#***
obt_cambra 2 2
#***
#  *
#***
##!
##6.2 Consultas incorrectas
##!
lab3 obt_cambra 4 1
#Error::laberint:32:La posicio no existeix
lab5 obt_cambra 0 2
#Error::laberint:32:La posicio no existeix
##!
##!
##7 Laberint:tanca_porta
##!
##!
##7.1 Cierres correctos
##!
sel_curr_obj lab5
tanca_porta_l N 1 1
obt_cambra 1 1
#***
#* *
#* *
tanca_porta_l S 1 1
obt_cambra 1 1
#***
#* *
#***
obt_cambra 2 1
#***
#*  
#***
tanca_porta_l W 3 3
print
#3 3
#*******
#* * * *
#*******
#*   * *
#*******
#*   * *
#*******
tanca_porta_l E 3 3
print
#3 3
#*******
#* * * *
#*******
#*   * *
#*******
#*   * *
#*******
tanca_porta_l E 2 1
print
#3 3
#*******
#* * * *
#*******
#* * * *
#*******
#*   * *
#*******
tanca_porta_l S 2 2
print
#3 3
#*******
#* * * *
#*******
#* * * *
#*******
#*   * *
#*******
tanca_porta_l S 3 2
print
#3 3
#*******
#* * * *
#*******
#* * * *
#*******
#*   * *
#*******
##!
lab1 destroy
lab2 destroy
lab3 destroy
lab4 destroy
lab5 destroy
##!
##! Fin del juego de pruebas de laberint
##! 
##!
##! JOC DE PROVES DE TESEUS
##!---------------------------------------------------------------------
##!
##!
##!---------------------------------------------------------------------
##1 Laberints sense portes
##!---------------------------------------------------------------------
##!
init lab1x1 laberint_teseus 1 1
resoldre 0 1 1 1
#Error::laberint_teseus:62:La cambra d'inici o de final no es valida.
resoldre 1 1 1 1
#[(1,1)]
##!
init lab2x5 laberint_teseus 2 5
resoldre 1 2 1 1
#Error::laberint_teseus:61:El laberint no te solucio
resoldre 1 6 1 1
#Error::laberint_teseus:62:La cambra d'inici o de final no es valida.
resoldre 1 1 1 1
#[(1,1)]
resoldre 2 1 2 1
#[(2,1)]
##!
init lab3x3 laberint_teseus 3 3
resoldre 1 1 2 1
#Error::laberint_teseus:61:El laberint no te solucio
resoldre 1 1 6 1  
#Error::laberint_teseus:62:La cambra d'inici o de final no es valida.
resoldre 1 1 1 1
#[(1,1)]
resoldre 3 3 3 3
#[(3,3)]
##!
init lab5x2 laberint_teseus 5 2
resoldre 1 1 1 2
#Error::laberint_teseus:61:El laberint no te solucio
resoldre 1 1 1 6
#Error::laberint_teseus:62:La cambra d'inici o de final no es valida.
resoldre 1 1 1 1
#[(1,1)]
resoldre 2 1 2 1
#[(2,1)]
resoldre 3 2 3 2
#[(3,2)]
resoldre 5 2 5 2
#[(5,2)]
##!
##!
lab1x1 destroy
lab2x5 destroy
lab3x3 destroy
lab5x2 destroy
##!
##!
##!---------------------------------------------------------------------
##2 Laberint amb cicles
##!---------------------------------------------------------------------
##!
##!---------------------------------------------------------------------
##2.1 Laberint sense cicles
##!---------------------------------------------------------------------
##!
init lab_unic laberint_teseus ./juegos/laberint_3x3.txt
resoldre 1 1 3 3
#[(1,1),(1,2),(2,2),(3,2),(3,3)]
resoldre 1 2 2 3
#Error::laberint_teseus:61:El laberint no te solucio
resoldre 1 2 2 1
#Error::laberint_teseus:61:El laberint no te solucio
resoldre 1 2 1 3
#Error::laberint_teseus:61:El laberint no te solucio
resoldre 2 1 3 1
#[(2,1),(3,1)]
lab_unic destroy
##!
##!---------------------------------------------------------------------
##2.2 Laberint amb cicles
##!---------------------------------------------------------------------
##!
init lab_cicle laberint_teseus ./juegos/laberint_3x3_ciclo.txt
resoldre 1 3 3 3
#[(1,3),(2,3),(3,3)]
resoldre 1 2 2 3
#[(1,2),(1,3),(2,3)]
resoldre 1 2 2 1
#[(1,2),(2,2),(2,1)]
chequea_camino_minimo 1 2 3 3
#true
lab_cicle destroy
##!
##!
##!---------------------------------------------------------------------
##2.3 Laberint gran sense cicles
##!---------------------------------------------------------------------
##!
init lab_gran laberint_teseus ./juegos/laberint_30x30.txt
resoldre 1 3 3 3
#[(1,3),(1,4),(1,5),(2,5),(2,4),(2,3),(3,3)]
resoldre 1 2 2 3
#[(1,2),(2,2),(2,3)]
resoldre 1 2 2 1
#[(1,2),(1,1),(2,1)]
resoldre 10 20 22 14
#[(10,20),(10,21),(9,21),(9,22),(8,22),(7,22),(6,22),(5,22),(4,22),(3,22),(3,21),(4,21),(5,21),(5,20),(4,20),(4,19),(5,19),(6,19),(6,20),(7,20),(7,19),(8,19),(9,19),(10,19),(11,19),(11,18),(11,17),(12,17),(12,16),(12,15),(13,15),(13,16),(14,16),(14,17),(15,17),(15,16),(15,15),(16,15),(17,15),(18,15),(19,15),(20,15),(21,15),(21,14),(22,14)]
resoldre 30 30 1 1
#[(30,30),(30,29),(30,28),(29,28),(29,27),(29,26),(29,25),(28,25),(28,26),(27,26),(26,26),(26,25),(27,25),(27,24),(27,23),(28,23),(29,23),(29,22),(28,22),(28,21),(29,21),(29,20),(28,20),(27,20),(27,19),(26,19),(26,20),(25,20),(25,19),(24,19),(24,20),(23,20),(22,20),(21,20),(21,19),(20,19),(19,19),(18,19),(17,19),(16,19),(16,18),(16,17),(17,17),(17,16),(17,15),(18,15),(19,15),(19,14),(19,13),(19,12),(19,11),(19,10),(19,9),(20,9),(21,9),(21,10),(22,10),(22,9),(23,9),(23,8),(23,7),(23,6),(22,6),(22,5),(22,4),(22,3),(21,3),(21,4),(21,5),(20,5),(19,5),(19,4),(18,4),(18,5),(17,5),(17,4),(16,4),(16,3),(16,2),(15,2),(15,3),(15,4),(14,4),(14,5),(13,5),(12,5),(12,6),(11,6),(10,6),(9,6),(8,6),(8,7),(7,7),(6,7),(6,6),(5,6),(5,5),(6,5),(7,5),(7,4),(7,3),(7,2),(8,2),(8,1),(7,1),(6,1),(5,1),(4,1),(3,1),(2,1),(1,1)]
resoldre 1 1 30 30
#[(1,1),(2,1),(3,1),(4,1),(5,1),(6,1),(7,1),(8,1),(8,2),(7,2),(7,3),(7,4),(7,5),(6,5),(5,5),(5,6),(6,6),(6,7),(7,7),(8,7),(8,6),(9,6),(10,6),(11,6),(12,6),(12,5),(13,5),(14,5),(14,4),(15,4),(15,3),(15,2),(16,2),(16,3),(16,4),(17,4),(17,5),(18,5),(18,4),(19,4),(19,5),(20,5),(21,5),(21,4),(21,3),(22,3),(22,4),(22,5),(22,6),(23,6),(23,7),(23,8),(23,9),(22,9),(22,10),(21,10),(21,9),(20,9),(19,9),(19,10),(19,11),(19,12),(19,13),(19,14),(19,15),(18,15),(17,15),(17,16),(17,17),(16,17),(16,18),(16,19),(17,19),(18,19),(19,19),(20,19),(21,19),(21,20),(22,20),(23,20),(24,20),(24,19),(25,19),(25,20),(26,20),(26,19),(27,19),(27,20),(28,20),(29,20),(29,21),(28,21),(28,22),(29,22),(29,23),(28,23),(27,23),(27,24),(27,25),(26,25),(26,26),(27,26),(28,26),(28,25),(29,25),(29,26),(29,27),(29,28),(30,28),(30,29),(30,30)]
lab_gran destroy
##!
##!
exit
