Una de lenguajes clásicos: el COBOL

Últimamente se ha hablado en la empresa de lenguajes de programación clásicos con los que todos crecimos como el Basic o el Turbo Pascal (por los que cierto bastante afecto, todo sea dicho). De todos los clásicos uno de los más persistentes es el COBOL (y a la postre de los más feos), aún utilizado masivamente en grandes empresas que se sienten incapaces de migrar sus mastodónticos sistemas a otros lenguajes, o simplemente obtienen la fiabilidad deseada.

No pretendo dar un curso de COBOL, pero para los más pirados aquí dejo el código del juego del ahorcado que he hecho en COBOL. Pruébalo, funciona:

      * Juego del ahorcado.

000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. AHORCADO.

000300 ENVIRONMENT DIVISION.

000400 DATA DIVISION.
000410 WORKING-STORAGE SECTION.
       01  TEMP PIC 9 VALUE 0.
       01  CONT PIC 99 VALUE 0.
       01  CARACTER PIC X VALUE SPACE.
       01  LIFE PIC 9 VALUE 4.
       01  ENCONTRADO PIC 9 VALUE 0.
       01  LONGITUD PIC 9 VALUE 0.
       01  LONGITUD-INICIAL PIC 9 VALUE 0.
       01  SCORE PIC 99 VALUE 0.

       01  CADENA PIC X(9) VALUE SPACES.
      * Copiaremos la cadena origen a una tabla de caracteres.
       01  PALABRA.
           02 ORIGEN OCCURS 9 TIMES PIC X.
      * La palabra de salida.
       01  RESULTADO.
           02 DESTINO OCCURS 9 TIMES PIC X.


000500 PROCEDURE DIVISION.

000700 PROGRAM-BEGIN.

           PERFORM INICIAR-JUEGO.
           PERFORM LIMPIAR-PANTALLA.
           PERFORM PRINCIPAL UNTIL (ENCONTRADO = 1) OR
           (LIFE <= 0) OR (CARACTER = 'Q').
           IF ENCONTRADO = 1
              DISPLAY "Solucion: " PALABRA
              DISPLAY "Has salvado el cuello" LINE 20 COL 30.
           IF LIFE = 0
              DISPLAY "Solucion: " PALABRA
              DISPLAY "Tu cuerpo alimentara los buitres" LINE 20 COL 25
              PERFORM DIBUJAR-PLATAFORMA
              PERFORM DIBUJAR-PERSONAJE.


001000 PROGRAM-DONE.
001100     STOP RUN.

001100 INICIAR-JUEGO.
           PERFORM LIMPIAR-PANTALLA.
           DISPLAY "Introduzca palabra minuscula (max. 9 car.): ".
           ACCEPT CADENA.

      * Contar caracteres hasta primer espacio (sirve para medir
      * la longitud de la palabra). Como esta variable irá decreciendo
      * salvamos la longitud inicial.
           INSPECT CADENA TALLYING LONGITUD FOR CHARACTERS BEFORE
           INITIAL SPACE.
           MOVE LONGITUD TO LONGITUD-INICIAL.
      * Metemos la palabra en la matriz de caracteres e iniciamos
      * el destino con *.
           MOVE CADENA TO PALABRA.
           PERFORM VARYING CONT FROM 1 BY 1 UNTIL CONT > LONGITUD
              MOVE '*' TO DESTINO(CONT)
           END-PERFORM.
      * Limpiamos pantalla y comienza el juego.

001100 LIMPIAR-PANTALLA.
      * Limpiar pantalla
           PERFORM 25 TIMES
              DISPLAY " "
           END-PERFORM.

001100 PRINCIPAL.

           DISPLAY "Salir con 'Q' " LINE 24 COL 1.
           DISPLAY "Adivina la palabra: " LINE 5 COL 30.
           DISPLAY "SCORE: " LINE 1 COL 10
           DISPLAY SCORE LINE 1 COL 18
           DISPLAY "VIDA: " LINE 1 COL 60.
           DISPLAY LIFE LINE 1 COL 67.
           DISPLAY " ".
           PERFORM DIBUJAR-PLATAFORMA.
           PERFORM DIBUJAR-PERSONAJE.
           DISPLAY RESULTADO LINE 6 COL 30.
           ACCEPT CARACTER LINE 7 COL 30.
           PERFORM CONTAR-OCURRENCIAS.
      * Cuando Longitud a decrecido a 0 es que se han encontrado
      * todos los caracteres.
           IF LONGITUD <= 0
              MOVE 1 TO ENCONTRADO.


