Ú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…