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.
|