001100 CONTAR-OCURRENCIAS.
      * ¿Existe la letra?
           INSPECT CADENA TALLYING TEMP FOR ALL CARACTER.
           IF TEMP > 0
      * Si es así reemplazamos todas sus ocurrencias por '-' para
      * que no vuelva a aparecer y buscamos en la tabla sus posiciones.
              INSPECT CADENA REPLACING ALL CARACTER BY '-'
              PERFORM ACTUALIZAR-CADENA
           ELSE
              COMPUTE LIFE = LIFE - 1
           END-IF.
           MOVE 0 TO TEMP.

001100 ACTUALIZAR-CADENA.

           PERFORM VARYING CONT FROM 1 BY 1 UNTIL
           (CONT > LONGITUD-INICIAL)
              IF ORIGEN(CONT) = CARACTER
                 MOVE ORIGEN(CONT) TO DESTINO(CONT)
                 COMPUTE LONGITUD = LONGITUD - 1
                 ADD 1 TO SCORE
              END-IF
           END-PERFORM.

001100 DIBUJAR-PLATAFORMA.
           DISPLAY "|''|" LINE 12 COL 35.
           DISPLAY "|" LINE 13 COL 35.
           DISPLAY "|" LINE 14 COL 35.
           DISPLAY "|" LINE 15 COL 35.
           DISPLAY "|" LINE 16 COL 35.
           DISPLAY "=====" LINE 17 COL 35.
           DISPLAY "=====" LINE 18 COL 35.

001100 DIBUJAR-PERSONAJE.
           IF LIFE < 4
              DISPLAY "" LINE 13 COL 38.
           IF LIFE < 3
              DISPLAY "|" LINE 14 COL 38.
           IF LIFE < 2
              DISPLAY "/" LINE 14 COL 37
              DISPLAY "\" LINE 14 COL 39.
           IF LIFE < 1
              DISPLAY "/" LINE 15 COL 37
              DISPLAY "\" LINE 15 COL 39.

No me digaís que no es bonito...

Comentarios

  1. Impresionado!!. Ahora también podrá utilizar COBOL la industria del videojuego.

    Todos pensábamos que COBOL estaba muerto, ya sabemos como murió. Ahorcado!!

  2. Oye pues fuera coñas, estuve buscando la forma de poder usarlo en juegos. Y hay una, aunque remota: el comando ACCEPT soporta tiempo de espera, o sea lo pones bajo y simula el típico bucle infinito de un juego.

    Hombre, y muerto no está demasiado, como nos descuidemos deja al JAVA fuera de juego :-).

  3. Es cierto lo que dice Jorge, en banca esta muy vivo, y en la city se pagan unos sueldos tremendos a los programadores de COBOL…

  4. El COBOL VIVE, o por lo meno sese era la portada de la revista oficial de la IEEE hace unos años (no muchos).
    El programa que habeis puesto, es muy conocido, ahi algunos mejores,intentare buscar alguno mas complejo.
    Ademas, esta escrito en Cobol moderno (RM) en el que el manejo de de pantalla es facil, imaginaos lo que es hacer eso en Cobol/DC o Cobol CICS, aunque eso es solo para iniciados.
    Fuera de bromas, lo que no admito es que el Cobol sea un lenguaje feo, es el lenguaje mas claro del mundo, y ademas lo creo una mujer, asi que esta el dia en lo de las politicas de genero

  5. Hombre el juego del ahorcado es sobradamente conocido, el código no tenía ni idea que rodaba por internet, lo hizo un servidor ;-).

    Correcto, está hecho con RM Cobol.

  6. Recuerden que el cobol es usado enormenmente en mainframes de ibm como los iSeries, por lo que IBM no ha dejado de hacerle mejoras sustantivas, para mí es el mejor lenguaje orientado a negocios, es más veloz que los javas, Visuales y demás. Incluso trabaja eficazmente para web, a parte de p2p y otros usos de comunicaciones remotas.
    Por más que quieren reemplazarlo, jamás se podrá por la robustez y confiabilidad. VIVA COBOL!! en sus diferentes modalidades, ILE, CGI, etc., etc.

Comments are closed.