Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- IDENTIFICATION DIVISION.
- PROGRAM-ID. GAME-OF-LIFE.
- DATA DIVISION.
- WORKING-STORAGE SECTION.
- 01 TABLERO-PRINCIPAL.
- 02 FILA-PRINCIPAL OCCURS 25 INDEXED BY I-FILA-PRINCIPAL.
- 03 COLUMNA-PRINCIPAL PIC 9(1) OCCURS 25 INDEXED BY I-COLUMNA-PRINCIPAL.
- 01 TABLERO-TRABAJO.
- 02 FILA-TRABAJO OCCURS 25 INDEXED BY I-FILA-TRABAJO.
- 03 COLUMNA-TRABAJO PIC 9(1) OCCURS 25 INDEXED BY I-COLUMNA-TRABAJO.
- 01 LIMITE-FILA.
- 02 FILA-INICIAL PIC 99.
- 02 FILA-FINAL PIC 99.
- 01 LIMITE-COLUMNA.
- 02 COLUMNA-INICIAL PIC 99.
- 02 COLUMNA-FINAL PIC 99.
- 01 POSICION-ACTUAL.
- 02 X PIC 99.
- 02 Y PIC 99.
- 77 VALOR-ALEATORIO PIC 9.
- 77 CANT-VECINOS PIC 9.
- 77 I-PRINCIPAL PIC 99.
- PROCEDURE DIVISION.
- MAIN-PROCEDURE.
- PERFORM RELLENAR-TABLERO-PRINCIPAL.
- PERFORM VARYING I-PRINCIPAL FROM 1 BY 1 UNTIL I-PRINCIPAL = 99
- PERFORM VISUALIZAR-TABLERO-PRINCIPAL
- PERFORM GENERAR-SIGUIENTE-GENERACION
- PERFORM COPIA-TABLERO
- CONTINUE AFTER 0.3 SECONDS
- END-PERFORM.
- PERFORM VISUALIZAR-TABLERO-PRINCIPAL.
- GOBACK.
- *> RELLENA EL TABLERO DE FORMA ALEATORIA
- RELLENAR-TABLERO-PRINCIPAL.
- COMPUTE VALOR-ALEATORIO = FUNCTION RANDOM(FUNCTION SECONDS-PAST-MIDNIGHT).
- PERFORM VARYING I-FILA-PRINCIPAL FROM 1 BY 1 UNTIL I-FILA-PRINCIPAL > 25
- PERFORM VARYING I-COLUMNA-PRINCIPAL FROM 1 BY 1 UNTIL I-COLUMNA-PRINCIPAL > 25
- COMPUTE VALOR-ALEATORIO = FUNCTION RANDOM * 2
- MOVE VALOR-ALEATORIO TO COLUMNA-PRINCIPAL(I-FILA-PRINCIPAL, I-COLUMNA-PRINCIPAL)
- END-PERFORM
- END-PERFORM.
- *> GENERA LAS FORMAS DE VIDA DE LA SIGUIENTE GENERACIÓN
- GENERAR-SIGUIENTE-GENERACION.
- PERFORM VARYING I-FILA-TRABAJO FROM 1 BY 1 UNTIL I-FILA-TRABAJO > 25
- PERFORM GENERAR-CASILLA-TRABAJO VARYING I-COLUMNA-TRABAJO FROM 1 BY 1 UNTIL I-COLUMNA-TRABAJO > 25
- END-PERFORM.
- *> GENERA LA FORMA DE VIDA EN LA CASILLA M-SIMA DE LA FILA N-SIMA.
- GENERAR-CASILLA-TRABAJO.
- *> CALCULA CUANTAS CELULAS VECINAS HAY VIVAS EN UN CUADRADO DE 3X3, RESPETANDO LOS LÍMITES
- *> CALCULA CUAL ES LA FINAL INICIAL PARA NO SALIRSE DEL TABLERO
- IF I-FILA-TRABAJO = 1 THEN
- MOVE 1 TO FILA-INICIAL
- ELSE
- SUBTRACT 1 FROM I-FILA-TRABAJO GIVING FILA-INICIAL
- END-IF.
- *> CALCULA CUAL ES LA FILA FINAL PARA NO SALIRSE DEL TABLERO
- IF I-FILA-TRABAJO = 25 THEN
- MOVE 25 TO FILA-FINAL
- ELSE
- ADD 1 TO I-FILA-TRABAJO GIVING FILA-FINAL
- END-IF.
- *> CALCULA CUAL ES LA COLUMNA INICIAL PARA NO SALIRSE DEL TABLERO
- IF I-COLUMNA-TRABAJO = 1 THEN
- MOVE 1 TO COLUMNA-INICIAL
- ELSE
- SUBTRACT 1 FROM I-COLUMNA-TRABAJO GIVING COLUMNA-INICIAL
- END-IF.
- *> CALCULA CUAL ES LA COLUMNA FINAL PARA NO SALIRSE DEL TABLERO
- IF I-COLUMNA-TRABAJO = 25 THEN
- MOVE 25 TO COLUMNA-FINAL
- ELSE
- ADD 1 TO I-COLUMNA-TRABAJO GIVING COLUMNA-FINAL
- END-IF.
- *> CALCULA LA CANTIDAD DE VECINOS
- MOVE 0 TO CANT-VECINOS.
- PERFORM VARYING Y FROM FILA-INICIAL BY 1 UNTIL Y > FILA-FINAL
- PERFORM VARYING X FROM COLUMNA-INICIAL BY 1 UNTIL X > COLUMNA-FINAL
- IF NOT (Y = I-FILA-TRABAJO AND X = I-COLUMNA-TRABAJO) THEN
- IF COLUMNA-PRINCIPAL(Y, X) = 1 THEN
- ADD 1 TO CANT-VECINOS
- END-IF
- END-IF
- END-PERFORM
- END-PERFORM.
- *> SI LA CANTIDAD DE VECINOS = 3 LA CELULA NACE O SIGUE VIVA
- IF CANT-VECINOS = 3
- MOVE 1 TO COLUMNA-TRABAJO(I-FILA-TRABAJO, I-COLUMNA-TRABAJO)
- *> POR EL CONTRARIO, SI LA CANTIDAD DE VECINOS ES DIFERENTE A 2 LA CELULA MUERE
- ELSE IF CANT-VECINOS NOT = 2
- MOVE 0 TO COLUMNA-TRABAJO(I-FILA-TRABAJO, I-COLUMNA-TRABAJO)
- END-IF.
- *> SE COPIA EL TABLERO DE TRABAJO AL TABLERO PRINCIPAL
- COPIA-TABLERO.
- MOVE TABLERO-TRABAJO TO TABLERO-PRINCIPAL.
- *> MUESTRA POR CONSOLA EL TABLERO
- VISUALIZAR-TABLERO-PRINCIPAL.
- PERFORM VARYING I-FILA-PRINCIPAL FROM 1 BY 1 UNTIL I-FILA-PRINCIPAL > 25
- PERFORM VARYING I-COLUMNA-PRINCIPAL FROM 1 BY 1 UNTIL I-COLUMNA-PRINCIPAL > 25
- IF COLUMNA-PRINCIPAL(I-FILA-PRINCIPAL, I-COLUMNA-PRINCIPAL) = 1 THEN
- DISPLAY 'O' LINE I-FILA-PRINCIPAL COL I-COLUMNA-PRINCIPAL
- ELSE
- DISPLAY ' ' LINE I-FILA-PRINCIPAL COL I-COLUMNA-PRINCIPAL
- END-IF
- END-PERFORM
- END-PERFORM.
- END PROGRAM GAME-OF-LIFE.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement