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

Buscar

Traducir

Amazon

ZROBOTS PDF Imprimir E-mail
Usar puntuación: / 0
MaloBueno 
Código fuente - Juegos
Martes, 08 de Julio de 2003 21:54
Robots versión Igualdad para los programadores
*ñ¦¦`¦¦ñ°,©©,°ñ¦¦`¦¦ñ°,©©,°ñ¦¦`¦¦ñ°,©©,°ñ¦¦`¦¦ñ°,©©,°ñ¦¦`¦¦ñ°,©©,°ñ¦¦`¦¦
*©©,°ñ¦¦`¦¦ñ°,©©,         UnIvErsE iS eXpAnDiNg         ,©©,°ñ¦¦`¦¦ñ°,©©
*ñ¦¦`¦¦ñ°,©©,°ñ¦¦`¦¦ñ°,©©,°ñ¦¦`¦¦ñ°,©©,°ñ¦¦`¦¦ñ°,©©,°ñ¦¦`¦¦ñ°,©©,°ñ¦¦`¦¦
*ñ                                                                     ¦
*ñ -s-a-o- ART   :-O                             Creativity fRoM sPAiN ¦
*ñ¦¦`¦¦ñ°,©©,°ñ¦¦`¦¦ñ°,©©,°ñ¦¦`¦¦ñ°,©©,°ñ¦¦`¦¦ñ°,©©,°ñ¦¦`¦¦ñ°,©©,°ñ¦¦`¦¦
*ñ Fecha:   26/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: Robots versi¾n Igualdad para los programadores         ¦
*ñ                                                                     ¦
*ñ Versi¾n 1.0                                                         ¦
*ñ¦¦`¦¦ñ°,©©,°ñ¦¦`¦¦ñ°,©©,°ñ¦¦`¦¦ñ°,©©,°ñ¦¦`¦¦ñ°,©©,°ñ¦¦`¦¦ñ°,©©,°ñ¦¦`¦¦
REPORT ZREC_GAM_ROB NO STANDARD PAGE HEADING LINE-SIZE 120.

INCLUDE .

*.Coordenadas de los objetos
DATA: BEGIN OF T_COORDENADAS,
  X TYPE I,
  Y TYPE I,
END OF T_COORDENADAS.
DATA BEGIN OF T_BALAS OCCURS 99.
  INCLUDE STRUCTURE T_COORDENADAS.
  DATA: XX, YY,
END OF T_BALAS.
DATA BEGIN OF T_ITEM OCCURS 99.
  INCLUDE STRUCTURE T_COORDENADAS.
  DATA: TIPO LIKE DATATYPE-INTEGER2,
END OF T_ITEM.

DATA: T_MALOS LIKE T_COORDENADAS OCCURS 99 WITH HEADER LINE, " Los malos
      T_BUENO LIKE T_COORDENADAS,                            " El bueno
      TURNOS TYPE I,
      MIR_X, MIR_Y,
      TURNOS_T TYPE I,
      T_ROBOTS TYPE I,
      FIN_JUEGO.

*.Variables parßmetrizables
DATA:VIDAS TYPE I,
     TRANSP TYPE I,
     ROBOTS TYPE I,
     BALAS TYPE I,
     C_TUR TYPE I,
     I_INI TYPE I,
     TOTY LIKE DATATYPE-INTEGER2,
     TOTX LIKE DATATYPE-INTEGER2,
     INTROD.


************************************************************
INITIALIZATION.
  TURNOS = 0.
  FIN_JUEGO = ''.
  TURNOS_T = 0.
*****************************************************
*.Variables parametrizables.
  VIDAS = 3.     " N·mero de vidas
  TRANSP = 3.    " N·mero de transportes
  ROBOTS = 11.   " N·mero de malos
  BALAS = 3.     " N·mero de balas
  TOTY = 20.     " Filas que tiene el tablero
  TOTX = 50.     " Columnas del tablero. Recordas que 1 posici¾n = 2 col
  I_INI = 3.     " Items iniciales
  C_TUR = 10.    " Respawn de Items (en turnos)
  INTROD = 'X'.  " Mostrar la introducci¾n


************************************************************
*.Empezamos
START-OF-SELECTION.

*.Inicializamos
  T_ROBOTS = ROBOTS.
  CALL FUNCTION 'RANDOM_INITIALIZE'.
*.Nuestra posici¾n
  PERFORM ALEATORIO CHANGING T_BUENO-X T_BUENO-Y.
*.Ahora los malos
  DO ROBOTS TIMES.
    PERFORM ALEATORIO CHANGING T_MALOS-X T_MALOS-Y.
    APPEND T_MALOS.
  ENDDO.
*.Los items
  DO I_INI TIMES.
    PERFORM CREAR_ITEM.
  ENDDO.

*.Tablero o introducci¾n
  IF INTROD = 'X'.
    PERFORM INTRODUCCION.
  ELSE.
    PERFORM DIBUJA_PANTALLA.
  ENDIF.


*************************************************************
*.Control de TECLAS
AT LINE-SELECTION.

*..Si es fin de juego
   IF FIN_JUEGO = 'X'.
     EXIT.
   ENDIF.

*..Introducci¾n
   IF INTROD = 'X'.
     INTROD = ''.
     PERFORM DIBUJA_PANTALLA.
     EXIT.
   ENDIF.

*..Movimiento
   IF ( SY-CUCOL = 6 OR SY-CUCOL = 9 OR SY-CUCOL = 12 ) AND
      ( SY-CUROW = 24 OR SY-CUROW = 25 OR SY-CUROW = 26 ).
     CLEAR: MIR_X,MIR_Y.
*....Coordenada X
     IF SY-CUCOL > 9.
       MIR_X = '+'.
     ELSEIF SY-CUCOL < 9.
       MIR_X = '-'.
     ENDIF.
*....Coordenada Y
     IF SY-CUROW < 25.
       MIR_Y = '-'.
     ELSEIF SY-CUROW > 25.
       MIR_Y = '+'.
     ENDIF.
*....Bucle principal
     PERFORM BUCLE_PRINCIPAL.
   ENDIF.

*..Transportarse
   IF SY-CUCOL = 21 AND SY-CUROW = 25.
     CLEAR: MIR_X,MIR_Y.
     PERFORM TRANSPORTE.
   ENDIF.

*..Disparo
   IF SY-CUCOL = 21 AND SY-CUROW = 26.
     PERFORM DISPARO.
   ENDIF.


************************************************************
*.Dibujamos el tablero
************************************************************
FORM DIBUJA_PANTALLA.

DATA: STRAUX(200),
      STRAUX2(20),
      PUNTUACION TYPE I,
      CAR.


*.Principio del tablero
  SY-LSIND = 0.
  ULINE:/(102).
*.Las lÝneas
  DO TOTY TIMES.
    CLEAR STRAUX.
*...Los items
    LOOP AT T_ITEM WHERE Y = SY-INDEX.
      CAR = T_ITEM-TIPO.
      STRAUX+T_ITEM-X(1) = CAR.
    ENDLOOP.
*...Los malos
    LOOP AT T_MALOS WHERE Y = SY-INDEX.
      STRAUX+T_MALOS-X(1) = 'X'.
    ENDLOOP.
*...Las balas
    LOOP AT T_BALAS WHERE Y = SY-INDEX.
      STRAUX+T_BALAS-X(1) = 'B'.
    ENDLOOP.
*...El bueno
    IF T_BUENO-Y = SY-INDEX.
      STRAUX+T_BUENO-X(1) = 'O'.
    ENDIF.
*...Fin de juego
    IF FIN_JUEGO = 'X'.
      STRAUX = '|'.
*.....Si estamos muertos (y es el centro)
      IF VIDAS = 0 AND SY-INDEX = 9.
        STRAUX+39(22) = 'E S T A S  M U E R T O'.
*.....Ganadores
      ELSEIF SY-INDEX = 9 AND ROBOTS = 0.
        STRAUX+41(18) = 'H A S  G A N A D O'.
      ENDIF.
