Gorilas
*¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º
*¸¸,ø¤º°`°º¤ø,¸¸, UnIvErsE iS eXpAnDiNg ,¸¸,ø¤º°`°º¤ø,¸¸
*¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º
*¤ º
*¤ ------- ART :-O Creativity fRoM sPAiN º
*¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º
*¤ Fecha: 31/03/2003 º
*¤ Autores: Jose Arias y el espíritu del EsKador ArT º
*¤ EMail:
Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
º
*¤ º
*¤ Descripción: ¿Alguien se acuerda del gorilas en QBASIC ??? º
*¤ Todo un clásico. A este paso hacemos un módulo SAP º
*¤ NOTICIAS:El próximo será el DopeWars, que se que soys unos viciosos º
*¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º
*¤ Elementos de texto: textos de selección º
*¤ NOMBRE1: Nombre del jugador 1 º
*¤ NOMBRE1: Nombre del jugador 2 º
*¤ RES_1 : Resolución 800x600 º
*¤ RES_2 : Resolución 1024x728 º
*¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º
REPORT ZREC_GAM_DIS NO STANDARD PAGE HEADING LINE-SIZE 141.
INCLUDE .
INCLUDE .
*********************************************************
CONSTANTS: GRA_RAD TYPE P DECIMALS 12 VALUE
\'1.745329251994\'.
DATA: BEGIN OF T_DAT OCCURS 99,
X TYPE I,
Y TYPE I,
TIP,
END OF T_DAT.
DATA: RADI TYPE P DECIMALS 12,
LINEAS TYPE I,
COLUMNAS TYPE I,
ANGULO TYPE I ,
FUERZA TYPE I,
ANGULO2 TYPE I ,
FUERZA2 TYPE I,
DISPARO,
MOVIM,
VIENTO TYPE I,
VIDAS1 TYPE I,
VIDAS2 TYPE I,
FIN_JUEGO,
TURNO.
*********************************************************
PARAMETERS: NOMBRE1(30) DEFAULT \'JUGADOR1\' OBLIGATORY,
NOMBRE2(30) DEFAULT \'JUGADOR2\' OBLIGATORY.
PARAMETERS: RES_1 RADIOBUTTON GROUP RES,
RES_2 RADIOBUTTON GROUP RES DEFAULT \'X\'.
*********************************************************
START-OF-SELECTION.
DATA: CHOQ.
*.Dependiendo de la resolución
*.1024x720
IF RES_2 = \'X\'.
LINEAS = 34.
COLUMNAS = 139.
*.800x600
ELSEIF RES_1 = \'X\'.
LINEAS = 22.
COLUMNAS = 108.
ENDIF.
ANGULO = 35.
ANGULO2 = 145.
FUERZA = 100.
FUERZA2 = 100.
TURNO = \'\'.
VIENTO = 12.
VIDAS1 = 3.
VIDAS2 = 3.
DISPARO = \'\'.
MOVIM = \'\'.
FIN_JUEGO = \'\'.
REFRESH T_DAT.
CALL FUNCTION \'RANDOM_INITIALIZE\'.
PERFORM CREA_ESCENARIO.
PERFORM IMPRIMIR_PANTALLA.
*********************************************************
*.Cogemos datos
*********************************************************
AT LINE-SELECTION.
DATA: ROW TYPE I,
XX TYPE I,
YY TYPE I,
IND TYPE I,
AUX LIKE DATATYPE-INTEGER2.
*.Si se ha disparado
IF DISPARO = \'X\'.
DISPARO = \'\'.
MOVIM = \'\'.
*...Borramos disparos y explosiones
DELETE T_DAT WHERE TIP = \'B\' OR TIP = \'*\'.
*...Nuevo viento
PERFORM NUMERO_ALEATORIO USING 0 20 CHANGING AUX.
VIENTO = AUX.
PERFORM IMPRIMIR_PANTALLA.
EXIT.
ENDIF.
*.Miramos si es el disparo
ROW = LINEAS + 3.
IF SY-CUROW <> ROW OR ( SY-CUCOL <> 91 AND SY-CUCOL <> 105 AND
SY-CUCOL <> 110 ).
EXIT.
ENDIF.
*.Si es el turno del primero
IF TURNO = \'\'.
READ TABLE T_DAT WITH KEY TIP = \'1\'.
ELSE.
READ TABLE T_DAT WITH KEY TIP = \'2\'.
ENDIF.
IND = SY-TABIX.
******************************* DEPENDIENDO DE LA ACCIÓN **DISPARO
IF SY-CUCOL = 91.
*...Cogemos datos
MOVIM = \'\'.
DISPARO = \'X\'.
IF TURNO = \'\'.
READ LINE ROW FIELD VALUE FUERZA INTO FUERZA
ANGULO INTO ANGULO.
PERFORM CALCULA_PROYECTIL USING T_DAT-X T_DAT-Y
ANGULO FUERZA CHANGING CHOQ XX YY.
ELSE.
READ LINE ROW FIELD VALUE FUERZA INTO FUERZA2
ANGULO INTO ANGULO2.
PERFORM CALCULA_PROYECTIL USING T_DAT-X T_DAT-Y
ANGULO2 FUERZA2 CHANGING CHOQ XX YY.
ENDIF.
*...Controlamos el choque
IF CHOQ <> \'\'.
*.....Si es alguno de los jugadores
IF CHOQ = \'1\' OR CHOQ = \'2\'.
*.......Quitamos la vida
IF CHOQ = \'1\'.
VIDAS1 = VIDAS1 - 1.
ELSE.
VIDAS2 = VIDAS2 - 1.
ENDIF.
*.......Si no hay vidas
IF VIDAS1 = 0 OR VIDAS2 = 0.
FIN_JUEGO = CHOQ.
ENDIF.
*.....Otra cosa
ELSE.
DELETE T_DAT WHERE X = XX AND Y = YY AND TIP <> \'*\'.
ENDIF.
ENDIF.
ENDIF.
**Movimiento
IF SY-CUCOL = 105 OR SY-CUCOL = 110.
XX = T_DAT-X.
YY = T_DAT-Y.
*...Izquierda
IF SY-CUCOL = 105.
IF XX > 1.
XX = XX - 1.
ENDIF.
*...Derecha
ELSE.
IF XX < COLUMNAS.
XX = XX + 1.
ENDIF.
ENDIF.
*...Miramos el edificio más bajo
YY = LINEAS.
LOOP AT T_DAT WHERE X = XX AND ( TIP = \'E\' OR TIP = \'F\' ).
IF T_DAT-Y <= YY.
YY = T_DAT-Y - 1.
ENDIF.
ENDLOOP.
*...Ponemos la nueva posición
READ TABLE T_DAT INDEX IND.
T_DAT-X = XX.
T_DAT-Y = YY.
MODIFY T_DAT INDEX IND.
*...Si es el primer movimiento
IF MOVIM = \'\'.
MOVIM = \'X\'.
ELSE.
DISPARO = \'X\'.
ENDIF.
ENDIF.
*.Mostramos
PERFORM IMPRIMIR_PANTALLA.
*.Cambiamos turno (si debemos)
IF DISPARO = \'X\'.
IF TURNO = \'\'.
TURNO = \'X\'.
ELSE.
TURNO = \'\'.
ENDIF.
ENDIF.
*********************************************************
*.Creamos el escenario
*********************************************************
FORM CREA_ESCENARIO.
DATA: AUX LIKE DATATYPE-INTEGER2,
CAN TYPE I,
ALT TYPE I,
X1 TYPE I,
X2 TYPE I,
X TYPE I,
Y TYPE I,
FIN.
FIN = \'\'.
*.Al principio los número aleatorios no son muy aleatorios
DO 20 TIMES.
PERFORM NUMERO_ALEATORIO USING 1 10 CHANGING AUX.
ENDDO.
*.Posiciones iniciales del 1 y del 2
PERFORM NUMERO_ALEATORIO USING 1 10 CHANGING X1.
PERFORM NUMERO_ALEATORIO USING 1 10 CHANGING X2.
X2 = COLUMNAS - X2.
X = 0.
*.Hasta que no se cumpla
DO.
*...Número de X iguales
PERFORM NUMERO_ALEATORIO USING 2 10 CHANGING CAN.
*...La altura de la montaña
PERFORM NUMERO_ALEATORIO USING 1 9 CHANGING ALT.
DO CAN TIMES.
X = X + 1.
*.....Ahora por la altura
DO ALT TIMES.
Y = LINEAS - SY-INDEX + 1.
T_DAT-X = X.
T_DAT-Y = Y.
*.......Varios tipos de edificios
PERFORM NUMERO_ALEATORIO USING 1 5 CHANGING AUX.
CASE AUX.
WHEN 1.
T_DAT-TIP = \'E\'.
WHEN OTHERS.
T_DAT-TIP = \'F\'.
ENDCASE.
APPEND T_DAT.
ENDDO.
*.....Si es el comienzo de algun jugador
IF X1 = X OR X2 = X.
T_DAT-X = X.
T_DAT-Y = LINEAS - ALT.
IF X1 = X.
T_DAT-TIP = \'1\'.
ELSE.
T_DAT-TIP = \'2\'.
ENDIF.
APPEND T_DAT.
ENDIF.
*.....Si es el final
IF X = COLUMNAS.
FIN = \'X\'.
EXIT.
ENDIF.
ENDDO.
IF FIN = \'X\'.
EXIT.
ENDIF.
ENDDO.
*.Viento
PERFORM NUMERO_ALEATORIO USING 0 20 CHANGING AUX.
VIENTO = AUX.
ENDFORM.
*********************************************************
*.Ponemos los datos de la pantalla
*********************************************************
FORM IMPRIMIR_PANTALLA.
DATA: COL TYPE I,
STRAUX(255),
EXPLO,
X1 TYPE I,
Y1 TYPE I,
X2 TYPE I,
Y2 TYPE I,
ILIN TYPE I,
STRAUX2(50),
CAR, IMP.
*.Miramos si hay explosión
READ TABLE T_DAT WITH KEY TIP = \'*\'.
IF SY-SUBRC = 0.
X1 = T_DAT-X - 1.
X2 = T_DAT-X + 1.
Y1 = T_DAT-Y - 1.
Y2 = T_DAT-Y + 1.
ELSE.
CLEAR: X1,X2,Y1,Y2.
ENDIF.
SY-LSIND = 0.
COL = COLUMNAS + 2.
ULINE:/(COL).
ILIN = 0.
DO LINEAS TIMES.
ILIN = ILIN + 1.
*...Creamos cadena
CLEAR STRAUX.
LOOP AT T_DAT WHERE Y = SY-INDEX.
STRAUX+T_DAT-X(1) = T_DAT-TIP.
ENDLOOP.
IMP = \'\'.
*...Lo pasamos a ICONOS
WRITE:/\'|\' NO-GAP.
*...Dependiendo de la línea que sea
*...VIENTO
IF ILIN = 1.
PERFORM IMPRIME_VIENTO.
IMP = \'X\'.
ENDIF.
*...FIN DE JUEGO
COL = LINEAS / 2.
IF COL = ILIN AND FIN_JUEGO <> \'\'.
PERFORM IMPRIME_FINAL.
IMP = \'X\'.
ENDIF.
*...SI NO HAY NADA
IF IMP <> \'X\'.
DO COLUMNAS TIMES.
CAR = STRAUX+SY-INDEX(1).
*.......Miramos si esta en el radio de la explosion
IF SY-INDEX >= X1 AND SY-INDEX <= X2 AND
ILIN >= Y1 AND ILIN <= Y2.
EXPLO = \'X\'.
ELSE.
EXPLO = \'\'.
ENDIF.
CASE CAR.
*.........Bala
WHEN \'B\'.
WRITE SYM_FILLED_CIRCLE AS SYMBOL NO-GAP
COLOR COL_KEY INTENSIFIED OFF.
*.........Personaje
WHEN \'1\'.
WRITE SYM_FLASH AS SYMBOL NO-GAP COLOR COL_HEADING.
WHEN \'2\'.
WRITE SYM_FLASH AS SYMBOL NO-GAP COLOR COL_TOTAL.
*.........Edificios
WHEN \'E\'.
IF EXPLO = \'X\'.
WRITE SYM_PLUS_BOX AS SYMBOL NO-GAP COLOR COL_NEGATIVE.
ELSE.
WRITE SYM_PLUS_BOX AS SYMBOL NO-GAP COLOR COL_GROUP.
ENDIF.
WHEN \'F\'.
IF EXPLO = \'X\'.
WRITE SYM_FILLED_SQUARE AS SYMBOL NO-GAP COLOR COL_NEGATIVE.
ELSE.
WRITE SYM_FILLED_SQUARE AS SYMBOL NO-GAP COLOR COL_GROUP.
ENDIF.
*.........Explosión
WHEN \'*\'.
WRITE SYM_ASTERISK AS SYMBOL NO-GAP COLOR COL_NEGATIVE.
*.........Blanco
WHEN OTHERS.
*...........Si no es fin de juego y es algo
IF EXPLO = \'X\'.
WRITE SYM_SPACE AS SYMBOL NO-GAP COLOR COL_NEGATIVE.
ELSE.
WRITE SYM_SPACE AS SYMBOL NO-GAP COLOR COL_KEY
INTENSIFIED OFF.
ENDIF.
ENDCASE.
ENDDO.
WRITE \'|\' NO-GAP.
ENDIF.
ENDDO.
COL = COLUMNAS + 2.
ULINE:/(COL).
IF TURNO = \'\'.
STRAUX = NOMBRE1.
ELSE.
STRAUX = NOMBRE2.
ENDIF.
IF FIN_JUEGO = \'\'.
IF DISPARO <> \'X\'.
IF TURNO = \'\'.
WRITE:/ \'Turno de \', NOMBRE1,
40 \'Ángulo:\', ANGULO INPUT ON,
65 \'Fuerza:\', FUERZA INPUT ON.
HIDE: ANGULO, FUERZA.
ELSE.
WRITE:/ \'Turno de \', NOMBRE2,
40 \'Ángulo:\', ANGULO2 INPUT ON,
65 \'Fuerza:\', FUERZA2 INPUT ON.
HIDE: ANGULO2, FUERZA2.
ENDIF.
WRITE: 90 ICON_EXECUTE_OBJECT AS ICON HOTSPOT,\'DISPARAR\',
104 ICON_COLUMN_LEFT AS ICON HOTSPOT,
109 ICON_COLUMN_RIGHT AS ICON HOTSPOT.
ELSE.
WRITE:/90 ICON_EXECUTE_OBJECT AS ICON HOTSPOT,\'SIGUIENTE\'.
ENDIF.
ENDIF.
ENDFORM.
*********************************************************
*.Calculamos la trayectoria de un proyectil *.La fuerza puede ser de 1 a 150.
*********************************************************
FORM CALCULA_PROYECTIL USING XORI YORI ANG FUE
CHANGING CHOQUE POSX POSY.
DATA: AUX TYPE P DECIMALS 5,
VEL_X TYPE P DECIMALS 2,
VEL_Y TYPE P DECIMALS 2,
VIEN TYPE P DECIMALS 2,
X TYPE I,
Y TYPE I,
X1 TYPE I,
Y1 TYPE I,
XX TYPE I,
YY TYPE I.
*.Borramos las balas antiguas.
DELETE T_DAT WHERE TIP = \'B\'.
X = XORI.
Y = YORI.
CLEAR CHOQUE.
*.Dependiendo del ángulo empezamos en una posicion o en otra.
PERFORM PASA_RADIANES USING ANG CHANGING RADI.
AUX = COS( RADI ).
IF AUX > \'0.2\'.
X = X + 1.
ELSEIF AUX < \'-0.2\'.
X = X - 1.
ENDIF.
IF ANG > 20 AND ANG < 160.
Y = Y - 1.
ELSEIF ANG > 200 AND ANG < 340.
Y = Y + 1.
ENDIF.
*.Velocidades iniciales
VEL_X = AUX * FUE.
AUX = SIN( RADI ).
VEL_Y = AUX * FUE.
X1 = X.
Y1 = Y.
*.El viento, para que no afecte tanto
VIEN = ( VIENTO - 10 ) * 2 / 3.
*.Hasta que nos salgamos
DO.
*...Ponemos intermedios
PERFORM CALCULA_INTERMEDIOS USING X1 Y1 X Y CHANGING CHOQUE POSX
POSY.
IF CHOQUE <> \'\'.
EXIT.
ENDIF.
*...Miramos si está dentro
X1 = LINEAS + 1.
IF X < 0 OR Y > X1.
EXIT.
ENDIF.
*...EL VIENTO
VEL_X = VEL_X + VIEN.
*...El antiguo
X1 = X.
Y1 = Y.
*...Ahora la gravedad
VEL_Y = VEL_Y - \'9.8\'.
*...Calculamos la nueva posición
XX = VEL_X / 10.
YY = VEL_Y / 10.
X = X + XX.
*...Coordenadas absolutas
YY = LINEAS - Y + YY.
*...Volvemos a ponerlas coordenas de pantalla
Y = LINEAS - YY.
ENDDO.
ENDFORM.
*********************************************************
*.Pasamos de grados a radianes
*********************************************************
FORM PASA_RADIANES USING GRADOS CHANGING RADIANES.
RADIANES = GRADOS * GRA_RAD / 100.
ENDFORM.
*********************************************************
*.Los puntos intermedios
*********************************************************
FORM CALCULA_INTERMEDIOS USING X1 Y1 X2 Y2 CHANGING CHOQ POSX POSY.
DATA: X TYPE I,
Y TYPE I,
XX TYPE I,
XY TYPE P DECIMALS 3,
YY TYPE I,
PRIMX.
*.Metemos la primera
PERFORM ANADIR_TABLA USING X1 Y1 CHANGING CHOQ.
IF CHOQ <> \'\'.
POSX = X1.
POSY = Y1.
EXIT.
ENDIF.
*.Inicio
X = X1.
Y = Y1.
*.Hasta que no sean iguales.
DO.
*...Comprobamos
IF X = X2 AND Y = Y2.
EXIT.
ENDIF.
*...Cual es la absoluta
XX = ABS( X2 - X ).
YY = ABS( Y2 - Y ).
IF XX > YY.
PRIMX = \'X\'.
IF XX <> 0.
XY = YY / XX.
ELSE.
XY = 0.
ENDIF.
ELSE.
PRIMX = \'\'.
IF YY <> 0.
XY = XX / YY.
ELSE.
XY = 0.
ENDIF.
ENDIF.
*...Ahora para la suma
XX = X2 - X.
YY = Y2 - Y.
*...La X varia más
IF PRIMX = \'X\'.
IF XX > 0.
X = X + 1.
ELSEIF XX < 0.
X = X - 1.
ENDIF.
*.....Si hay que modificar la otra coordenada
IF XY >= \'0.4\'.
IF YY > 0.
Y = Y + 1.
ELSEIF YY < 0.
Y = Y - 1.
ENDIF.
ENDIF.
ELSE.
IF YY > 0.
Y = Y + 1.
ELSEIF YY < 0.
Y = Y - 1.
ENDIF.
*.....Si hay que modificar la otra coordenada
IF XY >= \'0.4\'.
IF XX > 0.
X = X + 1.
ELSEIF XX < 0.
X = X - 1.
ENDIF.
ENDIF.
ENDIF.
*...Añadimos esta
PERFORM ANADIR_TABLA USING X Y CHANGING CHOQ.
IF CHOQ <> \'\'.
POSX = X.
POSY = Y.
EXIT.
ENDIF.
ENDDO.
ENDFORM.
*********************************************************
*.Añadimos a la tabla
*********************************************************
FORM ANADIR_TABLA USING X Y CHANGING CHOQ.
*.Miramos si ha chocado con algo
CHOQ = \'\'.
READ TABLE T_DAT WITH KEY X = X Y = Y.
IF SY-SUBRC = 0 AND T_DAT-TIP <> \'B\'.
CHOQ = T_DAT-TIP.
ENDIF.
*.Ponemos
T_DAT-X = X.
T_DAT-Y = Y.
T_DAT-TIP = \'B\'.
*.Si está en el rango
IF X >= 1 AND X =< COLUMNAS AND Y >= 1 AND Y =< LINEAS.
*...Si hay choque
IF CHOQ <> \'\'.
T_DAT-TIP = \'*\'.
ENDIF.
APPEND T_DAT.
ENDIF.
ENDFORM.
*********************************************************
*.Damos un número aleatorio.
*********************************************************
FORM NUMERO_ALEATORIO USING INI FIN CHANGING NUMERO.
DATA: AUX1 LIKE DATATYPE-INTEGER2,
AUX2 LIKE DATATYPE-INTEGER2,
AUX3 LIKE DATATYPE-INTEGER2.
AUX1 = INI.
AUX2 = FIN.
CALL FUNCTION \'RANDOM_I2\'
EXPORTING
RND_MIN = AUX1
RND_MAX = AUX2
IMPORTING
RND_VALUE = AUX3.
NUMERO = AUX3.
ENDFORM.
*********************************************************
*.Imprimimos el viento
*********************************************************
FORM IMPRIME_VIENTO.
DATA: I TYPE I,
J TYPE I.
*.Espacios iniciales
I = ( COLUMNAS - 26 ) / 2.
J = COLUMNAS - 26 - I.
*.Restamos medidor de vidas
I = I - 3.
J = J - 3.
*.Vidas jugador 1.
PERFORM IMPRIME_CAS USING 1 3 VIDAS1 3 \'X\'.
*.Primer espacio en blanco
DO I TIMES.
WRITE SYM_SPACE AS SYMBOL NO-GAP COLOR COL_KEY INTENSIFIED OFF.
ENDDO.
*.Ahora el viento IZQUIERDA
PERFORM IMPRIME_CAS USING 0 9 VIENTO 10 \'X\'.
*.TEXTO
WRITE: \'VIENTO\' COLOR COL_KEY INTENSIFIED OFF NO-GAP.
*.Ahora el viento DERECHA
PERFORM IMPRIME_CAS USING 11 20 VIENTO 10 \'\'.
*.BLANCOS
DO J TIMES.
WRITE SYM_SPACE AS SYMBOL NO-GAP COLOR COL_KEY INTENSIFIED OFF.
ENDDO.
*.Vidas jugador 2.
PERFORM IMPRIME_CAS USING 1 3 VIDAS2 3 \'\'.
WRITE: \'|\'.
ENDFORM.
*.Imprimimos las casillitas
FORM IMPRIME_CAS USING R1 R2 NUME VECES NEG.
DATA: I TYPE I,
ESQ.
*.Si es al revés
IF NEG = \'X\'.
I = R2.
ELSE.
I = R1.
ENDIF.
DO VECES TIMES.
*...Si está dentro
ESQ = \'\'.
IF NUME >= I AND NUME <= R2.
ESQ = \'X\'.
ENDIF.
IF NEG = \'X\'.
I = I - 1.
ELSE.
I = I + 1.
ENDIF.
IF ESQ = \'X\'.
WRITE SYM_FILLED_SQUARE AS SYMBOL NO-GAP COLOR COL_KEY
INTENSIFIED OFF.
ELSE.
WRITE SYM_SQUARE AS SYMBOL NO-GAP COLOR COL_KEY INTENSIFIED OFF.
ENDIF.
ENDDO.
ENDFORM.
*.IMPRIMIMOS EL FINAL DEL JUEGO
FORM IMPRIME_FINAL.
DATA: I TYPE I,
J TYPE I,
STR TYPE I,
CAR,
STRAUX(50).
*.Cadena
IF FIN_JUEGO = \'1\'.
CONCATENATE \'JUGADOR\' NOMBRE2 \'G A N A\' INTO STRAUX
SEPARATED BY SPACE.
ELSE.
CONCATENATE \'JUGADOR\' NOMBRE1 \'G A N A\' INTO STRAUX
SEPARATED BY SPACE.
ENDIF.
*.Espacios iniciales
STR = STRLEN( STRAUX ).
I = ( COLUMNAS - STR ) / 2.
J = COLUMNAS - STR - I.
*.Primer espacio en blanco
DO I TIMES.
WRITE SYM_SPACE AS SYMBOL NO-GAP COLOR COL_TOTAL. \" INTENSIFIED OFF.
ENDDO.
*.Mensage
I = 0.
DO STR TIMES.
CAR = STRAUX+I(1).
WRITE: CAR COLOR COL_TOTAL NO-GAP.
I = I + 1.
ENDDO.
*.Segundo espacio
DO J TIMES.
WRITE SYM_SPACE AS SYMBOL NO-GAP COLOR COL_TOTAL. \" INTENSIFIED OFF.
ENDDO.
WRITE: \'|\'.
ENDFORM.
|