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

Buscar

Traducir

Amazon

MARBLE PDF Imprimir E-mail
Usar puntuación: / 0
MaloBueno 
Código fuente - Juegos
Escrito por Administrator   
Domingo, 12 de Octubre de 2008 07:36
 *&---------------------------------------------------------------------* *& Report  ZTEST_NP_MARBLE *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT  ZTEST_NP_MARBLE NO STANDARD PAGE HEADING. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* * I N C L U D E *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* INCLUDE <ICON>.  *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* * D A T A   D E F I N I T I O N *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* *....Types TYPES: BEGIN OF TY_SCORE,        SRL   TYPE I,        UNAME TYPE SY-UNAME,        SCORE TYPE I,        TIME  TYPE I,        END   OF TY_SCORE. *....Internal Tables DATA: BEGIN OF ITAB OCCURS 0,       C1,  C2,  C3,       C4,  C5,  C6,       C7,  C8,  C9,       END   OF ITAB. DATA: BEGIN OF IT_PRINT OCCURS 0,       C1(4), C2(4), C3(4),       C4(4), C5(4), C6(4),       C7(4), C8(4), C9(4),       END   OF IT_PRINT. DATA: IT_SCORE TYPE STANDARD TABLE OF TY_SCORE. *....Work Areas DATA: WA_ITAB  LIKE ITAB,       WA_PRINT LIKE IT_PRINT,       W_SCORE  TYPE TY_SCORE. *....Globle Variables DATA: L_NO_M      TYPE I,       L_NO_S      TYPE I,       L_NO_C      TYPE CHAR10,       L_HALF      TYPE I,       L_HALF_HALF TYPE I,       L_PRINT     TYPE FLAG,       L_NAME      TYPE CHAR20,       L_MOD       TYPE I. DATA: W_ON        TYPE FLAG,       W_SEL_LINE  TYPE I,       W_SEL_COL   TYPE CHAR1,       W_DEST_OK   TYPE FLAG,       W_DEST_LINE TYPE I,       W_DEST_COL  TYPE CHAR1,       W_FIELD     TYPE CHAR20,       W_LINE      TYPE I,       W_GAME_OVER TYPE FLAG,       W_TOTAL     TYPE I,       W_REM       TYPE I,       W_GONE      TYPE I,       W_ST_TIME   TYPE I,       W_END_TIME  TYPE I,       W_EXPORTED  TYPE FLAG. *....Field symbols FIELD-SYMBOLS: <F> TYPE ANY. *....Constants CONSTANTS: ICON_0(40) TYPE C VALUE ICON_WD_RADIO_BUTTON_EMPTY,            ICON_1(40) TYPE C VALUE ICON_RADIOBUTTON,            ICON_2(40) TYPE C VALUE ICON_COLOR. *.. Some systems don't have above listed ICONs You can use: **....Constants *CONSTANTS: ICON_0(40) TYPE C VALUE ICON_AVERAGE,      " ICON_WD_RADIO_BUTTON_EMPTY, *           ICON_1(40) TYPE C VALUE ICON_POSITIVE,     " ICON_RADIOBUTTON, *           ICON_2(40) TYPE C VALUE ICON_COLOR.  *....Ranges RANGES: R_NOT_GREY FOR ABDOCMODE-FLAG. *....Macros DEFINE CONV_I_C.   &2 = &1.   CONDENSE &2. END-OF-DEFINITION.  *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* * S E L E C T I O N   S C R E E N *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* PARAMETERS: P_NUM TYPE I DEFAULT 7. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* * A T   S E L E C T I O N - S C R E E N . *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* AT SELECTION-SCREEN.   IF  P_NUM GT 9   OR  P_NUM LT 5.     MESSAGE E398(00) WITH 'Currently allowed only: 5, 7, 9'.   ENDIF.   L_MOD = P_NUM MOD 2.   IF L_MOD = 0.     MESSAGE E398(00) WITH 'Only odd numbers are allowed'.   ENDIF. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* * S T A R T   O F   S E L E C T I O N *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* START-OF-SELECTION.   GET TIME FIELD W_ST_TIME.   PERFORM FILL_MARBLES.   PERFORM FILL_PRINT_TABLE.   PERFORM WRITE_MARBLES. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* * A T   L I N E   S E L E C T I O N *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* AT LINE-SELECTION.   GET CURSOR FIELD W_FIELD.   PERFORM CALCULATE_MARBLES.   PERFORM FILL_PRINT_TABLE.   SY-LSIND = 0.   PERFORM WRITE_MARBLES.   PERFORM CHECK_GAME_OVER. *&---------------------------------------------------------------------* *&      Form  fill_marbles *&---------------------------------------------------------------------* *       Fillup the initial table for the marbles *----------------------------------------------------------------------* FORM FILL_MARBLES . * Grey cells   L_HALF = FLOOR( P_NUM / 2 ).   L_HALF_HALF = L_HALF / 2.   R_NOT_GREY-SIGN   = 'I'.   R_NOT_GREY-OPTION = 'BT'.   R_NOT_GREY-LOW  = ( L_HALF - L_HALF_HALF ) + 1.   R_NOT_GREY-HIGH = ( L_HALF + L_HALF_HALF ) - 1.   APPEND R_NOT_GREY.   CLEAR  R_NOT_GREY. * Filling up the table   DO P_NUM TIMES.     L_NO_M = SY-INDEX.     NEW-LINE.     DO P_NUM TIMES.       L_NO_S = SY-INDEX.       CLEAR: L_PRINT.       IF L_NO_M IN R_NOT_GREY.         L_PRINT = 'X'.       ENDIF.       IF L_NO_S IN R_NOT_GREY.         L_PRINT = 'X'.       ENDIF.       IF L_PRINT = 'X'.         CONV_I_C L_NO_S L_NO_C.         CONCATENATE 'WA_ITAB-C' L_NO_C INTO L_NAME.         ASSIGN (L_NAME) TO <F>.         IF  L_NO_S = L_HALF         AND L_NO_M = L_HALF.           <F> = '0'.           W_TOTAL = W_TOTAL - 1.         ELSE.           <F> = '1'.           W_TOTAL = W_TOTAL + 1.         ENDIF.       ELSE.         WRITE: ' '.       ENDIF.     ENDDO.     APPEND WA_ITAB TO ITAB.     CLEAR  WA_ITAB.   ENDDO.   W_REM = W_TOTAL. ENDFORM.                    " fill_marbles *&---------------------------------------------------------------------* *&      Form  fill_print_Table *&---------------------------------------------------------------------* *       Convert ITAB value to PRINT table value . *----------------------------------------------------------------------* FORM FILL_PRINT_TABLE .   FIELD-SYMBOLS: <F1> TYPE ANY.   REFRESH IT_PRINT.   LOOP AT ITAB INTO WA_ITAB.     L_NO_M = SY-INDEX.     DO P_NUM TIMES.       CONV_I_C SY-INDEX L_NO_C.       CLEAR L_NAME.       CONCATENATE 'WA_ITAB-C' L_NO_C INTO L_NAME.       ASSIGN (L_NAME) TO <F>.       CLEAR L_NAME.       CONCATENATE 'WA_PRINT-C' L_NO_C INTO L_NAME.       ASSIGN (L_NAME) TO <F1>.       CASE <F>.         WHEN '1'.           <F1> = ICON_1.         WHEN '0'.           <F1> = ICON_0.         WHEN '2'.           <F1> = ICON_2.         WHEN OTHERS.       ENDCASE.     ENDDO.     APPEND WA_PRINT TO IT_PRINT.     CLEAR  WA_PRINT.   ENDLOOP. ENDFORM.                    " fill_print_Table *&---------------------------------------------------------------------* *&      Form  write_marbles *&---------------------------------------------------------------------* *       Write marbles from the PRINT table *----------------------------------------------------------------------* FORM WRITE_MARBLES .   FIELD-SYMBOLS: <F1> TYPE ANY.   IF W_GAME_OVER IS INITIAL.     LOOP AT IT_PRINT INTO WA_PRINT.       SKIP 1.       W_LINE = SY-TABIX.       WRITE: (2) W_LINE.       HIDE  W_LINE.       DO P_NUM TIMES.         CONV_I_C SY-INDEX L_NO_C.         CLEAR L_NAME.         CONCATENATE 'WA_PRINT-C' L_NO_C INTO L_NAME.         ASSIGN (L_NAME) TO <F1>.         IF NOT <F1> IS INITIAL.           WRITE: (2) <F1> AS ICON HOTSPOT ON, (2) ' '.         ELSE.           WRITE: (2) ' ', (2) ' '.         ENDIF.       ENDDO.     ENDLOOP.   ENDIF.   SKIP 4.   WRITE: /(30) 'Total Marbles:',    W_TOTAL.   WRITE: /(30) 'Remaining Marbles', W_REM.   SKIP 4.   PERFORM WRITE_5_HIGH_SCORE. ENDFORM.                    " write_marbles *&---------------------------------------------------------------------* *&      Form  calculate_marbles *&---------------------------------------------------------------------* *       Calculate the marbles after the user input in line selection *----------------------------------------------------------------------* FORM CALCULATE_MARBLES . * No marble has been selected   IF W_ON IS INITIAL.     PERFORM VALIDATE_INPUT.   ELSE. * remove the seleced marble     PERFORM DESELECT_MARBLE.     IF W_ON = 'X'. *     Check destination cell, if the same marble has not been selected       PERFORM CHECK_DESTINATION.     ENDIF.   ENDIF. * Destination is ok ..? rearrange the marbles in ITAB   IF W_DEST_OK = 'X'.     PERFORM REARRANGE_MARBLES.   ENDIF. ENDFORM.                    " calculate_marbles *&---------------------------------------------------------------------* *&      Form  validate_input *&---------------------------------------------------------------------* *       Validating the selected marble, is it movable or not *       if marble is movable, highlight it *----------------------------------------------------------------------* FORM VALIDATE_INPUT .   DATA: L_SEL_FIELD(20),         L_TMP_FIELD(20),         L_SEL_COL(1),         L_TMP_COL(2),         L_TMP_LINE TYPE I,         L_OK TYPE FLAG.   FIELD-SYMBOLS: <F1> TYPE ANY,                  <F2> TYPE ANY.   READ TABLE ITAB INTO WA_ITAB INDEX W_LINE.   L_SEL_FIELD = W_FIELD.   L_SEL_COL   = W_FIELD+10(1).   REPLACE 'PRINT' INTO L_SEL_FIELD WITH 'ITAB'.   CONDENSE L_SEL_FIELD.   ASSIGN (L_SEL_FIELD) TO <F1>. * value = 0 >> No marble   IF <F1> = '0'.     MESSAGE S398(00) WITH 'No marble to select.!'.     EXIT.   ENDIF. * Check right   L_TMP_COL = L_SEL_COL + 2.   IF L_TMP_COL < 9.     CONCATENATE 'WA_ITAB-C' L_TMP_COL INTO L_TMP_FIELD.     CONDENSE L_TMP_FIELD.     ASSIGN (L_TMP_FIELD) TO <F2>.     IF <F2> = '0'.       L_OK = 'X'.     ENDIF.   ENDIF. * Check left   IF L_OK IS INITIAL.     L_TMP_COL = L_SEL_COL - 2.     IF L_TMP_COL > 0.       CONCATENATE 'WA_ITAB-C' L_TMP_COL INTO L_TMP_FIELD.       CONDENSE L_TMP_FIELD.       ASSIGN (L_TMP_FIELD) TO <F2>.       IF <F2> = '0'.         L_OK = 'X'.       ENDIF.     ENDIF.   ENDIF. * check Above   IF L_OK IS INITIAL.     L_TMP_LINE = W_LINE - 2.     IF L_TMP_LINE > 0.       READ TABLE ITAB INTO WA_ITAB INDEX L_TMP_LINE.       IF <F1> = '0'.         L_OK = 'X'.       ENDIF.       READ TABLE ITAB INTO WA_ITAB INDEX W_LINE.     ENDIF.   ENDIF. * Check underneath   IF L_OK IS INITIAL.     L_TMP_LINE = W_LINE + 2.     IF L_TMP_LINE < 9.       READ TABLE ITAB INTO WA_ITAB INDEX L_TMP_LINE.       IF <F1> = '0'.         L_OK = 'X'.       ENDIF.       READ TABLE ITAB INTO WA_ITAB INDEX W_LINE.     ENDIF.   ENDIF. * Ok .. than ON   IF L_OK = 'X'.     W_ON = 'X'.     <F1> = '2'.     MODIFY ITAB FROM WA_ITAB INDEX W_LINE.     W_SEL_LINE = W_LINE.     W_SEL_COL  = L_SEL_COL .   ELSE.     MESSAGE S398(00) WITH 'No marble to select.!' ' ' ' ' ' '.   ENDIF. ENDFORM.                    " validate_input *&---------------------------------------------------------------------* *&      Form  deselect_marble *&---------------------------------------------------------------------* *       Deselect the marble if the same marble is selected again *----------------------------------------------------------------------* FORM DESELECT_MARBLE .   DATA: L_SEL_FIELD(20).   FIELD-SYMBOLS: <F1> TYPE ANY.   READ TABLE ITAB INTO WA_ITAB INDEX W_LINE.   L_SEL_FIELD = W_FIELD.   REPLACE 'PRINT' INTO L_SEL_FIELD WITH 'ITAB'.   CONDENSE L_SEL_FIELD.   ASSIGN (L_SEL_FIELD) TO <F1>.   IF <F1> = '2'.     <F1> = '1'.     MODIFY ITAB FROM WA_ITAB INDEX W_LINE.     MESSAGE S398(00) WITH 'Marble was deselected..!!'.     CLEAR: W_ON, W_SEL_LINE, W_SEL_COL.   ENDIF. ENDFORM.                    " deselect_marble *&---------------------------------------------------------------------* *&      Form  check_destination *&---------------------------------------------------------------------* *       Check the destination cell, it should not be empty and distnce *       between selected cell and destination cell must be 2 *----------------------------------------------------------------------* FORM CHECK_DESTINATION .   DATA: L_DEST_FIELD(20),         L_DEST_COL(1),         L_DEST_NOT_OK TYPE FLAG,         L_TMP_LINE TYPE I,         L_TMP_COL  TYPE C.   DATA: L_ITAB_DEST LIKE ITAB.   FIELD-SYMBOLS: <F1> TYPE ANY.   READ TABLE ITAB INTO L_ITAB_DEST INDEX W_LINE.   L_DEST_FIELD = W_FIELD.   L_DEST_COL   = W_FIELD+10(1).   REPLACE 'WA_PRINT' INTO L_DEST_FIELD WITH 'L_ITAB_DEST'.   CONDENSE L_DEST_FIELD.   ASSIGN (L_DEST_FIELD) TO <F1>. * Destination should be empty   IF <F1> <> '0'.     L_DEST_NOT_OK = 'X'.   ENDIF. * Calcualate the distance between selected marble and destination   IF L_DEST_NOT_OK IS INITIAL.     IF W_SEL_LINE <> W_LINE.       L_TMP_LINE = ABS( W_SEL_LINE - W_LINE ).       IF L_TMP_LINE <> '2'.         L_DEST_NOT_OK = 'X'.       ENDIF.     ENDIF.   ENDIF.   IF L_DEST_NOT_OK IS INITIAL.     IF W_SEL_COL <> L_DEST_COL.       L_TMP_COL = ABS( W_SEL_COL - L_DEST_COL ).       IF L_TMP_COL <> '2'.         L_DEST_NOT_OK = 'X'.       ENDIF.     ENDIF.   ENDIF. * destination not ok   IF L_DEST_NOT_OK = 'X'.     MESSAGE S398(00) WITH 'Destination is not GOOD' ' ' ' ' ' '.   ELSE.     W_DEST_OK = 'X'.     W_DEST_LINE = W_LINE.     W_DEST_COL  = L_DEST_COL.   ENDIF. ENDFORM.                    " check_destination *&---------------------------------------------------------------------* *&      Form  rearrange_marbles *&---------------------------------------------------------------------* *       Rearrange marbles *     1 Remove the marble which is inbetween the selected & destination *     2 Remove the marble from the selected cell *     3 Put marble on the destination cell *----------------------------------------------------------------------* FORM REARRANGE_MARBLES .   DATA: L_FIELD(20),         L_TMP_LINE TYPE I,         L_TMP_COL  TYPE CHAR1,         L_NO_MOVE  TYPE FLAG,         L_ITAB LIKE ITAB.    FIELD-SYMBOLS: <F1> TYPE ANY. * Make the inbetween column as 0 if both lines are same   IF W_SEL_LINE = W_DEST_LINE.     IF W_SEL_COL > W_DEST_COL.       L_TMP_COL = W_DEST_COL + 1.     ELSE.       L_TMP_COL = W_SEL_COL + 1.     ENDIF.     READ TABLE ITAB INTO L_ITAB INDEX W_SEL_LINE.     L_FIELD = W_FIELD.     REPLACE 'WA_PRINT' INTO L_FIELD WITH 'L_ITAB'.     CONDENSE L_FIELD.     L_FIELD+8(1) = L_TMP_COL.     ASSIGN (L_FIELD) TO <F1>.     IF <F1> = 1.       <F1> = '0'.       W_GONE = W_GONE + 1.       MODIFY ITAB FROM L_ITAB INDEX W_SEL_LINE.     ELSE.       L_NO_MOVE = 'X'.     ENDIF.     CLEAR  L_ITAB.   ENDIF. * Make the inbetween line as 0 if both lines are same   IF W_SEL_COL = W_DEST_COL.     IF W_SEL_LINE > W_DEST_LINE.       L_TMP_LINE = W_DEST_LINE + 1.     ELSE.       L_TMP_LINE = W_SEL_LINE + 1.     ENDIF.     READ TABLE ITAB INTO L_ITAB INDEX L_TMP_LINE.     L_FIELD = W_FIELD.     REPLACE 'WA_PRINT' INTO L_FIELD WITH 'L_ITAB'.     CONDENSE L_FIELD.     L_FIELD+8(1) = W_SEL_COL.     ASSIGN (L_FIELD) TO <F1>.     IF <F1> = 1.       <F1> = '0'.       W_GONE = W_GONE + 1.       MODIFY ITAB FROM L_ITAB INDEX L_TMP_LINE.     ELSE.       L_NO_MOVE = 'X'.     ENDIF.     CLEAR  L_ITAB.   ENDIF.   IF L_NO_MOVE IS INITIAL. *   Make Destination = 1     READ TABLE ITAB INTO L_ITAB INDEX W_DEST_LINE.     L_FIELD = W_FIELD.     REPLACE 'WA_PRINT' INTO L_FIELD WITH 'L_ITAB'.     CONDENSE L_FIELD.     L_FIELD+8(1) = W_DEST_COL.     ASSIGN (L_FIELD) TO <F1>.     <F1> = '1'.     MODIFY ITAB FROM L_ITAB INDEX W_DEST_LINE.     CLEAR  L_ITAB. *   Make Selected = 0.     READ TABLE ITAB INTO L_ITAB INDEX W_SEL_LINE.     L_FIELD = W_FIELD.     REPLACE 'WA_PRINT' INTO L_FIELD WITH 'L_ITAB'.     CONDENSE L_FIELD.     L_FIELD+8(1) = W_SEL_COL.     ASSIGN (L_FIELD) TO <F1>.     <F1> = '0'.     MODIFY ITAB FROM L_ITAB INDEX W_SEL_LINE.     CLEAR  L_ITAB.   ELSE. *   Make Selected = 1 when no movement     READ TABLE ITAB INTO L_ITAB INDEX W_SEL_LINE.     L_FIELD = W_FIELD.     REPLACE 'WA_PRINT' INTO L_FIELD WITH 'L_ITAB'.     CONDENSE L_FIELD.     L_FIELD+8(1) = W_SEL_COL.     ASSIGN (L_FIELD) TO <F1>.     <F1> = '1'.     MODIFY ITAB FROM L_ITAB INDEX W_SEL_LINE.     CLEAR  L_ITAB.   ENDIF.   W_REM = W_TOTAL - W_GONE.   CLEAR: W_DEST_OK, W_DEST_LINE, W_DEST_COL,          W_ON,      W_SEL_LINE,  W_SEL_COL.  ENDFORM.                    " rearrange_marbles *&---------------------------------------------------------------------* *&      Form  check_game_over *&---------------------------------------------------------------------* *       Check game over when the remaining marbles are half than *         the original marbles. Check for all cells with the marbles and *         check adjacent cells (right, left, above and underneath cells) *         with the value. If the marble found in any adjacent cell than *         GAME is NOT OVER *----------------------------------------------------------------------* FORM CHECK_GAME_OVER .   STATICS: L_TOT_HALF TYPE I.   DATA: L_ITAB     LIKE ITAB,         L_ITAB_TMP LIKE ITAB.   DATA: L_TMP_FIELD(20),         L_SEL_COL(1),         L_TMP_COL(2),         L_OK       TYPE FLAG,         L_LINE     TYPE I,         L_TMP_LINE TYPE I.   CLEAR: L_OK.   FIELD-SYMBOLS: <F1> TYPE ANY,                  <F2> TYPE ANY.   CHECK W_ON IS INITIAL.   L_TOT_HALF = ABS( W_TOTAL / 2 ).   CHECK W_REM < L_TOT_HALF.   LOOP AT ITAB INTO L_ITAB.     L_LINE = SY-TABIX.     L_ITAB_TMP = L_ITAB.     DO P_NUM TIMES.       L_ITAB = L_ITAB_TMP.       L_SEL_COL = SY-INDEX.       CONV_I_C SY-INDEX L_NO_C.       CLEAR L_NAME.       CONCATENATE 'L_ITAB-C' L_NO_C INTO L_NAME.       ASSIGN (L_NAME) TO <F1>.       IF <F1> IS INITIAL       OR <F1> = '0'.         CONTINUE.       ENDIF. *      IF <F1> = '1'. *        l_ok = 'X'. *        exit. *      ENDIF. *     right neighbour       L_TMP_COL = L_SEL_COL + 1.       IF L_TMP_COL < 9.         CONCATENATE 'L_ITAB-C' L_TMP_COL INTO L_TMP_FIELD.         CONDENSE L_TMP_FIELD.         ASSIGN (L_TMP_FIELD) TO <F2>.         IF <F2> = '1'.           L_TMP_COL = L_SEL_COL + 2.           IF L_TMP_COL < 9.             CONCATENATE 'L_ITAB-C' L_TMP_COL INTO L_TMP_FIELD.             CONDENSE L_TMP_FIELD.             ASSIGN (L_TMP_FIELD) TO <F2>.             IF <F2> = '0'.               L_OK = 'X'.               EXIT.             ENDIF.           ENDIF.         ENDIF.       ENDIF. *     Check left       L_TMP_COL = L_SEL_COL - 1.       IF L_TMP_COL > 0.         CONCATENATE 'L_ITAB-C' L_TMP_COL INTO L_TMP_FIELD.         CONDENSE L_TMP_FIELD.         ASSIGN (L_TMP_FIELD) TO <F2>.         IF <F2> = '1'.           L_TMP_COL = L_SEL_COL - 2.           IF L_TMP_COL > 0.             CONCATENATE 'L_ITAB-C' L_TMP_COL INTO L_TMP_FIELD.             CONDENSE L_TMP_FIELD.             ASSIGN (L_TMP_FIELD) TO <F2>.             IF <F2> = '0'.               L_OK = 'X'.               EXIT.             ENDIF.           ENDIF.         ENDIF.       ENDIF.       CONCATENATE 'L_ITAB-C' L_NO_C INTO L_TMP_FIELD.       CONDENSE L_TMP_FIELD.       ASSIGN (L_TMP_FIELD) TO <F2>. *     check Above       L_TMP_LINE = L_LINE - 1.       IF L_TMP_LINE > 0.         CLEAR L_ITAB.         READ TABLE ITAB INTO L_ITAB INDEX L_TMP_LINE.         IF <F2> = '1'.           L_TMP_LINE = L_LINE - 2.           IF L_TMP_LINE > 0.             CLEAR L_ITAB.             READ TABLE ITAB INTO L_ITAB INDEX L_TMP_LINE.             IF <F2> = '0'.               L_OK = 'X'.               EXIT.             ENDIF.           ENDIF.         ENDIF.       ENDIF. *     Check underneath       L_TMP_LINE = L_LINE + 1.       IF L_TMP_LINE < 9.         CLEAR L_ITAB.         READ TABLE ITAB INTO L_ITAB INDEX L_TMP_LINE.         IF <F2> = '1'.           L_TMP_LINE = L_LINE + 2.           IF L_TMP_LINE < 9.             CLEAR L_ITAB.             READ TABLE ITAB INTO L_ITAB INDEX L_TMP_LINE.             IF <F2> = '0'.               L_OK = 'X'.               EXIT.             ENDIF.           ENDIF.         ENDIF.       ENDIF.     ENDDO.     IF L_OK = 'X'.       EXIT.     ENDIF.   ENDLOOP.   IF L_OK IS INITIAL.     W_GAME_OVER = 'X'.     MESSAGE S398(00) WITH 'Game Over. Socre:' W_REM.     PERFORM EXPORT_HIGH_SCORE. *    leave program.   ENDIF. ENDFORM.                    " check_game_over *&---------------------------------------------------------------------* *&      Form  export_high_score *&---------------------------------------------------------------------* *       Export High Score to memory when the game is over *----------------------------------------------------------------------* FORM EXPORT_HIGH_SCORE .   DATA: L_TIME TYPE I.   CHECK W_EXPORTED IS INITIAL.   GET TIME FIELD W_END_TIME.   L_TIME = W_END_TIME - W_ST_TIME.   W_SCORE-UNAME = SY-UNAME.   W_SCORE-SCORE = W_REM.   W_SCORE-TIME  = L_TIME.   APPEND W_SCORE TO IT_SCORE.   SORT IT_SCORE BY SCORE TIME.   LOOP AT IT_SCORE INTO W_SCORE.     W_SCORE-SRL = SY-TABIX.     MODIFY IT_SCORE FROM W_SCORE.     CLEAR  W_SCORE.   ENDLOOP.   DELETE IT_SCORE WHERE SRL > 5.   EXPORT IT_SCORE = IT_SCORE TO DATABASE INDX(ZZ)          ID 'ZGAME_MAR'.   W_EXPORTED = 'X'. ENDFORM.                    " export_high_score *&---------------------------------------------------------------------* *&      Form  write_5_high_score *&---------------------------------------------------------------------* *       Write 5 high scores *----------------------------------------------------------------------* FORM WRITE_5_HIGH_SCORE .   IMPORT IT_SCORE = IT_SCORE FROM DATABASE INDX(ZZ)          ID 'ZGAME_MAR'.   WRITE: /(12) 'User',           (10) 'Score' RIGHT-JUSTIFIED ,           (10) 'Time'  RIGHT-JUSTIFIED.   WRITE: /(34) SY-ULINE.   LOOP AT IT_SCORE INTO W_SCORE.     WRITE: /(12) W_SCORE-UNAME,             (10) W_SCORE-SCORE,             (10) W_SCORE-TIME.   ENDLOOP. ENDFORM.                    " write_5_high_score 
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