*.....PUNTUACIËN
      IF SY-INDEX = 11.
        PUNTUACION = TURNOS + ( ( T_ROBOTS - ROBOTS ) * 5 )
                            + ( VIDAS * 4 )
                            + ( TRANSP * 3 )
                            + ( BALAS * 2 ).
        IF VIDAS > 0.
          PUNTUACION = PUNTUACION * 2.
        ENDIF.
        STRAUX2 = PUNTUACION.
        CONDENSE STRAUX2.
        STRAUX+41(11) = 'P U N T O S'.
        STRAUX+55(10) = STRAUX2.
      ENDIF.
      STRAUX+101(1) = '|'.
      WRITE:/ STRAUX.
*...Lo pasamos a ICONOS
    ELSE.
      WRITE:/'|' NO-GAP.
      DO TOTX TIMES.
        CAR = STRAUX+SY-INDEX(1).
*.......Dependiendo de lo que sea
        CASE CAR.
*.........El bueno
          WHEN 'O'.
            WRITE ICON_CUSTOMER AS ICON NO-GAP.
*.........El malo
          WHEN 'X'.
            WRITE ICON_MANAGER  AS ICON NO-GAP.
*.........Bala
          WHEN 'B'.
            WRITE ICON_LED_GREEN AS ICON NO-GAP.
*.........Los items
          WHEN '1'.
            WRITE ICON_PM_PRESS AS ICON NO-GAP.
          WHEN '2'.
            WRITE ICON_BIW_INFO_CUBE AS ICON NO-GAP.
          WHEN '3'.
            WRITE ICON_TRANSPORT AS ICON NO-GAP.
*.........Espacio
          WHEN OTHERS.
*           WRITE ' .' NO-GAP.
            WRITE ICON_SPACE AS ICON NO-GAP.
        ENDCASE.
      ENDDO.
      WRITE: '|'.
    ENDIF.
  ENDDO.
*.Final
  ULINE:/(102).
*.Acciones
  IF FIN_JUEGO <> 'X'.
    WRITE:/4 'Movimiento',
          20 VIDAS, ICON_CUSTOMER AS ICON,
          35 TRANSP, ICON_TRANSPORT AS ICON,
          50 BALAS, ICON_LED_GREEN AS ICON,
          65 ROBOTS, ICON_MANAGER AS ICON,
          80 TURNOS, ICON_TIME_INA AS ICON.
    WRITE:/5 ICON_TOTAL_LEFT AS ICON HOTSPOT,
           8 ICON_NEXT_VALUE AS ICON HOTSPOT,
           11 ICON_TOTAL_RIGHT AS ICON HOTSPOT.
    WRITE:/5 ICON_COLUMN_LEFT AS ICON HOTSPOT,
           8 ICON_EQUAL AS ICON HOTSPOT,
           11 ICON_COLUMN_RIGHT AS ICON HOTSPOT,
           20 ICON_TRANSPORT AS ICON HOTSPOT, 'Escapadita'.
    WRITE:/5 ICON_TOTAL_LEFT AS ICON HOTSPOT,
           8 ICON_PREVIOUS_VALUE AS ICON HOTSPOT,
           11 ICON_TOTAL_RIGHT AS ICON HOTSPOT,
           20 ICON_LED_GREEN AS ICON HOTSPOT, 'Disparar charla'.
  ELSE.
    WRITE:/20 VIDAS, ICON_CUSTOMER AS ICON,
           35 TRANSP, ICON_TRANSPORT AS ICON,
           50 BALAS, ICON_LED_GREEN AS ICON,
           65 ROBOTS, ICON_MANAGER AS ICON,
           80 TURNOS, ICON_TIME_INA AS ICON.
  ENDIF.

*.Si es el fin de juego
  IF FIN_JUEGO = 'X'.
    PERFORM FIN_JUEGO.
  ENDIF.

ENDFORM.


**********************************************************
*.Movemos un objeto
**********************************************************
FORM MOVIMIENTO USING MOVX MOVY CHANGING COORX COORY.

*.Coordenadas X
  IF MOVX = '-' AND COORX > 1.
    COORX = COORX - 1.
  ENDIF.
  IF MOVX = '+' AND COORX < TOTX.
    COORX = COORX + 1.
  ENDIF.
