Miquel_Fuster

La Torre - Aventura Conversacional

Jan 4th, 2022 (edited)
1,920
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
COBOL 42.56 KB | None | 0 0
  1. *>****************************************************************
  2. *> Author:  Miquel A. Fuster Sancho
  3. *> Date:    21-DIC-2021
  4. *> Purpose: Profundizar en Cobol mediante un proyecto diferente
  5. *> Tectonics: cobc
  6. *> Disclaimer: Este código pretende ser una implementación del
  7. *>  código de 'La Torre' aparecido en el tutorial de INFSP
  8. *>  en la página del Club de Aventuras AD
  9. *>  (ver web http://www.caad.es/informate/infsp/infsp6_docs.htm)
  10. *>  La autoría de la aventura es de sus correspondientes autores
  11. *>  originales. Este es solamente un ejercicio de programación
  12. *>  sin ningún ánimo de lucro.
  13. *>****************************************************************
  14.  
  15. IDENTIFICATION DIVISION.
  16. PROGRAM-ID. LA-TORRE.
  17. DATA DIVISION.
  18. FILE SECTION.
  19. WORKING-STORAGE SECTION.
  20. 01 LOCALIDADES OCCURS 8 INDEXED BY LOC-ID.
  21.     05 NOMBRE-LOCALIDAD         PIC X(32).
  22.     05 DESCRIPCION-LOCALIDAD    PIC X(255).
  23.     05 DIRECCIONES.
  24.         10 AL-N                 PIC 9.
  25.         10 AL-S                 PIC 9.
  26.         10 AL-E                 PIC 9.
  27.         10 AL-O                 PIC 9.
  28.         10 A-ARRIBA             PIC 9.
  29.         10 A-ABAJO              PIC 9.
  30.         10 A-ADENTRO            PIC 9.
  31.         10 A-AFUERA             PIC 9.
  32.  
  33. 01 OBJETOS OCCURS 13 INDEXED BY OBJ-ID.
  34.     05 NOMBRE-OBJETO        PIC X(32).
  35.     05 DESCRIPCION-OBJETO   PIC X(255).
  36.     05 SINONIMOS            PIC X(32)   OCCURS 5 INDEXED BY SINONIMOS-ID.
  37.     05 PERTENENCIA          PIC 9.
  38.     05 ATRIBUTOS.
  39.         10 INTERACTIVIDAD   PIC 9.
  40.             88 ESTANDAR     VALUE 0.
  41.             88 ESCENARIO    VALUE 1.
  42.             88 OCULTO       VALUE 2.
  43.         10 GENERO           PIC 9.
  44.             88 MASCULINO    VALUE 0.
  45.             88 FEMENINO     VALUE 1.
  46.         10 NUMERO           PIC 9.
  47.             88 SINGULAR     VALUE 0.
  48.             88 PLURAL       VALUE 1.
  49.         10 GENERAL          PIC 9.
  50.             88 DESACTIVADO  VALUE 0.
  51.             88 ACTIVADO     VALUE 1.
  52.  
  53. 01 PALABRAS-PARSER.
  54.     05 VERBO            PIC A(32).
  55.     05 NOMBRE-1         PIC X(32).
  56.     05 PREPOSICION      PIC A(32).
  57.     05 NOMBRE-2         PIC X(32).
  58.  
  59. 01 CADENA-DE-SALIDA.
  60.     05 N-ESPACIOS-FINALES   PIC 999     USAGE COMP-3.
  61.     05 LARGO-DE-CADENA      PIC 999     USAGE COMP-3.
  62.     05 CADENA-SALIDA        PIC X(255).
  63.  
  64. 77 SALIR-JUEGO              PIC 9.
  65. 77 ENTRADA-JUGADOR          PIC X(255).
  66. 77 VERBO-ID                 PIC 99.
  67. 77 OBJETO-1-ID              PIC 99.
  68. 77 OBJETO-2-ID              PIC 99.
  69. 77 LOCALIDAD-ACTUAL         PIC 9.
  70. 77 NUMERO-OBJETOS           PIC 99.
  71.  
  72. PROCEDURE DIVISION.
  73.  
  74. JUEGO SECTION.
  75.  
  76. MAIN-PROCEDURE.
  77.     PERFORM MOSTRAR-TITULO.
  78.     PERFORM INICIALIZAR-LOCALIDADES.
  79.     PERFORM INICIALIZAR-OBJETOS.
  80.     PERFORM INICIALIZAR-JUEGO.
  81.     PERFORM DESCRIBIR-LOCALIDAD.
  82.     PERFORM BUCLE-JUEGO UNTIL SALIR-JUEGO EQUALS 1.
  83. STOP RUN.
  84.  
  85. BUCLE-JUEGO.
  86.     IF LOCALIDAD-ACTUAL = 7 *> SE LLEGÓ AL OBJETIVO FINAL
  87.         PERFORM REINICIAR-JUEGO
  88.     ELSE
  89.         PERFORM OBTENER-ENTRADA
  90.         PERFORM PARSEAR
  91.     END-IF.
  92.  
  93. MOSTRAR-TITULO.
  94.     DISPLAY 'LA TORRE'.
  95.     DISPLAY ' '
  96.     DISPLAY 'Estás encerrado en una torre desde hace mucho tiempo.'.
  97.     DISPLAY 'Nadie se acuerda ya de tí. Solo tú puedes obtener tu libertad.'.
  98.     DISPLAY ' '.
  99.     DISPLAY 'Pulsa una tecla para continuar...'.
  100.     ACCEPT ENTRADA-JUGADOR.
  101.  
  102. TERMINAR-JUEGO.
  103.     DISPLAY '¿Estás seguro que quieres terminar la partida? ' WITH NO ADVANCING.
  104.     ACCEPT ENTRADA-JUGADOR.
  105.     MOVE FUNCTION UPPER-CASE(ENTRADA-JUGADOR) TO ENTRADA-JUGADOR.
  106.     IF ENTRADA-JUGADOR = 'S' OR 'SI'
  107.         MOVE 1 TO SALIR-JUEGO
  108.     END-IF.
  109.  
  110. REINICIAR-JUEGO.
  111.     DISPLAY ' '.
  112.     DISPLAY '¿Quieres jugar de nuevo? ' WITH NO ADVANCING.
  113.     ACCEPT ENTRADA-JUGADOR.
  114.     MOVE FUNCTION UPPER-CASE(ENTRADA-JUGADOR) TO ENTRADA-JUGADOR.
  115.     IF ENTRADA-JUGADOR = 'S' OR 'SI'
  116.         PERFORM MAIN-PROCEDURE
  117.     ELSE
  118.         MOVE 1 TO SALIR-JUEGO
  119.     END-IF.
  120.  
  121. ESCRIBIR-CADENA.
  122.     *> Imprime la cadena sin los espacios del final
  123.     MOVE ZERO TO N-ESPACIOS-FINALES.
  124.     *> cuenta cuantos espacios hay al final
  125.     INSPECT FUNCTION REVERSE(CADENA-SALIDA) TALLYING N-ESPACIOS-FINALES FOR LEADING SPACES.
  126.     *> resta los espacios al largo de la cadena
  127.     SUBTRACT N-ESPACIOS-FINALES FROM LENGTH OF CADENA-SALIDA GIVING LARGO-DE-CADENA
  128.     *> en LARGO-DE-CADENA está la cantidad de caracteres útiles de la cadena
  129.     DISPLAY CADENA-SALIDA(1:LARGO-DE-CADENA) WITH NO ADVANCING.
  130.  
  131. ESCRIBIR-CADENA-CON-SALTO.
  132.     PERFORM ESCRIBIR-CADENA.
  133.     DISPLAY ' '.
  134.  
  135. ENUMERAR-OBJETOS-VISIBLES.
  136.     PERFORM CUENTA-OBJETOS-VISIBLES.
  137.  
  138.     IF NUMERO-OBJETOS > 0
  139.         DISPLAY 'Puedes ver ' WITH NO ADVANCING
  140.         PERFORM VARYING OBJ-ID FROM 1 BY 1 UNTIL OBJ-ID > 13
  141.             IF INTERACTIVIDAD(OBJ-ID) = 0 AND PERTENENCIA(OBJ-ID) = LOCALIDAD-ACTUAL
  142.                 EVALUATE TRUE
  143.                     WHEN MASCULINO(OBJ-ID)
  144.                         EVALUATE TRUE
  145.                             WHEN SINGULAR(OBJ-ID)
  146.                                 DISPLAY 'un ' WITH NO ADVANCING
  147.                             WHEN PLURAL(OBJ-ID)
  148.                                 DISPLAY 'unos ' WITH NO ADVANCING
  149.                         END-EVALUATE
  150.                     WHEN FEMENINO(OBJ-ID)
  151.                         EVALUATE TRUE
  152.                             WHEN SINGULAR(OBJ-ID)
  153.                                 DISPLAY 'una ' WITH NO ADVANCING
  154.                             WHEN PLURAL(OBJ-ID)
  155.                                 DISPLAY 'unas ' WITH NO ADVANCING
  156.                         END-EVALUATE
  157.                 END-EVALUATE
  158.                 MOVE NOMBRE-OBJETO(OBJ-ID) TO CADENA-SALIDA
  159.                 PERFORM ESCRIBIR-CADENA
  160.                 SUBTRACT 1 FROM NUMERO-OBJETOS
  161.                 IF NUMERO-OBJETOS > 0
  162.                     DISPLAY ', ' WITH NO ADVANCING
  163.                 ELSE
  164.                     DISPLAY '.'
  165.                 END-IF
  166.             END-IF
  167.         END-PERFORM
  168.     END-IF.
  169.  
  170. CUENTA-OBJETOS-VISIBLES.
  171.     INITIALIZE NUMERO-OBJETOS.
  172.     PERFORM VARYING OBJ-ID FROM 1 BY 1 UNTIL OBJ-ID > 13
  173.         IF INTERACTIVIDAD(OBJ-ID) = 0 AND PERTENENCIA(OBJ-ID) = LOCALIDAD-ACTUAL
  174.             ADD 1 TO NUMERO-OBJETOS
  175.         END-IF
  176.     END-PERFORM.
  177.  
  178. CUENTA-OBJETOS-INVENTARIO.
  179.     INITIALIZE NUMERO-OBJETOS.
  180.     PERFORM VARYING OBJ-ID FROM 1 BY 1 UNTIL OBJ-ID > 13
  181.         IF PERTENENCIA(OBJ-ID) = 8
  182.             ADD 1 TO NUMERO-OBJETOS
  183.         END-IF
  184.     END-PERFORM.
  185.  
  186. CUENTA-SALIDAS.
  187.     INITIALIZE NUMERO-OBJETOS.
  188.     IF AL-N(LOCALIDAD-ACTUAL) > 0
  189.         ADD 1 TO NUMERO-OBJETOS
  190.     END-IF.
  191.     IF AL-S(LOCALIDAD-ACTUAL) > 0
  192.         ADD 1 TO NUMERO-OBJETOS
  193.     END-IF.
  194.     IF AL-E(LOCALIDAD-ACTUAL) > 0
  195.         ADD 1 TO NUMERO-OBJETOS
  196.     END-IF.
  197.     IF AL-O(LOCALIDAD-ACTUAL) > 0
  198.         ADD 1 TO NUMERO-OBJETOS
  199.     END-IF.
  200.     IF A-ARRIBA(LOCALIDAD-ACTUAL) > 0
  201.         ADD 1 TO NUMERO-OBJETOS
  202.     END-IF.
  203.     IF A-ABAJO(LOCALIDAD-ACTUAL) > 0
  204.         ADD 1 TO NUMERO-OBJETOS
  205.     END-IF.
  206.     IF A-ADENTRO(LOCALIDAD-ACTUAL) > 0
  207.         ADD 1 TO NUMERO-OBJETOS
  208.     END-IF.
  209.     IF A-AFUERA(LOCALIDAD-ACTUAL) > 0
  210.         ADD 1 TO NUMERO-OBJETOS
  211.     END-IF.
  212.  
  213.  
  214. INICIALIZACIONES SECTION.
  215.  
  216. INICIALIZAR-JUEGO.
  217.     SET LOCALIDAD-ACTUAL TO 1.
  218.  
  219. INICIALIZAR-LOCALIDADES.
  220.     SET LOC-ID TO 0.
  221.  
  222. *> 1. PUERTA PRINCIPAL
  223.     SET LOC-ID UP BY 1.
  224.     INITIALIZE LOCALIDADES(LOC-ID).
  225.     MOVE 'Puerta Principal' TO NOMBRE-LOCALIDAD(LOC-ID).
  226.     MOVE 'Estás junto a la puerta principal. A su lado puedes ver una mesa de guardia y en la pared norte una chimenea.' TO DESCRIPCION-LOCALIDAD(LOC-ID).
  227.     MOVE 2 TO AL-E(LOC-ID).
  228.  
  229. *> 2. DORMITORIO
  230.     SET LOC-ID UP BY 1.
  231.     INITIALIZE LOCALIDADES(LOC-ID).
  232.     MOVE 'Dormitorio' TO NOMBRE-LOCALIDAD(LOC-ID).
  233.     MOVE 'Varios maltrechos catres se amontonan en esta habitación.' TO DESCRIPCION-LOCALIDAD(LOC-ID).
  234.     MOVE 1 TO AL-O(LOC-ID).
  235.     MOVE 3 TO AL-E(LOC-ID).
  236.  
  237. *> 3. ESCALERA DE CARACOL
  238.     SET LOC-ID UP BY 1.
  239.     INITIALIZE LOCALIDADES(LOC-ID).
  240.     MOVE 'Escalera de caracol' TO NOMBRE-LOCALIDAD(LOC-ID).
  241.     MOVE 'El viento ulula a través de la empinada escalera de caracol, una vieja armadura parece vigilar la escalera.' TO DESCRIPCION-LOCALIDAD(LOC-ID).
  242.     MOVE 5 TO A-ARRIBA(LOC-ID).
  243.     MOVE 2 TO AL-O(LOC-ID).
  244.  
  245. *> 4. MAZMORRA
  246.     SET LOC-ID UP BY 1.
  247.     INITIALIZE LOCALIDADES(LOC-ID).
  248.     MOVE 'Mazmorra' TO NOMBRE-LOCALIDAD(LOC-ID).
  249.     MOVE 'Una silenciona estancia débilmente alumbrada por los rayos de luna que se filtran a través de un pequeño ventanuco. El suelo está lleno de paja, colgando de unos grilletes en la pared observas un esqueleto humano.' TO DESCRIPCION-LOCALIDAD(LOC-ID).
  250.     MOVE 5 TO AL-E(LOC-ID).
  251.  
  252. *> 5. ESCALERA DE CARALCOL 2
  253.     SET LOC-ID UP BY 1.
  254.     INITIALIZE LOCALIDADES(LOC-ID).
  255.     MOVE 'Ecalera de caracol' TO NOMBRE-LOCALIDAD(LOC-ID).
  256.     MOVE 'Los desgastados peldaños de piedra resbalan en ocasiones. A mitad de la escalera una antorcha en la pared impide que la oscuridad sea completa.' TO DESCRIPCION-LOCALIDAD(LOC-ID).
  257.     MOVE 3 TO A-ABAJO(LOC-ID).
  258.     MOVE 6 TO A-ARRIBA(LOC-ID).
  259.  
  260. *> 6. ALTO TORRE
  261.     SET LOC-ID UP BY 1.
  262.     INITIALIZE LOCALIDADES(LOC-ID).
  263.     MOVE 'Alto de la torre' TO NOMBRE-LOCALIDAD(LOC-ID).
  264.     MOVE 'Una gran cama preside la estancia, los guresos barrotes no permiten la salida por la ventana, aunque de todos modos estaría demasaido alta.' TO DESCRIPCION-LOCALIDAD(LOC-ID).
  265.     MOVE 5 TO A-ABAJO(LOC-ID).
  266.  
  267. *> 7. EXTERIOR DE LA TORRE
  268.     SET LOC-ID UP BY 1.
  269.     INITIALIZE LOCALIDADES(LOC-ID).
  270.     MOVE 'Exterior de la Torre' TO NOMBRE-LOCALIDAD(LOC-ID).
  271.     MOVE '¡Al fin libre de esta prisión! ¿Qué nuevas aventuras te aguardan ahora?' TO DESCRIPCION-LOCALIDAD(LOC-ID).
  272.  
  273. *> 8. JUGADOR (PSEUDO-LOCALIZACIÓN PARA EL INVENTARIO)
  274.     SET LOC-ID UP BY 1.
  275.     INITIALIZE LOCALIDADES(LOC-ID).
  276.     MOVE 'Jugador' TO NOMBRE-LOCALIDAD(LOC-ID).
  277.  
  278. INICIALIZAR-OBJETOS.
  279.     SET OBJ-ID TO 0.
  280.  
  281. *> 1. CARBON
  282.     SET OBJ-ID UP BY 1.
  283.     INITIALIZE OBJETOS(OBJ-ID).
  284.     MOVE 'trozo de carbón'  TO NOMBRE-OBJETO(OBJ-ID).
  285.     MOVE 'Un trozo de negro carbón que parece haber sobrevivido al fuego.' TO DESCRIPCION-OBJETO(OBJ-ID).
  286.     MOVE 'TROZO'            TO SINONIMOS(OBJ-ID, 1).
  287.     MOVE 'CARBON'           TO SINONIMOS(OBJ-ID, 2).
  288.     MOVE 'CARBÓN'           TO SINONIMOS(OBJ-ID, 3).
  289.     MOVE 'CARBóN'           TO SINONIMOS(OBJ-ID, 4).
  290.  
  291. *> 2. CHIMENEA
  292.     SET OBJ-ID UP BY 1.
  293.     INITIALIZE OBJETOS(OBJ-ID).
  294.     MOVE 'chimenea'         TO NOMBRE-OBJETO(OBJ-ID).
  295.     MOVE 'Hace mucho tiempo que no arde fuego alguno en esta vieja chimenea.' TO DESCRIPCION-OBJETO(OBJ-ID).
  296.     MOVE 'CHIMENEA'         TO SINONIMOS(OBJ-ID, 1).
  297.     MOVE 'HOGAR'            TO SINONIMOS(OBJ-ID, 2).
  298.     MOVE 1                  TO PERTENENCIA(OBJ-ID).
  299.     SET ESCENARIO(OBJ-ID)   TO TRUE.
  300.     SET FEMENINO(OBJ-ID)    TO TRUE.
  301.  
  302. *> 3. CATRES
  303.     SET OBJ-ID UP BY 1.
  304.     INITIALIZE OBJETOS(OBJ-ID).
  305.     MOVE 'catres'           TO NOMBRE-OBJETO(OBJ-ID).
  306.     MOVE 'CATRES'           TO SINONIMOS(OBJ-ID, 1).
  307.     MOVE 'CAMASTROS'        TO SINONIMOS(OBJ-ID, 2).
  308.     MOVE 'Todos los catres han sido reducidos a una masa informe de madera, excepto uno que aún está bien conservado.' TO DESCRIPCION-OBJETO(OBJ-ID).
  309.     MOVE 2                  TO PERTENENCIA(OBJ-ID).
  310.     SET ESCENARIO(OBJ-ID)   TO TRUE.
  311.     SET PLURAL(OBJ-ID)      TO TRUE.
  312.  
  313. *> 4. CATRE
  314.     SET OBJ-ID UP BY 1.
  315.     INITIALIZE OBJETOS(OBJ-ID).
  316.     MOVE 'catre'    TO NOMBRE-OBJETO(OBJ-ID).
  317.     MOVE 'Una funda de tela cubre la cama.' TO DESCRIPCION-OBJETO(OBJ-ID).
  318.     MOVE 'CATRE'    TO SINONIMOS(OBJ-ID, 1).
  319.     MOVE 'CAMASTRO' TO SINONIMOS(OBJ-ID, 2).
  320.     MOVE 2          TO PERTENENCIA(OBJ-ID).
  321.     MOVE 1          TO INTERACTIVIDAD(OBJ-ID).
  322.  
  323. *> 5. FUNDA
  324.     SET OBJ-ID UP BY 1.
  325.     INITIALIZE OBJETOS(OBJ-ID).
  326.     MOVE 'funda'            TO NOMBRE-OBJETO(OBJ-ID).
  327.     MOVE 'La funda parece bastante resistente.' TO DESCRIPCION-OBJETO(OBJ-ID).
  328.     MOVE 'FUNDA'            TO SINONIMOS(OBJ-ID, 1).
  329.     MOVE 'TELA'             TO SINONIMOS(OBJ-ID, 2).
  330.     SET ESCENARIO(OBJ-ID)   TO TRUE.
  331.     SET FEMENINO(OBJ-ID)    TO TRUE.
  332.  
  333. *> 6. CORREAS
  334.     SET OBJ-ID UP BY 1.
  335.     INITIALIZE OBJETOS(OBJ-ID).
  336.     MOVE 'correas'          TO NOMBRE-OBJETO(OBJ-ID).
  337.     MOVE 'Son unas correas de cuero que' TO DESCRIPCION-OBJETO(OBJ-ID). *> El final de la descripción depende de su estado interno.
  338.     MOVE 'CORREAS'          TO SINONIMOS(OBJ-ID, 1).
  339.     MOVE 'CORREA'           TO SINONIMOS(OBJ-ID, 2).
  340.     MOVE 'CUERO'            TO SINONIMOS(OBJ-ID, 3).
  341.     SET ESCENARIO(OBJ-ID)   TO TRUE.
  342.     SET FEMENINO(OBJ-ID)    TO TRUE.
  343.     SET PLURAL(OBJ-ID)      TO TRUE.
  344.  
  345. *> 7. PAJA
  346.     SET OBJ-ID UP BY 1.
  347.     INITIALIZE OBJETOS(OBJ-ID).
  348.     MOVE 'paja'             TO NOMBRE-OBJETO(OBJ-ID).
  349.     MOVE 'Paja húmeda e inútil.' TO DESCRIPCION-OBJETO(OBJ-ID).
  350.     MOVE 'PAJA'             TO SINONIMOS(OBJ-ID, 1).
  351.     SET ESCENARIO(OBJ-ID)   TO TRUE.
  352.     SET FEMENINO(OBJ-ID)    TO TRUE.
  353.  
  354. *> 8. ESQUELETO
  355.     SET OBJ-ID UP BY 1.
  356.     INITIALIZE OBJETOS(OBJ-ID).
  357.     MOVE 'esqueleto'        TO NOMBRE-OBJETO(OBJ-ID).
  358.     MOVE 'Los huesos amarillentos, las cuencas vacías.' TO DESCRIPCION-OBJETO(OBJ-ID).
  359.     MOVE 'ESQUELETO'        TO SINONIMOS(OBJ-ID, 1).
  360.     MOVE 'HUMANO'           TO SINONIMOS(OBJ-ID, 2).
  361.     MOVE 'MUERTO'           TO SINONIMOS(OBJ-ID, 3).
  362.     MOVE 'CADAVER'          TO SINONIMOS(OBJ-ID, 4).
  363.     MOVE 4                  TO PERTENENCIA(OBJ-ID).
  364.     SET ESCENARIO(OBJ-ID)   TO TRUE.
  365.  
  366. *> 9. VENTANUCO
  367.     SET OBJ-ID UP BY 1.
  368.     INITIALIZE OBJETOS(OBJ-ID).
  369.     MOVE 'ventanuco'        TO NOMBRE-OBJETO(OBJ-ID).
  370.     MOVE 'A través de los barrotes de este ventanuco puedes ver el exterior de la torre, iluminado por una increíble luna llena.' TO DESCRIPCION-OBJETO(OBJ-ID).
  371.     MOVE 'VENTANUCO'    TO SINONIMOS(OBJ-ID, 1).
  372.     MOVE 'VENTANA'      TO SINONIMOS(OBJ-ID, 2).
  373.     MOVE 'TRAGALUZ'     TO SINONIMOS(OBJ-ID, 3).
  374.     MOVE 4              TO PERTENENCIA(OBJ-ID).
  375.     SET ESCENARIO(OBJ-ID) TO TRUE.
  376.  
  377. *> 10. BARROTES SOLIDOS
  378.     SET OBJ-ID UP BY 1.
  379.     INITIALIZE OBJETOS(OBJ-ID).
  380.     MOVE 'barrotes sólidos' TO NOMBRE-OBJETO(OBJ-ID).
  381.     MOVE 'Al examinar de cerca los barrotes de la ventana descubres uno que parece estar más flojo.' TO DESCRIPCION-OBJETO(OBJ-ID).
  382.     MOVE 'BARROTES'         TO SINONIMOS(OBJ-ID, 1).
  383.     MOVE 'BARRAS'           TO SINONIMOS(OBJ-ID, 2).
  384.     MOVE 4                  TO PERTENENCIA(OBJ-ID).
  385.     SET ESCENARIO(OBJ-ID)   TO TRUE.
  386.     SET PLURAL(OBJ-ID)      TO TRUE.
  387.  
  388. *> 11. BARROTE FLOJO
  389.     SET OBJ-ID UP BY 1.
  390.     INITIALIZE OBJETOS(OBJ-ID).
  391.     MOVE 'barra'            TO NOMBRE-OBJETO(OBJ-ID).
  392.     MOVE 'Parece que este barrote podría quitarse con un poco de esfuerzo.' TO DESCRIPCION-OBJETO(OBJ-ID).
  393.     MOVE 'BARROTE'          TO SINONIMOS(OBJ-ID, 1).
  394.     MOVE 'BARRA'            TO SINONIMOS(OBJ-ID, 2).
  395.     SET OCULTO(OBJ-ID)      TO TRUE.
  396.     SET FEMENINO(OBJ-ID)    TO TRUE.
  397.  
  398. *> 12. ANTORCHA
  399.     SET OBJ-ID UP BY 1.
  400.     INITIALIZE OBJETOS(OBJ-ID).
  401.     MOVE 'antorcha'         TO NOMBRE-OBJETO(OBJ-ID).
  402.     MOVE 'Un tenue fuego bailotea a su extremo.'    TO DESCRIPCION-OBJETO(OBJ-ID).
  403.     MOVE 'ANTORCHA'         TO SINONIMOS(OBJ-ID, 1).
  404.     MOVE 'TEA'              TO SINONIMOS(OBJ-ID, 2).
  405.     MOVE 5                  TO PERTENENCIA(OBJ-ID).
  406.     SET ESCENARIO(OBJ-ID)   TO TRUE.
  407.     SET FEMENINO(OBJ-ID)    TO TRUE.
  408.  
  409. *> 13. CUCHILLO
  410.     SET OBJ-ID UP BY 1.
  411.     INITIALIZE OBJETOS(OBJ-ID).
  412.     MOVE 'pequeño cuchillo' TO NOMBRE-OBJETO(OBJ-ID).
  413.     MOVE 'Un pequeño cuchillo cuchillo cubierto de herrumbre. No parece haberle servido de mucho a su malogrado poseedor.' TO DESCRIPCION-OBJETO(OBJ-ID).
  414.     MOVE 'CUCHILLO' TO SINONIMOS(OBJ-ID, 1).
  415.     MOVE 'PEQUEÑO'  TO SINONIMOS(OBJ-ID, 2).
  416.     MOVE 'PUÑAL'    TO SINONIMOS(OBJ-ID, 3).
  417.     MOVE 'HOJA'     TO SINONIMOS(OBJ-ID, 4).
  418.     MOVE 'CUCHILLA' TO SINONIMOS(OBJ-ID, 5).
  419.  
  420. PARSER SECTION.
  421.  
  422. OBTENER-ENTRADA.
  423.     DISPLAY ' '.
  424.     INITIALIZE ENTRADA-JUGADOR.
  425.     DISPLAY '>> ' WITH NO ADVANCING.
  426.     ACCEPT ENTRADA-JUGADOR.
  427.  
  428. PARSEAR.
  429.     *> CONVERTIR LA ENTRADA A MAYÚSCULAS
  430.     MOVE FUNCTION UPPER-CASE(ENTRADA-JUGADOR) TO ENTRADA-JUGADOR.
  431.  
  432.     *> SEPARAR LA FRASE EN SUS DIVERSOS COMPONENTES
  433.     UNSTRING ENTRADA-JUGADOR
  434.         DELIMITED BY SPACE
  435.         INTO VERBO, NOMBRE-1, PREPOSICION, NOMBRE-2
  436.     END-UNSTRING.
  437.  
  438.     IF VERBO NOT = SPACES
  439.         *> OBTENER ACCIONES Y OBJETOS
  440.         PERFORM OBTENER-VERBO-ID
  441.  
  442.         *> EJECUTAR EJECUTAR ACCIONES
  443.         EVALUATE VERBO-ID
  444.             WHEN 1
  445.                 PERFORM TERMINAR-JUEGO
  446.             WHEN 2
  447.                 PERFORM IR-AL-NORTE
  448.             WHEN 3
  449.                 PERFORM IR-AL-SUR
  450.             WHEN 4
  451.                 PERFORM IR-AL-ESTE
  452.             WHEN 5
  453.                 PERFORM IR-AL-OESTE
  454.             WHEN 6
  455.                 PERFORM IR-ARRIBA
  456.             WHEN 7
  457.                 PERFORM IR-ABAJO
  458.             WHEN 8
  459.                 PERFORM IR-ADENTRO
  460.             WHEN 9
  461.                 PERFORM IR-AFUERA
  462.             WHEN 10
  463.                 PERFORM OBTENER-NOMBRE-1
  464.                 PERFORM EXAMINAR
  465.             WHEN 11
  466.                 PERFORM INVENTARIO
  467.             WHEN 12
  468.                 PERFORM OBTENER-NOMBRE-1
  469.                 PERFORM COGER
  470.             WHEN 13
  471.                 PERFORM OBTENER-NOMBRE-1
  472.                 PERFORM DEJAR
  473.             WHEN 14
  474.                 PERFORM OBTENER-NOMBRE-1
  475.                 PERFORM EMPUJAR
  476.             WHEN 15
  477.                 PERFORM OBTENER-NOMBRE-1
  478.                 PERFORM TIRAR-DE
  479.             WHEN 16
  480.                 PERFORM OBTENER-NOMBRE-1
  481.                 PERFORM OBTENER-NOMBRE-2
  482.                 PERFORM CORTAR
  483.             WHEN 17
  484.                 PERFORM OBTENER-NOMBRE-1
  485.                 PERFORM OBTENER-NOMBRE-2
  486.                 PERFORM ATAR
  487.             WHEN 18
  488.                 PERFORM OBTENER-NOMBRE-1
  489.                 PERFORM DESATAR
  490.             WHEN 19
  491.                 PERFORM MOSTRAR-SALIDAS
  492.             WHEN 20
  493.                 PERFORM DESCRIBIR-LOCALIDAD
  494.             WHEN OTHER
  495.                 DISPLAY 'Lo siento, no te entiendo.'
  496.         END-EVALUATE
  497.     END-IF.
  498.  
  499. OBTENER-VERBO-ID.
  500.     INITIALIZE VERBO-ID.
  501.     IF VERBO = 'TERMINA' OR 'TERMINAR'
  502.         MOVE 1 TO VERBO-ID
  503.     ELSE IF VERBO = 'N' OR 'NORTE'
  504.         MOVE 2 TO VERBO-ID
  505.     ELSE IF VERBO = 'S' OR 'SUR'
  506.         MOVE 3 TO VERBO-ID
  507.     ELSE IF VERBO = 'E' OR 'ESTE'
  508.         MOVE 4 TO VERBO-ID
  509.     ELSE IF VERBO = 'O' OR 'OESTE'
  510.         MOVE 5 TO VERBO-ID
  511.     ELSE IF VERBO = 'SUBE' OR 'SUBIR'
  512.         MOVE 6 TO VERBO-ID
  513.     ELSE IF VERBO = 'BAJA' OR 'BAJAR'
  514.         MOVE 7 TO VERBO-ID
  515.     ELSE IF VERBO = 'ENTRA' OR 'ENTRAR'
  516.         MOVE 8 TO VERBO-ID
  517.     ELSE IF VERBO = 'SAL' OR 'SALTE' OR 'SALIR'
  518.         MOVE 9 TO VERBO-ID
  519.     ELSE IF VERBO = 'EX' OR 'EXAMINA' OR 'EXAMINAR'
  520.         MOVE 10 TO VERBO-ID
  521.     ELSE IF VERBO = 'I' OR 'INVENTARIO'
  522.         MOVE 11 TO VERBO-ID
  523.     ELSE IF VERBO = 'COGE' OR 'COGER' OR 'TOMA' OR 'TOMAR'
  524.         MOVE 12 TO VERBO-ID
  525.     ELSE IF VERBO = 'DEJA' OR 'DEJAR' OR 'SUELTA' OR 'SOLTAR'
  526.         MOVE 13 TO VERBO-ID
  527.     ELSE IF VERBO = 'EMPUJA' OR 'EMPUJAR'
  528.         MOVE 14 TO VERBO-ID
  529.     ELSE IF VERBO = 'TIRA' OR 'TIRAR' OR 'JALA' OR 'JALAR'
  530.         MOVE 15 TO VERBO-ID
  531.     ELSE IF VERBO = 'CORTA' OR 'CORTAR'
  532.         MOVE 16 TO VERBO-ID
  533.     ELSE IF VERBO = 'ATA' OR 'ATAR'
  534.         MOVE 17 TO VERBO-ID
  535.     ELSE IF VERBO = 'DESATA' OR 'DESATAR'
  536.         MOVE 18 TO VERBO-ID
  537.     ELSE IF VERBO = 'X' OR 'SALIDAS'
  538.         MOVE 19 TO VERBO-ID
  539.     ELSE IF VERBO = 'M' OR 'MIRA' OR 'MIRAR'
  540.         MOVE 20 TO VERBO-ID
  541.     END-IF.
  542.  
  543. OBTENER-NOMBRE-1.
  544.     INITIALIZE OBJETO-1-ID, OBJ-ID.
  545.  
  546.     IF VERBO-ID = 15        *> CASO ESPECIAL DEL VERBO TIRAR,
  547.         IF NOMBRE-1 = 'DE'  *> QUE SUELE LLEVAR LA PREPOSICION 'DE' ANTES DEL OBJETO DIRECTO.
  548.             MOVE PREPOSICION TO NOMBRE-1 *> EL NOMBRE SE HABRÍA CARGADO EN PREPOSICION,
  549.         END-IF                           *> DE ESTA MANERA SE TRANSPORTA A NOMBRE-1
  550.     END-IF
  551.  
  552.     IF NOMBRE-1 NOT = SPACES
  553.         PERFORM VARYING OBJ-ID FROM 1 BY 1 UNTIL OBJ-ID>13 OR OBJETO-1-ID > 0
  554.             PERFORM VARYING SINONIMOS-ID FROM 1 BY 1 UNTIL SINONIMOS-ID > 5 OR OBJETO-1-ID > 0
  555.                 IF SINONIMOS(OBJ-ID, SINONIMOS-ID) = NOMBRE-1
  556.                     MOVE OBJ-ID TO OBJETO-1-ID
  557.                 END-IF
  558.             END-PERFORM
  559.         END-PERFORM
  560.     END-IF.
  561.  
  562. OBTENER-NOMBRE-2.
  563.     INITIALIZE OBJETO-2-ID, OBJ-ID.
  564.  
  565.     IF VERBO-ID = 16                                        *> CASO ESPECIAL DEL VERBO CORTAR,
  566.         IF PREPOSICION NOT = 'CON' AND NOMBRE-2 = SPACES    *> QUE SUELE LLEVAR LA PREPOSICION 'CON' ANTES DEL OBJETO INDIRECTO.
  567.             MOVE PREPOSICION TO NOMBRE-2                    *> SI 'CON' NO ESTÁ EN SU LUGAR EL JUGADOR HA PUESTO EN 'PREPOSICION'
  568.         END-IF                                              *> EL OBJETO INDIRECTO DE LA ORACION
  569.     END-IF
  570.  
  571.     IF VERBO-ID = 17
  572.         IF PREPOSICION NOT = 'A' AND NOMBRE-2 = SPACES
  573.             MOVE PREPOSICION TO NOMBRE-2
  574.         END-IF
  575.     END-IF
  576.  
  577.     IF NOMBRE-2 NOT = SPACES
  578.         PERFORM VARYING OBJ-ID FROM 1 BY 1 UNTIL OBJ-ID>13 OR OBJETO-2-ID > 0
  579.             PERFORM VARYING SINONIMOS-ID FROM 1 BY 1 UNTIL SINONIMOS-ID > 5 OR OBJETO-2-ID > 0
  580.                 IF SINONIMOS(OBJ-ID, SINONIMOS-ID) = NOMBRE-2
  581.                     MOVE OBJ-ID TO OBJETO-2-ID
  582.                 END-IF
  583.             END-PERFORM
  584.         END-PERFORM
  585.     END-IF.
  586. EJECUTAR-VERBOS SECTION.
  587.  
  588. DESCRIBIR-LOCALIDAD.
  589.     DISPLAY ' '.
  590.     DISPLAY '[ ' WITH NO ADVANCING.
  591.     MOVE NOMBRE-LOCALIDAD(LOCALIDAD-ACTUAL) TO CADENA-SALIDA.
  592.     PERFORM ESCRIBIR-CADENA.
  593.     DISPLAY ' ]'.
  594.     MOVE DESCRIPCION-LOCALIDAD(LOCALIDAD-ACTUAL) TO CADENA-SALIDA
  595.     PERFORM ESCRIBIR-CADENA-CON-SALTO.
  596.     PERFORM ENUMERAR-OBJETOS-VISIBLES.
  597.  
  598. IR-AL-NORTE.
  599.     IF AL-N(LOCALIDAD-ACTUAL) > 0
  600.         MOVE AL-N(LOCALIDAD-ACTUAL) TO LOCALIDAD-ACTUAL
  601.         PERFORM DESCRIBIR-LOCALIDAD
  602.     ELSE
  603.         DISPLAY 'No puedes ir por ahí.'
  604.     END-IF.
  605.  
  606. IR-AL-SUR.
  607.     IF AL-S(LOCALIDAD-ACTUAL) > 0
  608.         MOVE AL-S(LOCALIDAD-ACTUAL) TO LOCALIDAD-ACTUAL
  609.         PERFORM DESCRIBIR-LOCALIDAD
  610.     ELSE
  611.         DISPLAY 'No puedes ir por ahí.'
  612.     END-IF.
  613.  
  614. IR-AL-ESTE.
  615.     IF AL-E(LOCALIDAD-ACTUAL) > 0
  616.         MOVE AL-E(LOCALIDAD-ACTUAL) TO LOCALIDAD-ACTUAL
  617.         PERFORM DESCRIBIR-LOCALIDAD
  618.     ELSE
  619.         DISPLAY 'No puedes ir por ahí.'
  620.     END-IF.
  621.  
  622. IR-AL-OESTE.
  623.     IF AL-O(LOCALIDAD-ACTUAL) > 0
  624.         MOVE AL-O(LOCALIDAD-ACTUAL) TO LOCALIDAD-ACTUAL
  625.         PERFORM DESCRIBIR-LOCALIDAD
  626.     ELSE
  627.         DISPLAY 'No puedes ir por ahí.'
  628.     END-IF.
  629.  
  630. IR-ARRIBA.
  631.     IF A-ARRIBA(LOCALIDAD-ACTUAL) > 0
  632.         MOVE A-ARRIBA(LOCALIDAD-ACTUAL) TO LOCALIDAD-ACTUAL
  633.         PERFORM DESCRIBIR-LOCALIDAD
  634.     ELSE
  635.         DISPLAY 'No puedes ir por ahí.'
  636.     END-IF.
  637.  
  638. IR-ABAJO.
  639.     IF A-ABAJO(LOCALIDAD-ACTUAL) > 0
  640.         MOVE A-ABAJO(LOCALIDAD-ACTUAL) TO LOCALIDAD-ACTUAL
  641.         PERFORM DESCRIBIR-LOCALIDAD
  642.     ELSE
  643.         DISPLAY 'No puedes ir por ahí.'
  644.     END-IF.
  645.  
  646. IR-ADENTRO.
  647.     IF A-ADENTRO(LOCALIDAD-ACTUAL) > 0
  648.         MOVE A-ADENTRO(LOCALIDAD-ACTUAL) TO LOCALIDAD-ACTUAL
  649.         PERFORM DESCRIBIR-LOCALIDAD
  650.     ELSE
  651.         DISPLAY 'No puedes ir por ahí.'
  652.     END-IF.
  653.  
  654. IR-AFUERA.
  655.     IF A-AFUERA(LOCALIDAD-ACTUAL) > 0
  656.         MOVE A-AFUERA(LOCALIDAD-ACTUAL) TO LOCALIDAD-ACTUAL
  657.         PERFORM DESCRIBIR-LOCALIDAD
  658.     ELSE
  659.         DISPLAY 'No puedes ir por ahí.'
  660.     END-IF.
  661.  
  662. MOSTRAR-SALIDAS.
  663.     PERFORM CUENTA-SALIDAS.
  664.     IF NUMERO-OBJETOS > 0
  665.         DISPLAY 'Las salidas posibles son: ' WITH NO ADVANCING
  666.         IF AL-N(LOCALIDAD-ACTUAL) > 0
  667.             DISPLAY 'norte' WITH NO ADVANCING
  668.             PERFORM MOSTRAR-SALIDAS-MAS
  669.         END-IF
  670.         IF AL-S(LOCALIDAD-ACTUAL) > 0
  671.             DISPLAY 'sur' WITH NO ADVANCING
  672.             PERFORM MOSTRAR-SALIDAS-MAS
  673.         END-IF
  674.         IF AL-E(LOCALIDAD-ACTUAL) > 0
  675.             DISPLAY 'este' WITH NO ADVANCING
  676.             PERFORM MOSTRAR-SALIDAS-MAS
  677.         END-IF
  678.         IF AL-O(LOCALIDAD-ACTUAL) > 0
  679.             DISPLAY 'oeste' WITH NO ADVANCING
  680.             PERFORM MOSTRAR-SALIDAS-MAS
  681.         END-IF
  682.         IF A-ARRIBA(LOCALIDAD-ACTUAL) > 0
  683.             DISPLAY 'subir' WITH NO ADVANCING
  684.             PERFORM MOSTRAR-SALIDAS-MAS
  685.         END-IF
  686.         IF A-ABAJO(LOCALIDAD-ACTUAL) > 0
  687.             DISPLAY 'bajar' WITH NO ADVANCING
  688.             PERFORM MOSTRAR-SALIDAS-MAS
  689.         END-IF
  690.         IF A-ADENTRO(LOCALIDAD-ACTUAL) > 0
  691.             DISPLAY 'entrar' WITH NO ADVANCING
  692.             PERFORM MOSTRAR-SALIDAS-MAS
  693.         END-IF
  694.         IF A-AFUERA(LOCALIDAD-ACTUAL) > 0
  695.             DISPLAY 'salir' WITH NO ADVANCING
  696.             PERFORM MOSTRAR-SALIDAS-MAS
  697.         END-IF
  698.     ELSE
  699.         DISPLAY 'No hay salida.'
  700.     END-IF.
  701.  
  702. MOSTRAR-SALIDAS-MAS.
  703.     SUBTRACT 1 FROM NUMERO-OBJETOS
  704.     IF NUMERO-OBJETOS > 1
  705.         DISPLAY ', ' WITH NO ADVANCING
  706.     ELSE IF NUMERO-OBJETOS = 1
  707.         DISPLAY ' y ' WITH NO ADVANCING
  708.     ELSE
  709.         DISPLAY '.'
  710.     END-IF.
  711.  
  712. EXAMINAR.
  713.     IF NOMBRE-1 = SPACES
  714.         DISPLAY '¿Qué quieres examinar?'
  715.     ELSE IF OBJETO-1-ID = ZEROES
  716.         DISPLAY 'Realmente desconozco a lo que te refieres.'
  717.     ELSE IF PERTENENCIA(OBJETO-1-ID) = LOCALIDAD-ACTUAL OR 8
  718.         *> DESCRIBIR EL OBJETO
  719.         MOVE DESCRIPCION-OBJETO(OBJETO-1-ID) TO CADENA-SALIDA
  720.         PERFORM ESCRIBIR-CADENA
  721.  
  722.         *> DIFERENTES OBJETOS CON TRATAMIENTOS ESPECIALES
  723.         EVALUATE OBJETO-1-ID
  724.  
  725.             WHEN 2 *> CHIMENEA
  726.                 *> SI ES LA PRIMERA VEZ QUE SE EXAMINA LA CHIMENEA
  727.                 EVALUATE TRUE WHEN DESACTIVADO(OBJETO-1-ID)
  728.                     *> DAR LA CHIMENEA POR EXAMINADA
  729.                     SET ACTIVADO(OBJETO-1-ID) TO TRUE
  730.                     *> INFORMAR DEL CARBÓN EN LA DESCRIPCIÓN
  731.                     DISPLAY ' Un trozo de carbón es todo lo que queda del antiguo hogar.' WITH NO ADVANCING
  732.                     *> MOVER EL CARBÓN A LA MISMA HABITACIÓN QUE LA CHIMENEA.
  733.                     MOVE PERTENENCIA(OBJETO-1-ID) TO PERTENENCIA(1)
  734.                 END-EVALUATE
  735.  
  736.             WHEN 4 *> CATRE
  737.                 *> SI ES LA PRIMERA VEZ QUE SE EXAMINAN EL CATRE
  738.                 EVALUATE TRUE WHEN DESACTIVADO(OBJETO-1-ID)
  739.                     *> DAR A CATRE POR EXAMINADOS
  740.                     SET ACTIVADO(OBJETO-1-ID) TO TRUE
  741.                     *> TRAER FUNDA Y CORREAS AL DORMITORIO
  742.                     MOVE PERTENENCIA(OBJETO-1-ID) TO PERTENENCIA(5), PERTENENCIA(6)
  743.                 END-EVALUATE
  744.  
  745.             WHEN 6 *> CORREAS
  746.                 EVALUATE TRUE
  747.                     WHEN DESACTIVADO(OBJETO-1-ID)
  748.                         DISPLAY ' sujetan la funda a la cama.' WITH NO ADVANCING
  749.                     WHEN ACTIVADO(OBJETO-1-ID)
  750.                         DISPLAY ' cuelgan de la cama.' WITH NO ADVANCING
  751.                 END-EVALUATE
  752.  
  753.             WHEN 8 *> ESQUELETO
  754.                 EVALUATE TRUE WHEN DESACTIVADO(OBJETO-1-ID)
  755.                     SET ACTIVADO(OBJETO-1-ID) TO TRUE
  756.                     DISPLAY ' Junto a él ves un pequeño cuchillo.' WITH NO ADVANCING
  757.                     MOVE PERTENENCIA(OBJETO-1-ID) TO PERTENENCIA(13)
  758.                 END-EVALUATE
  759.  
  760.             WHEN 10 *> BARROTES
  761.                 EVALUATE TRUE WHEN DESACTIVADO(OBJETO-1-ID)
  762.                     SET ACTIVADO(OBJETO-1-ID) TO TRUE
  763.                     MOVE PERTENENCIA(OBJETO-1-ID) TO PERTENENCIA(11) *> MUEVE EL BARROTE FLOJO A LA HABITACIÓN
  764.                 END-EVALUATE
  765.  
  766.         END-EVALUATE
  767.         *> REALIZAR EL SALTO DE LINEA
  768.         DISPLAY ' '
  769.     ELSE
  770.         DISPLAY 'No veo eso que dices.'
  771.     END-IF.
  772.  
  773. INVENTARIO.
  774.     PERFORM CUENTA-OBJETOS-INVENTARIO.
  775.  
  776.     IF NUMERO-OBJETOS > 0
  777.         DISPLAY 'Tienes ' WITH NO ADVANCING
  778.         PERFORM VARYING OBJ-ID FROM 1 BY 1 UNTIL OBJ-ID > 13
  779.             IF PERTENENCIA(OBJ-ID) = 8
  780.                 EVALUATE TRUE
  781.                     WHEN MASCULINO(OBJ-ID)
  782.                         EVALUATE TRUE
  783.                             WHEN SINGULAR(OBJ-ID)
  784.                                 DISPLAY 'un ' WITH NO ADVANCING
  785.                             WHEN PLURAL(OBJ-ID)
  786.                                 DISPLAY 'unos ' WITH NO ADVANCING
  787.                         END-EVALUATE
  788.                     WHEN FEMENINO(OBJ-ID)
  789.                         EVALUATE TRUE
  790.                             WHEN SINGULAR(OBJ-ID)
  791.                                 DISPLAY 'una ' WITH NO ADVANCING
  792.                             WHEN PLURAL(OBJ-ID)
  793.                                 DISPLAY 'unas ' WITH NO ADVANCING
  794.                         END-EVALUATE
  795.                 END-EVALUATE
  796.                 MOVE NOMBRE-OBJETO(OBJ-ID) TO CADENA-SALIDA
  797.                 PERFORM ESCRIBIR-CADENA
  798.                 SUBTRACT 1 FROM NUMERO-OBJETOS
  799.                 IF NUMERO-OBJETOS > 0
  800.                     DISPLAY ', ' WITH NO ADVANCING
  801.                 ELSE
  802.                     DISPLAY '.'
  803.                 END-IF
  804.             END-IF
  805.         END-PERFORM
  806.     ELSE
  807.         DISPLAY 'No tienes nada.'
  808.     END-IF.
  809.  
  810. COGER.
  811.     IF NOMBRE-1 = SPACES
  812.         DISPLAY '¿El qué?'
  813.     ELSE IF OBJETO-1-ID = ZEROES
  814.         DISPLAY 'Realmente desconozco a lo que te refieres.'
  815.     ELSE IF PERTENENCIA(OBJETO-1-ID) = 8
  816.         DISPLAY 'Ya tienes ' WITH NO ADVANCING
  817.         EVALUATE TRUE
  818.             WHEN MASCULINO(OBJETO-1-ID)
  819.                 EVALUATE TRUE
  820.                     WHEN SINGULAR(OBJETO-1-ID)
  821.                         DISPLAY 'el ' WITH NO ADVANCING
  822.                     WHEN PLURAL(OBJETO-1-ID)
  823.                         DISPLAY 'los ' WITH NO ADVANCING
  824.                 END-EVALUATE
  825.             WHEN FEMENINO(OBJETO-1-ID)
  826.                 EVALUATE TRUE
  827.                     WHEN SINGULAR(OBJETO-1-ID)
  828.                         DISPLAY 'la ' WITH NO ADVANCING
  829.                     WHEN PLURAL(OBJETO-1-ID)
  830.                         DISPLAY 'las ' WITH NO ADVANCING
  831.                 END-EVALUATE
  832.         END-EVALUATE
  833.         DISPLAY NOMBRE-OBJETO(OBJETO-1-ID), '.'
  834.     ELSE IF PERTENENCIA(OBJETO-1-ID) = LOCALIDAD-ACTUAL
  835.  
  836.         *> DIFERENTES OBJETOS CON TRATAMIENTOS ESPECIALES
  837.         EVALUATE OBJETO-1-ID
  838.  
  839.             WHEN 5 *> FUNDA
  840.                 IF PERTENENCIA(OBJETO-1-ID) = 2 *> SOLO SI LA FUNDA ESTÁ EN EL DORMITORIO
  841.                     EVALUATE TRUE WHEN ACTIVADO(4) *> SI LA CAMA NO SE HA DESTAPADO
  842.                         EVALUATE TRUE
  843.                             WHEN ACTIVADO(6) *> SI LAS CORREAS ESTAN CORTADAS
  844.                                 *> HACER DE LA FUNDA UN OBJETO ESTANDAR
  845.                                 SET ESTANDAR(OBJETO-1-ID) TO TRUE
  846.                                 *> DESTAPAR LA CAMA
  847.                                 SET ACTIVADO(4) TO TRUE
  848.                                 *> TRAE LA PAJA AL DORMITORIO
  849.                                 MOVE 2 TO PERTENENCIA(7)
  850.                                 *> CAMBIA LA DESCRIPCION DEL CATRE AL LLEVARTE LA FUNDA
  851.                                 INITIALIZE DESCRIPCION-OBJETO(4)
  852.                                 MOVE 'Sólo restos de paja cubren la cama.' TO DESCRIPCION-OBJETO(4)
  853.                             WHEN DESACTIVADO(6) *> LAS CORREAS NO ESTÁN CORTADAS AÚN
  854.                                 DISPLAY 'La funda está sujeta a la cama por unas correas.'
  855.                         END-EVALUATE
  856.                     END-EVALUATE
  857.                 END-IF
  858.  
  859.             WHEN 11 *> BARROTE FLOJO
  860.                 IF PERTENENCIA(OBJETO-1-ID) = 4 *> SOLO SI EL BARROTE ESTÁ EN LA MAZMORRA
  861.                     EVALUATE TRUE WHEN DESACTIVADO(OBJETO-1-ID) *> SI LA BARRA NO SE HA SACADO DE LOS BARROTES
  862.                         DISPLAY 'Con un fuerte tirón arrancas el barrote del ventanuco.'
  863.                         *> CAMBIAR LA DESCRIPCIÓN DE LOS BARROTES
  864.                         INITIALIZE DESCRIPCION-OBJETO(10)
  865.                         MOVE 'En la ventana falta un barrote. Parece que podrías pasar por el hueco.' TO DESCRIPCION-OBJETO(10)
  866.                         *> CAMBIAR LA DESCRIPCIÓN DEL BARROTE
  867.                         INITIALIZE DESCRIPCION-OBJETO(OBJETO-1-ID)
  868.                         MOVE 'Una barra de hierro medio oxidada.' TO DESCRIPCION-OBJETO(OBJETO-1-ID)
  869.                         *> DAR UNA INTERACTIVIDA ESTÁNDAR AL BARROTE
  870.                         SET ESTANDAR(OBJETO-1-ID) TO TRUE
  871.                         *> MARCA COMO MOVIDO EL BARROTE
  872.                         SET ACTIVADO(OBJETO-1-ID) TO TRUE
  873.                         *> SI LA FUNDA ESTÁ ATADA EL JUGADOR YA PUEDE SALIR DE LA TORRE
  874.                         EVALUATE TRUE WHEN ACTIVADO(5)
  875.                             MOVE 7 TO A-AFUERA(LOCALIDAD-ACTUAL) *> HACE QUE EL JUGADOR PUEDA 'SALIR' POR EL VENTANUCO
  876.                             DISPLAY 'Tu salida hacia la libertad está lista.'
  877.                         END-EVALUATE
  878.                     END-EVALUATE
  879.                 END-IF
  880.  
  881.         END-EVALUATE
  882.         *> REALIZAR EL SALTO DE LINEA
  883.  
  884.         *> SOLO COGE LOS OBJETOS QUE TENGA UNA INTERACTIVIDAD ESTÁNDAR
  885.         EVALUATE TRUE
  886.             WHEN ESTANDAR(OBJETO-1-ID) OR OCULTO(OBJETO-1-ID)
  887.                 MOVE 8 TO PERTENENCIA(OBJETO-1-ID)
  888.                 DISPLAY 'Ok.'
  889.             WHEN OTHER
  890.                 DISPLAY 'No puedes llevarte eso.'
  891.         END-EVALUATE
  892.     ELSE
  893.         DISPLAY 'No veo eso que dices.'
  894.     END-IF.
  895.  
  896. DEJAR.
  897.     IF NOMBRE-1 = SPACES
  898.         DISPLAY '¿El qué?'
  899.     ELSE IF OBJETO-1-ID = ZEROES
  900.         DISPLAY 'Realmente desconozco a lo que te refieres.'
  901.     ELSE IF PERTENENCIA(OBJETO-1-ID) = 8
  902.         MOVE LOCALIDAD-ACTUAL TO PERTENENCIA(OBJETO-1-ID)
  903.         DISPLAY 'Ok.'
  904.     ELSE
  905.         DISPLAY 'No tienes ese objeto en tu inventario.'
  906.     END-IF.
  907.  
  908. EMPUJAR.
  909.     IF NOMBRE-1 = SPACES
  910.         DISPLAY '¿El qué?'
  911.     ELSE IF OBJETO-1-ID = ZEROES
  912.         DISPLAY 'Realmente desconozco a lo que te refieres.'
  913.     ELSE IF PERTENENCIA(OBJETO-1-ID) = LOCALIDAD-ACTUAL OR 8
  914.         EVALUATE OBJETO-1-ID
  915.  
  916.             WHEN 12 *> ANTORCHA
  917.                 IF AL-O(LOCALIDAD-ACTUAL) = ZERO *> SI NO ESTÁ ABIERTO EL PASO AL OESTE
  918.                     MOVE 4 TO AL-O(LOCALIDAD-ACTUAL)
  919.                     DISPLAY 'Al empujar la antorcha una porción de pared se abre al oeste dando acceso a una estancia.'
  920.                 ELSE *> EL PASO AL OESTE YA ESTÁ ABIERTO
  921.                     DISPLAY 'La antorcha no cede más.'
  922.                 END-IF
  923.  
  924.             WHEN OTHER
  925.                 DISPLAY 'No tiene sentido hacer eso.'
  926.  
  927.         END-EVALUATE
  928.     END-IF.
  929.  
  930. TIRAR-DE.
  931.     IF NOMBRE-1 = SPACES
  932.         DISPLAY '¿El qué?'
  933.     ELSE IF OBJETO-1-ID = ZEROES
  934.         DISPLAY 'Realmente desconozco a lo que te refieres.'
  935.     ELSE IF PERTENENCIA(OBJETO-1-ID) = LOCALIDAD-ACTUAL OR 8
  936.         EVALUATE OBJETO-1-ID
  937.  
  938.             WHEN 12 *> ANTORCHA
  939.                 IF AL-O(LOCALIDAD-ACTUAL) = 4 *> SI ESTÁ ABIERTO EL PASO AL OESTE
  940.                     MOVE ZERO TO AL-O(LOCALIDAD-ACTUAL)
  941.                     DISPLAY 'Al tirar de la antorcha la puerta secreta se cierra de nuevo.'
  942.                 ELSE *> EL PASO AL OESTE YA ESTÁ CERRADO
  943.                     DISPLAY 'La antorcha no cede más.'
  944.                 END-IF
  945.  
  946.             WHEN OTHER
  947.                 DISPLAY 'No tiene sentido hacer eso.'
  948.  
  949.         END-EVALUATE
  950.     END-IF.
  951.  
  952. CORTAR.
  953.     IF NOMBRE-1 = SPACES
  954.         DISPLAY '¿El qué?'
  955.     ELSE IF OBJETO-1-ID = ZEROES
  956.         DISPLAY 'Realmente desconozco a lo que te refieres.'
  957.     ELSE IF PERTENENCIA(OBJETO-1-ID) = LOCALIDAD-ACTUAL OR 8
  958.         EVALUATE OBJETO-1-ID
  959.  
  960.             WHEN 6 *> CORREAS
  961.                 EVALUATE OBJETO-2-ID
  962.                     WHEN ZEROES
  963.                         DISPLAY '¿Con qué quieres cortar?'
  964.                     WHEN 13 *> CUCHILLO
  965.                         IF PERTENENCIA(OBJETO-2-ID) = 8 *> EL CUCHILLO ESTÁ EN EL INVENTARIO
  966.                             EVALUATE TRUE
  967.                                 WHEN DESACTIVADO(OBJETO-1-ID) *> LAS CORREAS TODAVÍA NO SE CORTARON
  968.                                     SET ACTIVADO(OBJETO-1-ID) TO TRUE *> ACTIVA EL FLAG GENERAL DE LAS CORRAS PARA INDICAR QUE ESTÁN CORTADAS
  969.                                     SET ESTANDAR(5) TO TRUE *> CONVIERTE LA FUNDA EN UN OBJETO ESTÁNDAR
  970.                                     DISPLAY 'Cortas las correas con el cuchillo.'
  971.                                 WHEN ACTIVADO(OBJETO-1-ID) *> YA FUERON CORTADAS
  972.                                     DISPLAY 'Ya las cortaste.'
  973.                             END-EVALUATE
  974.                         ELSE
  975.                             DISPLAY '¡Vaya! ¿Y el cuchillo?'
  976.                         END-IF
  977.  
  978.                     WHEN OTHER
  979.                         DISPLAY 'Eso no corta.'
  980.  
  981.                 END-EVALUATE
  982.  
  983.             WHEN OTHER
  984.                 DISPLAY 'Una acción totalemnte inútil, me temo.'
  985.  
  986.         END-EVALUATE
  987.     ELSE
  988.         DISPLAY 'No veo eso que dices.'
  989.     END-IF.
  990.  
  991. ATAR.
  992.     IF NOMBRE-1 = SPACES
  993.         DISPLAY '¿El qué?'
  994.     ELSE IF OBJETO-1-ID = ZEROES
  995.         DISPLAY 'Realmente desconozco a lo que te refieres.'
  996.     ELSE IF PERTENENCIA(OBJETO-1-ID) = 8
  997.         EVALUATE OBJETO-1-ID
  998.  
  999.             WHEN 5 *> FUNDA
  1000.                 EVALUATE OBJETO-2-ID
  1001.                     WHEN ZEROES
  1002.                         DISPLAY '¿A qué quieres atarla?'
  1003.                     WHEN 10 *> BARROTES FIJOS
  1004.                         IF LOCALIDAD-ACTUAL = 4 *> EL JUGADOR DEBE ESTAR EN LA MAZMORRA
  1005.                             EVALUATE TRUE WHEN DESACTIVADO(OBJETO-1-ID) *> LA FUNDA NO ESTÁ ATADA
  1006.                                 EVALUATE TRUE
  1007.                                     WHEN DESACTIVADO(11) *> EL BARROTE NO SE HA QUITADO
  1008.                                         DISPLAY 'Aún que ataras la funda allí no tienes suficiente espacio para pasar por los barrotes.'
  1009.                                     WHEN ACTIVADO(11) *> EL BARROTE SE HA QUITADO
  1010.                                         SET ACTIVADO(OBJETO-1-ID) TO TRUE *> SE ASIGNA EL FLAG PERA MARCAR QUE LA FUNDA ESTÁ ATADA
  1011.                                         SET ESCENARIO(OBJETO-1-ID) TO TRUE *> INTERACTUACIÓN LIMITADA CON LA FUNDA
  1012.                                         MOVE 4 TO PERTENENCIA(OBJETO-1-ID) *> LA FUNDA PASA A SER PARTE DE LA HABITACIÓN
  1013.                                         MOVE 7 TO A-AFUERA(LOCALIDAD-ACTUAL) *> HACE QUE EL JUGADOR PUEDA 'SALIR' POR EL VENTANUCO
  1014.                                         *> CAMBIA LA DESCRIPCIÓN DE LOS BARROTES
  1015.                                         INITIALIZE DESCRIPCION-OBJETO(10)
  1016.                                         MOVE 'En la ventana falta un barrote. Parece que podrías pasar por el hueco. La funda está atada por el exterior a modo de cuerda de escape.' TO DESCRIPCION-OBJETO(10)
  1017.                                         DISPLAY 'Tu salida hacia la libertad está lista.'
  1018.                                 END-EVALUATE
  1019.                             END-EVALUATE
  1020.                         ELSE
  1021.                             DISPLAY 'No ves eso aquí.'
  1022.                         END-IF
  1023.  
  1024.                     WHEN 11 *> BARROTE FLOJO
  1025.                         IF LOCALIDAD-ACTUAL = 4
  1026.                             EVALUATE TRUE
  1027.                                 WHEN DESACTIVADO(11) *> EL BARROTE FLOJO TODAVÍA NO SE HA QUITADO DEL VENTANUCO
  1028.                                     DISPLAY 'Mejor atarla a un barrote sólido.'
  1029.                                 WHEN ACTIVADO(11)
  1030.                                     DISPLAY '¿Quieres hacerte un columpio? ¿En una mazmorra? Tus gustos son muy extraños. Mejor no.'
  1031.                             END-EVALUATE
  1032.                         ELSE
  1033.                             DISPLAY 'No te serviría de nada hacer eso.'
  1034.                         END-IF
  1035.  
  1036.                     WHEN OTHER
  1037.                         DISPLAY 'Cuando vas a realizar el lazo te das cuenta que no te servirá tener eso atado.'
  1038.  
  1039.                 END-EVALUATE
  1040.  
  1041.             WHEN OTHER
  1042.                 DISPLAY 'Eso no se usa para atar cosas.'
  1043.  
  1044.         END-EVALUATE
  1045.     ELSE
  1046.         DISPLAY 'No tienes eso.'
  1047.     END-IF.
  1048.  
  1049. DESATAR.
  1050.     IF NOMBRE-1 = SPACES
  1051.         DISPLAY '¿El qué?'
  1052.     ELSE IF OBJETO-1-ID = ZEROES
  1053.         DISPLAY 'Realmente desconozco a lo que te refieres.'
  1054.     ELSE IF PERTENENCIA(OBJETO-1-ID) = LOCALIDAD-ACTUAL
  1055.         EVALUATE OBJETO-1-ID
  1056.  
  1057.             WHEN 5 *> FUNDA
  1058.                 IF LOCALIDAD-ACTUAL = 4 *> EL JUGADOR DEBE ESTAR EN LA MAZMORRA
  1059.                     EVALUATE TRUE
  1060.                         WHEN ACTIVADO(OBJETO-1-ID) *> LA FUNDA ESTÁ ATADA
  1061.                             SET DESACTIVADO(OBJETO-1-ID) TO TRUE *> SE ASIGNA EL FLAG PERA MARCAR QUE LA FUNDA ESTÁ DESATADA
  1062.                             SET ESTANDAR(OBJETO-1-ID) TO TRUE *> INTERACTUACIÓN PLENA CON LA FUNDA
  1063.                             MOVE 0 TO A-AFUERA(LOCALIDAD-ACTUAL) *> IMPIDE QUE EL JUGADOR PUEDA 'SALIR' POR EL VENTANUCO
  1064.                             DISPLAY 'Desatas la funda que queda en el suelo.'
  1065.                             *> CAMBIA LA DESCRIPCIÓN DE LOS BARROTES
  1066.                             INITIALIZE DESCRIPCION-OBJETO(10)
  1067.                             MOVE 'En la ventana falta un barrote. Parece que podrías pasar por el hueco.' TO DESCRIPCION-OBJETO(10)
  1068.                         WHEN DESACTIVADO(OBJETO-1-ID) *> LA FUNDA NO ESTÁ ATADA
  1069.                             DISPLAY 'La funda no está atada a ningún sitio.'
  1070.                     END-EVALUATE
  1071.                 ELSE IF LOCALIDAD-ACTUAL = 2 *> EL JUGADOR ESTÁ EN EL DORMITORIO
  1072.                     EVALUATE TRUE
  1073.                         WHEN DESACTIVADO(6) *> LAS CORREAS NO ESTÁN CORTADAS
  1074.                             DISPLAY 'No tienes suficiente fuerza para desatar las correas. Deberías encontrar una mejor forma para soltarlas.'
  1075.                         WHEN ACTIVADO(6) *> LAS CORREAS YA SE CORTARON
  1076.                             DISPLAY 'La funda no está atada a nada.'
  1077.                     END-EVALUATE
  1078.                 ELSE
  1079.                     DISPLAY 'La funda no está atada a nada.'
  1080.                 END-IF
  1081.  
  1082.             WHEN 6 *> CORREAS
  1083.                 IF LOCALIDAD-ACTUAL = 2 *> EL JUGADOR DEBE ESTAR EN EL DORMITORIO
  1084.                     EVALUATE TRUE
  1085.                         WHEN DESACTIVADO(OBJETO-1-ID) *> LAS CORREAS NO ESTÁN CORTADAS
  1086.                             DISPLAY 'No tienes suficiente fuerza en los dedos cómo para desatarlas. Deberás encontrar una mejor forma para soltarlas.'
  1087.                         WHEN ACTIVADO(OBJETO-1-ID) *> LAS CORREAS YA SE HAN CORTADO
  1088.                             DISPLAY 'Ya las cortaste, no es necesario deshatarlas.'
  1089.                     END-EVALUATE
  1090.                 ELSE
  1091.                     DISPLAY 'No ves eso aquí.'
  1092.                 END-IF
  1093.  
  1094.             WHEN OTHER
  1095.                 DISPLAY 'Eso no está atado a nada.'
  1096.  
  1097.         END-EVALUATE
  1098.     ELSE
  1099.         DISPLAY 'No ves eso aquí.'
  1100.     END-IF.
  1101.  
  1102. END PROGRAM LA-TORRE.
  1103.  
Add Comment
Please, Sign In to add comment