Foro -Documentación -Código fuente -Contacto -Empleo

Buscar

Traducir

Amazon

ZREC_GAM_DIS PDF Imprimir E-mail
Usar puntuación: / 0
MaloBueno 
Código fuente - Juegos
Sábado, 11 de Octubre de 2003 03:44
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.





Comentarios
Buscar
¡Sólo los usuarios registrados pueden escribir comentarios!

3.26 Copyright (C) 2008 Compojoom.com / Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."

 
home search