*.Coordenada Y
  IF MOVY = '-' AND COORY > 1.
    COORY = COORY - 1.
  ENDIF.
  IF MOVY = '+' AND COORY < TOTY.
    COORY = COORY + 1.
  ENDIF.

ENDFORM.


**********************************************************
*.Bucle del juego
**********************************************************
FORM BUCLE_PRINCIPAL.

DATA: X,Y, CHOCA.

*--------------------------------
*.Creaci¾n de los ITEMS
*--------------------------------
  IF TURNOS_T = C_TUR.
    TURNOS_T = 0.
    PERFORM CREAR_ITEM.
  ENDIF.

*--------------------------------
*.Movemos la balas
*--------------------------------
  LOOP AT T_BALAS.
*...Miramos si choca
    CHOCA = ''.
    IF T_BALAS-XX = '+' AND T_BALAS-X = TOTX.
      CHOCA = 'X'.
    ENDIF.
    IF T_BALAS-XX = '-' AND T_BALAS-X = 1.
      CHOCA = 'X'.
    ENDIF.
    IF T_BALAS-YY = '+' AND T_BALAS-Y = TOTY.
      CHOCA = 'X'.
    ENDIF.
    IF T_BALAS-YY = '-' AND T_BALAS-Y = 1.
      CHOCA = 'X'.
    ENDIF.
*...Si no choca contra la pared
    IF CHOCA <> 'X'.
*.....Movemos
      PERFORM MOVIMIENTO USING T_BALAS-XX T_BALAS-YY
                               T_BALAS-X T_BALAS-Y.
*.....Miramos hemos dado a un malo
      READ TABLE T_MALOS WITH KEY X = T_BALAS-X
                                  Y = T_BALAS-Y.
      IF SY-SUBRC = 0.
*.......Borramos malo y bala
        DELETE T_MALOS INDEX SY-TABIX.
        DELETE T_BALAS.
        ROBOTS = ROBOTS - 1.
        IF ROBOTS = 0.
          FIN_JUEGO = 'X'.
        ENDIF.
*.....No ha dado a nadie, movemos
      ELSE.
        MODIFY T_BALAS.
      ENDIF.
*...Ha chocado.
    ELSE.
      DELETE T_BALAS.
    ENDIF.
  ENDLOOP.

*--------------------------------
*.Nos movemos nosotros
*--------------------------------
  PERFORM MOVIMIENTO USING MIR_X MIR_Y T_BUENO-X T_BUENO-Y.


*--------------------------------
*.Miramos si cogemos alg·n ITEM.
*--------------------------------
  READ TABLE T_ITEM WITH KEY X = T_BUENO-X Y = T_BUENO-Y.
  IF SY-SUBRC = 0.
    CASE T_ITEM-TIPO.
      WHEN 1.
        VIDAS = VIDAS + 1.
      WHEN 2.
        BALAS = BALAS + 1.
      WHEN 3.
        TRANSP = TRANSP + 1.
    ENDCASE.
    DELETE T_ITEM INDEX SY-TABIX.
  ENDIF.


*--------------------------------
*.Movemos a los malos
*--------------------------------
  LOOP AT T_MALOS.
    CLEAR: X,Y.
    IF T_MALOS-X < T_BUENO-X.
      X = '+'.
    ELSEIF T_MALOS-X > T_BUENO-X.
      X = '-'.
    ENDIF.
    IF T_MALOS-Y < T_BUENO-Y.
      Y = '+'.
    ELSEIF T_MALOS-Y > T_BUENO-Y.
      Y = '-'.
    ENDIF.
    PERFORM MOVIMIENTO USING X Y CHANGING T_MALOS-X T_MALOS-Y.
*...Miramos si nos han dado
    IF T_MALOS-X = T_BUENO-X AND T_MALOS-Y = T_BUENO-Y.
      IF VIDAS > 0.
        VIDAS = VIDAS - 1.
      ENDIF.
      ROBOTS = ROBOTS - 1.
      DELETE T_MALOS.
*.....Si nos han matado o hemos ganado
      IF VIDAS = 0 OR ROBOTS = 0.
        FIN_JUEGO = 'X'.
      ENDIF.
    ELSE.
*.....Ahora miramos si se ha chocado con una bala
      READ TABLE T_BALAS WITH KEY X = T_MALOS-X  Y = T_MALOS-Y.
      IF SY-SUBRC = 0.
*.......Borramos bala y malo
        ROBOTS = ROBOTS - 1.
        DELETE T_BALAS INDEX SY-TABIX.
        DELETE T_MALOS.
        IF ROBOTS = 0.
          FIN_JUEGO = 'X'.
        ENDIF.
      ELSE.
        MODIFY T_MALOS.
      ENDIF.
    ENDIF.
  ENDLOOP.

*.Movemos el turno
  TURNOS = TURNOS + 1.
  TURNOS_T = TURNOS_T + 1.
*.Imprimimos
  PERFORM DIBUJA_PANTALLA.

ENDFORM.


**********************************************************
*.Transportarse
**********************************************************
FORM TRANSPORTE.

  IF TRANSP > 0.
*....Posici¾n aleatoria
     PERFORM ALEATORIO CHANGING T_BUENO-X T_BUENO-Y.
*....Bucle principal
     TRANSP = TRANSP - 1.
     PERFORM BUCLE_PRINCIPAL.
  ENDIF.

ENDFORM.


**********************************************************
*.Disparo
**********************************************************
FORM DISPARO.

  IF BALAS > 0.
*....Creamos la bala
     T_BALAS-X = T_BUENO-X.
     T_BALAS-Y = T_BUENO-Y.
     T_BALAS-XX = MIR_X.
     T_BALAS-YY = MIR_Y.
*....Movemos una posici¾n la bala
     PERFORM MOVIMIENTO USING MIR_X MIR_Y CHANGING T_BALAS-X T_BALAS-Y.
*....Miramos hemos dado a un malo
     READ TABLE T_MALOS WITH KEY X = T_BALAS-X
                                 Y = T_BALAS-Y.
     IF SY-SUBRC = 0.
*......Borramos malo y bala
       DELETE T_MALOS INDEX SY-TABIX.
       ROBOTS = ROBOTS - 1.
       IF ROBOTS = 0.
         FIN_JUEGO = 'X'.
       ENDIF.
     ELSE.
       APPEND T_BALAS.
     ENDIF.
*....Bucle principal
     BALAS = BALAS - 1.
     CLEAR: MIR_X, MIR_Y.
     PERFORM BUCLE_PRINCIPAL.
  ENDIF.

ENDFORM.


**********************************************************
*.Damos unas X e Y aleatorias
**********************************************************
FORM ALEATORIO CHANGING X Y.

DATA: AUX LIKE DATATYPE-INTEGER2.
*.La posici¾n X
  CALL FUNCTION 'RANDOM_I2'
    EXPORTING
      RND_MIN   = 1
      RND_MAX   = TOTX
    IMPORTING
      RND_VALUE = AUX.
  X = AUX.
  CALL FUNCTION 'RANDOM_I2'
    EXPORTING
      RND_MIN   = 1
      RND_MAX   = TOTY
    IMPORTING
      RND_VALUE = AUX.
  Y = AUX.

ENDFORM.

**********************************************************
*.Creaci¾n de un ITEM
**********************************************************
FORM CREAR_ITEM.

  PERFORM ALEATORIO CHANGING T_ITEM-X T_ITEM-Y.
  CALL FUNCTION 'RANDOM_I2'
    EXPORTING
      RND_MIN   = 1
      RND_MAX   = 3
    IMPORTING
      RND_VALUE = T_ITEM-TIPO.
  APPEND T_ITEM.

ENDFORM.


**********************************************************
*.Introducci¾n
**********************************************************
FORM INTRODUCCION.

DATA: STRAUX(100),
      STRAUX2(35),
      STRAUX3(70).

  SKIP.
  ULINE:/10(100).
  STRAUX+32 = 'E L  + L T I M O  P R O G R A M A D O R'.
  WRITE:/10 STRAUX COLOR COL_HEADING.
  ULINE:/10(100).
  FORMAT COLOR OFF.
  SKIP 2.
  WRITE:/15 'En el a±o 2003, un programador avanzado a su tiempo se'
       ,' ha levantado contra el poder'.
  WRITE:/10 'establecido mediante una cruel dictadura por los'
       ,'consultores.'.
  SKIP.
  WRITE:/15 'El estß solo pero no tiene miedo de nada. Estß dispuesto'
       ,'a que los dias glosorios de la'.
  WRITE:/10 'programaci¾n retornen para siempre'.
  SKIP 2.
  ULINE:/10(100).
  STRAUX2+5 = 'I N S T R U C C I O N E S'.
  WRITE:/10 STRAUX2 COLOR COL_HEADING.
  SKIP.
  WRITE:/15 'Manejas al ·ltimo programador', ICON_CUSTOMER AS ICON,
   'debes evitar que los malvados consultores', ICON_MANAGER AS ICON,
   'te capturen'.
  WRITE:/10 'y eliminarlos uno a uno mediante las explicaciones',
    'tÚcnicas', ICON_LED_GREEN AS ICON, '. Para cumplir esta difÝcil'.
  WRITE:/10 'misi¾n, puedes contar con las escapaditas para fumar un',
    'cigarrito', ICON_TRANSPORT AS ICON, 'que te permitiran'.
  WRITE:/10 'transportarte a un punto aleatorio de la oficina.'.
  SKIP 2.
  ULINE:/10(100).
  CLEAR STRAUX2.
  STRAUX2+5 = 'I T E M S'.
  WRITE:/10 STRAUX2 COLOR COL_HEADING.
  SKIP.
  WRITE:/15 'Para ayudarte en la misi¾n, lo miembros del foro de SAP,',
    'te mandan paquetes para ayudarte'.
  WRITE:/10 'Estos paquete son:'.
  SKIP.
  WRITE:/15 ICON_PM_PRESS AS ICON, 'Nos proporciona una vida extra'.
  WRITE:/15 ICON_BIW_INFO_CUBE AS ICON, 'Una charla tÚcnica mßs'.
  WRITE:/15 ICON_TRANSPORT AS ICON, 'Una escapadita extra'.
  SKIP 2.
  STRAUX3+14 = 'Haz doble click para empezar, S U E R T E'.
  WRITE:/25 STRAUX3 COLOR COL_NORMAL.

ENDFORM.


**********************************************************
*.Fin de juego
**********************************************************
FORM FIN_JUEGO.

*.Perdimos
  IF VIDAS = 0.
    SKIP.
    ULINE:/27(54).
    WRITE:/27 '|', 'La ·ltima esperanza de los programadores ha caido.',
           80 '|'.
    WRITE:/27 '|', 'Las futuras generaciones de PRs seguirßn siendo',
           80 '|'.
    WRITE:/27 '|', 'esclavizadas por los malevolos CONSULTORES',
           80 '|'.
    WRITE:/27 '|', 'y limitadas a contratos por obra y servicio.',
           80 '|'.
    WRITE:/27 '|', 80 '|'.
    WRITE:/27 '|', '                 G A M E  O V E R', 80 '|'.
    ULINE:/27(54).
*.GANAMOS !!!
  ELSE.
    SKIP.
    ULINE:/27(54).
    WRITE:/27 '|', 'La opresi¾n ha finalizado, se acab¾ la esclavitud',
           80 '|'.
    WRITE:/27 '|', 'Hoy es un gran dÝa, la liberaci¾n de los PRs es un',
           80 '|'.
    WRITE:/27 '|', 'hecho, hoy se han igualado los sueldos de los PRs',
           80 '|'.
    WRITE:/27 '|', 'con los de los consultores y se ha aceptado la',
           80 '|'.
    WRITE:/27 '|', 'creaci¾n de un sindicato. Es un dÝa feliz', 80 '|'.
    WRITE:/27 '|', 80 '|'.
    WRITE:/27 '|', '                 G A M E  O V E R', 80 '|'.
    ULINE:/27(54).

  ENDIF.

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