ABAP开发 扫雷小游戏
ABAP语言主要是服务于SAP的业务开发,虽然和JAVA类似,但是局限性比较大,开发游戏这类逻辑复杂的项目的话,相对比较繁琐
闲时尝试着拿ABAP开发一款Windows的扫雷小游戏,打发无聊...直接复制代码就能使用
REPORT ZGAME_SAOLEI.DATA GV_OKCODE TYPE SY-UCOMM .
DATA: SELECT TYPE C LENGTH 20 ,"选择难度TIME TYPE C LENGTH 10,SHENGYU TYPE I .DATA GV_INDEX TYPE N LENGTH 2 .
DATA: GV_ROW TYPE I ,"行数GV_COL TYPE I ,"列数GV_LEI TYPE C LENGTH 3,"雷的个数GV_LEI_DO TYPE C LENGTH 3."雷的个数DATA: GV_RANDNUMMAX TYPE I,GV_RANDNUM TYPE I.DATA: BEGIN OF GT_POS OCCURS 0,ROW TYPE C LENGTH 2,COL TYPE C LENGTH 2,END OF GT_POS .
*DATA GT_MAIN TYPE TABLE OF ZTEST_TABLE.
*DATA GS_MAIN TYPE ZTEST_TABLE.DATA GO_TIMER TYPE REF TO CL_GUI_TIMER . "时间控制DATA GT_FIELDCAT TYPE LVC_T_FCAT. "fieldcat
DATA GT_FIELDCAT_MAIN TYPE SLIS_T_FIELDCAT_ALV. "fieldcat
DATA GS_FIELDCAT_MAIN TYPE SLIS_FIELDCAT_ALV. "fieldcat
DATA GT_FIELDCAT_MAIN2 TYPE LVC_T_FCAT. "fieldcat
DATA GS_FIELDCAT TYPE LVC_S_FCAT. "fieldcat 工作区DATA GV_FIELDCAT TYPE C LENGTH 20 .
DATA GV_COLN TYPE C LENGTH 20 .
FIELD-SYMBOLS: <FT_TB> TYPE STANDARD TABLE , " 动态内表<FS_TB> TYPE ANY , " 工作区<DYN_TBFIELD> TYPE ANY , "动态内表字段<DYN_MAIN> TYPE ANY . "主表字段
FIELD-SYMBOLS: <FS_CELL> TYPE LVC_S_STYL .
DATA GT_CELL TYPE LVC_T_STYL .
DATA GS_CELL TYPE LVC_S_STYL .
DATA GV_POS TYPE I .
DEFINE __BUILDFIELDCAT. "宏 构建fieldcatCLEAR GS_FIELDCAT .GV_POS = GV_POS + 1.GS_FIELDCAT-FIELDNAME = &1.GS_FIELDCAT-SCRTEXT_L = &2.GS_FIELDCAT-OUTPUTLEN = 4.APPEND GS_FIELDCAT TO GT_FIELDCAT .END-OF-DEFINITION."ALV DEFINE
DATA: GS_LAYOUT TYPE LVC_S_LAYO,GO_DOCKING TYPE REF TO CL_GUI_DOCKING_CONTAINER,GO_PARENT TYPE REF TO CL_GUI_CUSTOM_CONTAINER,GO_ALV_GRID TYPE REF TO CL_GUI_ALV_GRID .DATA:BEGIN OF GT_MAIN OCCURS 0 ,FLD_01 TYPE C LENGTH 4,FLD_02 TYPE C LENGTH 4,FLD_03 TYPE C LENGTH 4,FLD_04 TYPE C LENGTH 4,FLD_05 TYPE C LENGTH 4,FLD_06 TYPE C LENGTH 4,FLD_07 TYPE C LENGTH 4,FLD_08 TYPE C LENGTH 4,FLD_09 TYPE C LENGTH 4,FLD_10 TYPE C LENGTH 4,FLD_11 TYPE C LENGTH 4,FLD_12 TYPE C LENGTH 4,FLD_13 TYPE C LENGTH 4,FLD_14 TYPE C LENGTH 4,FLD_15 TYPE C LENGTH 4,FLD_16 TYPE C LENGTH 4,FLD_17 TYPE C LENGTH 4,FLD_18 TYPE C LENGTH 4,FLD_19 TYPE C LENGTH 4,FLD_20 TYPE C LENGTH 4,CELLBTN TYPE LVC_T_STYL,
END OF GT_MAIN .
DATA GT_DATABASE LIKE GT_MAIN OCCURS 0.
DATA GS_DATABASE LIKE LINE OF GT_DATABASE .CLASS LCL_EVENT_RECEIVER DEFINITION DEFERRED .
DATA EVENT_HANDLER TYPE REF TO LCL_EVENT_RECEIVER .CLASS LCL_EVENT_RECEIVER DEFINITION.PUBLIC SECTION .METHODS: HANDLE_BUTTON_CLICK FOR EVENT BUTTON_CLICKOF CL_GUI_ALV_GRIDIMPORTING ES_COL_IDES_ROW_NO,HANDLE_TIMER FOR EVENT FINISHED OF CL_GUI_TIMER.
ENDCLASS .CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.
*BUTTON_CLICK.METHOD HANDLE_BUTTON_CLICK.PERFORM FM_BUTTON_CLICK USING ES_COL_IDES_ROW_NO.ENDMETHOD.METHOD HANDLE_TIMER.CALL METHOD CL_GUI_CFW=>SET_NEW_OK_CODEEXPORTINGNEW_CODE = 'RFSH'.CALL METHOD GO_TIMER->RUN "EXCEPTIONSOTHERS = 9.ENDMETHOD. "handle_timer
ENDCLASS .CONSTANTS:GC_SURE TYPE C LENGTH 5 VALUE 'START',GC_LOW TYPE C LENGTH 3 VALUE 'LOW',GC_MEDIUM TYPE C LENGTH 6 VALUE 'MEDIUM',GC_HIGH TYPE C LENGTH 4 VALUE 'HIGH',GC_MAST TYPE C LENGTH 4 VALUE 'MAST',GC_OK TYPE C LENGTH 2 VALUE 'OK',GC_EXIT TYPE C LENGTH 4 VALUE 'EXIT',GC_BACK TYPE C LENGTH 4 VALUE 'BACK',GC_CANCEL TYPE C LENGTH 6 VALUE 'CANCEL'.
*INCLUDE ZGAME_SAOLEITOP.
*INCLUDE ZGAME_SAOLEISCR.
*INCLUDE ZGAME_SAOLEICLS.
*INCLUDE ZGAME_SAOLEII01.
*INCLUDE ZGAME_SAOLEIO01.
*INCLUDE ZGAME_SAOLEIF01.
*INCLUDE ZGAME_SAOLEIF02.START-OF-SELECTION .
CALL SCREEN 0100 .PERFORM INIT_TIMER_PROGRESS.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.SET PF-STATUS 'STATUS_100'.SET TITLEBAR '难度选择'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.CASE GV_OKCODE.WHEN GC_SURE.PERFORM BUILS_DYTABLE .CALL SCREEN 200 STARTING AT 30 2ENDING AT 145 30.WHEN GC_CANCEL OR GC_BACK.LEAVE TO SCREEN 0 .WHEN GC_LOW.SELECT = '10*10 雷数 10'.WHEN GC_MEDIUM.SELECT = '16*16 雷数 40'.WHEN GC_HIGH.SELECT = '16*13 雷数 99'.WHEN GC_MAST.SELECT = '20*20 雷数 150'.WHEN OTHERS.ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module STATUS_0200 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE STATUS_0200 OUTPUT.SET PF-STATUS 'STATUS_0200'.SET TITLEBAR '游戏界面'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0200 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0200 INPUT.CASE GV_OKCODE.WHEN GC_OK.WHEN GC_EXIT.LEAVE PROGRAM .WHEN 'NEXT'.WHEN OTHERS.ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Form BUILS_DYTABLE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM BUILS_DYTABLE .DATA LV_LEN TYPE I .GV_ROW = SELECT+0(2).GV_COL = SELECT+3(2).LV_LEN = STRLEN( SELECT ).SHENGYU = GV_ROW * GV_COL .IF LV_LEN EQ 11.GV_LEI = SELECT+9(2).ELSE.GV_LEI = SELECT+9(3).ENDIF.IF GO_PARENT IS BOUND.CALL METHOD GO_ALV_GRID->freeEXCEPTIONScntl_system_error = 1cntl_error = 2.CALL METHOD GO_PARENT->freeEXCEPTIONScntl_system_error = 1cntl_error = 2.IF sy-subrc <> 0.MESSAGE a000(db).ENDIF.CLEAR EVENT_HANDLER .ENDIF.PERFORM GET_DATA . "获得主数据PERFORM BUILD_FIELDCAT . "构建动态fieldcatPERFORM BUILD_DYNAMIC_TABLE."构建动态内表PERFORM ADD_DATA. "向动态内表添加数据ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM GET_DATA .CLEAR: GT_POS, GV_RANDNUMMAX .GV_RANDNUMMAX = GV_ROW.DATA LT_POS LIKE GT_POS OCCURS 0 ."根据雷的个数随机确定雷的位置 横坐标GV_LEI_DO = GV_LEI .PERFORM SET_POS_LEI .ENDFORM.
*&---------------------------------------------------------------------*
*& Form BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM BUILD_FIELDCAT .DATA LV_INDEX TYPE N LENGTH 2 .CLEAR GT_FIELDCAT[] .DO GV_ROW TIMES.LV_INDEX = SY-INDEX .CONCATENATE 'FLD_' LV_INDEX INTO GV_FIELDCAT .__BUILDFIELDCAT GV_FIELDCAT LV_INDEX .ENDDO.ENDFORM.
*&---------------------------------------------------------------------*
*& Form BUILD_DYNAMIC_TABLE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM BUILD_DYNAMIC_TABLE .DATA LT_DYTABLE TYPE REF TO DATA.DATA LS_DYTABLE TYPE REF TO DATA.CLEAR: LT_DYTABLE ,LS_DYTABLE .CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLEEXPORTING
* I_STYLE_TABLE =IT_FIELDCATALOG = GT_FIELDCAT
* I_LENGTH_IN_BYTE =IMPORTINGEP_TABLE = LT_DYTABLE
* E_STYLE_FNAME =EXCEPTIONSGENERATE_SUBPOOL_DIR_FULL = 1OTHERS = 2.IF SY-SUBRC <> 0.
* Implement suitable error handling hereENDIF.IF <FT_TB> IS ASSIGNED.UNASSIGN <FT_TB>.UNASSIGN <FS_TB>.ENDIF.ASSIGN LT_DYTABLE->* TO <FT_TB> .CREATE DATA LS_DYTABLE LIKE LINE OF <FT_TB>.ASSIGN LS_DYTABLE->* TO <FS_TB> .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form ADD_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM ADD_DATA .DATA LV_TABIX TYPE N LENGTH 2.DATA LV_INDEX TYPE N LENGTH 2.DATA LV_FIELDCAT TYPE C LENGTH 10.DATA LS_POS LIKE LINE OF GT_POS .DO GV_COL TIMES.APPEND INITIAL LINE TO <FT_TB> .ENDDO.LOOP AT GT_POS INTO DATA(GS_POS).MOVE-CORRESPONDING GS_POS TO LS_POS .IF LS_POS-COL < 10.LV_TABIX = '0' && LS_POS-COL .ELSE.LV_TABIX = LS_POS-COL .ENDIF.CONCATENATE 'FLD_' LV_TABIX INTO LV_FIELDCAT .ASSIGN COMPONENT LV_FIELDCAT OF STRUCTURE <FS_TB> TO <DYN_TBFIELD>.IF SY-SUBRC EQ 0.<DYN_TBFIELD> = '9' .ENDIF.AT END OF ROW .MODIFY <FT_TB> FROM <FS_TB> INDEX LS_POS-ROW.CLEAR <FS_TB> .ENDAT .ENDLOOP.DATA LV_FRO TYPE N LENGTH 2.DATA LV_AFT TYPE N LENGTH 2.DATA LV_ROW TYPE I .DO GV_ROW TIMES.LV_ROW = SY-INDEX .DO GV_COL TIMES.READ TABLE <FT_TB> ASSIGNING FIELD-SYMBOL(<FS_TAB>) INDEX LV_ROW .LV_TABIX = SY-INDEX .CONCATENATE 'FLD_' LV_TABIX INTO LV_FIELDCAT .IF <DYN_TBFIELD> IS ASSIGNED.UNASSIGN <DYN_TBFIELD> .ENDIF.ASSIGN COMPONENT LV_FIELDCATOF STRUCTURE <FS_TAB> TO <DYN_TBFIELD>.IF SY-SUBRC EQ 0 AND <DYN_TBFIELD> EQ 9 .CLEAR LV_FRO .LV_FRO = LV_TABIX - 1 .CONCATENATE 'FLD_' LV_FRO INTO LV_FIELDCAT .IF <DYN_TBFIELD> IS ASSIGNED.UNASSIGN <DYN_TBFIELD> .ENDIF.ASSIGN COMPONENT LV_FIELDCATOF STRUCTURE <FS_TAB> TO <DYN_TBFIELD>.IF SY-SUBRC EQ 0 AND <DYN_TBFIELD> NE 9 .<DYN_TBFIELD> = <DYN_TBFIELD> + 1 .ENDIF.SY-SUBRC = 0 .CLEAR LV_AFT .LV_AFT = LV_TABIX + 1 .CONCATENATE 'FLD_' LV_AFT INTO LV_FIELDCAT .IF <DYN_TBFIELD> IS ASSIGNED.UNASSIGN <DYN_TBFIELD> .ENDIF.ASSIGN COMPONENT LV_FIELDCATOF STRUCTURE <FS_TAB> TO <DYN_TBFIELD>.IF SY-SUBRC EQ 0 AND <DYN_TBFIELD> NE 9 .<DYN_TBFIELD> = <DYN_TBFIELD> + 1 .ENDIF.SY-SUBRC = 0 ." 读取以雷为中心的上面三行数据的值LV_INDEX = LV_ROW - 1 .READ TABLE <FT_TB> ASSIGNING <FS_TAB> INDEX LV_INDEX.IF SY-SUBRC EQ 0.CONCATENATE 'FLD_' LV_TABIX INTO LV_FIELDCAT .IF <DYN_TBFIELD> IS ASSIGNED.UNASSIGN <DYN_TBFIELD> .ENDIF.ASSIGN COMPONENT LV_FIELDCATOF STRUCTURE <FS_TAB> TO <DYN_TBFIELD>.IF SY-SUBRC EQ 0 AND <DYN_TBFIELD> NE 9 .<DYN_TBFIELD> = <DYN_TBFIELD> + 1 .ENDIF.SY-SUBRC = 0 .CLEAR LV_FRO .LV_FRO = LV_TABIX - 1 .CONCATENATE 'FLD_' LV_FRO INTO LV_FIELDCAT .IF <DYN_TBFIELD> IS ASSIGNED.UNASSIGN <DYN_TBFIELD> .ENDIF.ASSIGN COMPONENT LV_FIELDCATOF STRUCTURE <FS_TAB> TO <DYN_TBFIELD>.IF SY-SUBRC EQ 0 AND <DYN_TBFIELD> NE 9 .<DYN_TBFIELD> = <DYN_TBFIELD> + 1 .ENDIF.SY-SUBRC = 0 .CLEAR LV_AFT .LV_AFT = LV_TABIX + 1 .CONCATENATE 'FLD_' LV_AFT INTO LV_FIELDCAT .IF <DYN_TBFIELD> IS ASSIGNED.UNASSIGN <DYN_TBFIELD> .ENDIF.ASSIGN COMPONENT LV_FIELDCATOF STRUCTURE <FS_TAB> TO <DYN_TBFIELD>.IF SY-SUBRC EQ 0 AND <DYN_TBFIELD> NE 9 .<DYN_TBFIELD> = <DYN_TBFIELD> + 1 .ENDIF.ENDIF.SY-SUBRC = 0 ."读取以雷为中心下面三行的数据LV_INDEX = LV_ROW + 1.READ TABLE <FT_TB> ASSIGNING <FS_TAB> INDEX LV_INDEX.IF SY-SUBRC = 0 .CONCATENATE 'FLD_' LV_TABIX INTO LV_FIELDCAT .IF <DYN_TBFIELD> IS ASSIGNED.UNASSIGN <DYN_TBFIELD> .ENDIF.ASSIGN COMPONENT LV_FIELDCATOF STRUCTURE <FS_TAB> TO <DYN_TBFIELD>.IF SY-SUBRC EQ 0 AND <DYN_TBFIELD> NE 9 .<DYN_TBFIELD> = <DYN_TBFIELD> + 1 .ENDIF.SY-SUBRC = 0 .CLEAR LV_FRO .LV_FRO = LV_TABIX - 1 .CONCATENATE 'FLD_' LV_FRO INTO LV_FIELDCAT .IF <DYN_TBFIELD> IS ASSIGNED.UNASSIGN <DYN_TBFIELD> .ENDIF.ASSIGN COMPONENT LV_FIELDCATOF STRUCTURE <FS_TAB> TO <DYN_TBFIELD>.IF SY-SUBRC EQ 0 AND <DYN_TBFIELD> NE 9 .<DYN_TBFIELD> = <DYN_TBFIELD> + 1 .ENDIF.SY-SUBRC = 0 .CLEAR LV_AFT .LV_AFT = LV_TABIX + 1 .CONCATENATE 'FLD_' LV_AFT INTO LV_FIELDCAT .IF <DYN_TBFIELD> IS ASSIGNED.UNASSIGN <DYN_TBFIELD> .ENDIF.ASSIGN COMPONENT LV_FIELDCATOF STRUCTURE <FS_TAB> TO <DYN_TBFIELD>.IF SY-SUBRC EQ 0 AND <DYN_TBFIELD> NE 9 .<DYN_TBFIELD> = <DYN_TBFIELD> + 1 .ENDIF.ENDIF.SY-SUBRC = 0 .ENDIF.ENDDO.ENDDO.ENDFORM.
*&---------------------------------------------------------------------*
*& Form FM_BUTTON_CLICK
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> ES_COL_ID
*& --> ES_ROW_NO
*&---------------------------------------------------------------------*
FORM FM_BUTTON_CLICK USING PS_COL_ID TYPE LVC_S_COLPS_ROW_NO TYPE LVC_S_ROID.DATA: LV_END_TIME TYPE I ,LV_COST_TIME TYPE I,LV_TIME TYPE C LENGTH 5,LV_START_TIME TYPE I VALUE 0 ."计时器 记录游戏时间GET RUN TIME FIELD LV_END_TIME.LV_COST_TIME = ( LV_END_TIME - LV_START_TIME ) / 1000000 .LV_TIME = LV_COST_TIME .CONCATENATE LV_TIME 'S' INTO TIME .DATA LV_FIELDNAME TYPE C LENGTH 6 .DATA LV_NUM TYPE N LENGTH 2 .DATA LV_UP TYPE N LENGTH 2 .DATA LV_DOW TYPE N LENGTH 2 .
*返回行号LV_DOW = LV_UP = PS_ROW_NO-ROW_ID .CLEAR GS_DATABASE.READ TABLE GT_DATABASE INTO GS_DATABASE INDEX PS_ROW_NO-ROW_ID .ASSIGN COMPONENT PS_COL_ID-FIELDNAMEOF STRUCTURE GS_DATABASE TO <DYN_TBFIELD> .IF <DYN_TBFIELD> EQ 9.PERFORM GAME_OVER .RETURN .ENDIF."递归找最上面的一行PERFORM GET_UPROW USING PS_ROW_NO-ROW_IDPS_COL_ID-FIELDNAMECHANGING LV_UP."递归找最下面的一行PERFORM GET_DOWROW USING PS_ROW_NO-ROW_IDPS_COL_ID-FIELDNAMECHANGING LV_DOW."从最上面一行到最下面一行向左向右去找CLEAR GS_DATABASE .WHILE LV_UP <= LV_DOW.READ TABLE GT_DATABASE INTO GS_DATABASE INDEX LV_UP .ASSIGN COMPONENT PS_COL_ID-FIELDNAMEOF STRUCTURE GS_DATABASE TO <DYN_TBFIELD> .IF <DYN_TBFIELD> NE 9 ."向左递归,找第一个不为空的区域LV_NUM = PS_COL_ID-FIELDNAME+4(2) .PERFORM GET_LEFT USING LV_UPCHANGING LV_NUM ."向右递归,找第一个不为空的区域LV_NUM = PS_COL_ID-FIELDNAME+4(2) .PERFORM GET_RIGHT USING LV_UPCHANGING LV_NUM .SHENGYU = SHENGYU + 1 .ENDIF.LV_UP = LV_UP + 1 .ENDWHILE.CALL METHOD CL_GUI_CFW=>SET_NEW_OK_CODEEXPORTINGNEW_CODE = 'NEXT'.ENDFORM.
*&---------------------------------------------------------------------*
*& Module INITALV_0200 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE INITALV_0200 OUTPUT.IF GO_PARENT IS NOT BOUND.CREATE OBJECT GO_PARENTEXPORTING
* PARENT =CONTAINER_NAME = 'CON01'
* STYLE =
* LIFETIME = lifetime_default
* REPID =
* DYNNR =
* NO_AUTODEF_PROGID_DYNNR =EXCEPTIONSCNTL_ERROR = 1CNTL_SYSTEM_ERROR = 2CREATE_ERROR = 3LIFETIME_ERROR = 4LIFETIME_DYNPRO_DYNPRO_LINK = 5OTHERS = 6.IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.ENDIF.CREATE OBJECT GO_ALV_GRIDEXPORTING
* I_SHELLSTYLE = 0
* I_LIFETIME =I_PARENT = GO_PARENT
* I_APPL_EVENTS = SPACE
* I_PARENTDBG =
* I_APPLOGPARENT =
* I_GRAPHICSPARENT =
* I_NAME =
* I_FCAT_COMPLETE = SPACE
* O_PREVIOUS_SRAL_HANDLER =EXCEPTIONSERROR_CNTL_CREATE = 1ERROR_CNTL_INIT = 2ERROR_CNTL_LINK = 3ERROR_DP_CREATE = 4OTHERS = 5.IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.ENDIF.PERFORM SETEDIT_CELL .MOVE-CORRESPONDING <FT_TB>[] TO GT_DATABASE[] .DO GV_ROW TIMES.APPEND INITIAL LINE TO GT_MAIN .ENDDO.LOOP AT GT_MAIN .MOVE-CORRESPONDING GT_CELL[] TO GT_MAIN-CELLBTN[] .MODIFY GT_MAIN .ENDLOOP.CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'EXPORTINGI_PROGRAM_NAME = SY-REPIDI_INTERNAL_TABNAME = 'GT_MAIN'
* I_STRUCTURE_NAME =I_CLIENT_NEVER_DISPLAY = 'X'I_INCLNAME = SY-REPID
* I_BYPASSING_BUFFER =
* I_BUFFER_ACTIVE =CHANGINGCT_FIELDCAT = GT_FIELDCAT_MAIN[]EXCEPTIONSINCONSISTENT_INTERFACE = 1PROGRAM_ERROR = 2OTHERS = 3.IF SY-SUBRC <> 0.
* Implement suitable error handling hereENDIF.LOOP AT GT_FIELDCAT_MAIN INTO GS_FIELDCAT_MAIN.CLEAR GS_FIELDCAT .
* MOVE-CORRESPONDING GS_MFIELDCAT TO GS_FIELDCAT_RESUME .GS_FIELDCAT-COL_POS = GS_FIELDCAT_MAIN-COL_POS .GS_FIELDCAT-FIELDNAME = GS_FIELDCAT_MAIN-FIELDNAME .GS_FIELDCAT-SCRTEXT_L = GS_FIELDCAT_MAIN-SELTEXT_L.GS_FIELDCAT-SCRTEXT_M = GS_FIELDCAT_MAIN-SELTEXT_M.GS_FIELDCAT-SCRTEXT_S = GS_FIELDCAT_MAIN-SELTEXT_S.CASE GS_FIELDCAT-FIELDNAME.WHEN 'FLD_01' OR 'FLD_02'OR 'FLD_03' OR 'FLD_04' OR 'FLD_05'OR 'FLD_06' OR 'FLD_07' OR 'FLD_08' OR 'FLD_09' OR 'FLD_10'OR 'FLD_12' OR 'FLD_13' OR 'FLD_14' OR 'FLD_15' OR 'FLD_16'OR 'FLD_17' OR 'FLD_18' OR 'FLD_19' OR 'FLD_20' OR 'FLD_11'.IF GS_FIELDCAT-FIELDNAME+4(2) > GV_COL.GS_FIELDCAT-NO_OUT = 'X'.ENDIF.CASE GS_FIELDCAT-FIELDNAME+4(2).WHEN '01'.PERFORM SET_SCRTEXT USING '01'.WHEN '02'.PERFORM SET_SCRTEXT USING '02'.WHEN '03'.PERFORM SET_SCRTEXT USING '03'.WHEN '04'.PERFORM SET_SCRTEXT USING '04'.WHEN '05'.PERFORM SET_SCRTEXT USING '05'.WHEN '06'.PERFORM SET_SCRTEXT USING '06'.WHEN '07'.PERFORM SET_SCRTEXT USING '07'.WHEN '08'.PERFORM SET_SCRTEXT USING '08'.WHEN '09'.PERFORM SET_SCRTEXT USING '09'.WHEN '10'.PERFORM SET_SCRTEXT USING '10'.WHEN '11'.PERFORM SET_SCRTEXT USING '11'.WHEN '12'.PERFORM SET_SCRTEXT USING '12'.WHEN '13'.PERFORM SET_SCRTEXT USING '13'.WHEN '14'.PERFORM SET_SCRTEXT USING '14'.WHEN '15'.PERFORM SET_SCRTEXT USING '15'.WHEN '16'.PERFORM SET_SCRTEXT USING '16'.WHEN '17'.PERFORM SET_SCRTEXT USING '17'.WHEN '18'.PERFORM SET_SCRTEXT USING '18'.WHEN '19'.PERFORM SET_SCRTEXT USING '19'.WHEN '20'.PERFORM SET_SCRTEXT USING '20'.WHEN OTHERS.ENDCASE.GS_FIELDCAT-OUTPUTLEN = 3.WHEN OTHERS.ENDCASE.APPEND GS_FIELDCAT TO GT_FIELDCAT_MAIN2 .ENDLOOP.GS_LAYOUT-STYLEFNAME = 'CELLBTN'.CREATE OBJECT EVENT_HANDLER .SET HANDLER EVENT_HANDLER->HANDLE_BUTTON_CLICK FOR GO_ALV_GRID .CALL METHOD GO_ALV_GRID->SET_TABLE_FOR_FIRST_DISPLAYEXPORTING
* I_BUFFER_ACTIVE =
* I_BYPASSING_BUFFER =
* I_CONSISTENCY_CHECK =
* I_STRUCTURE_NAME =
* IS_VARIANT =
* I_SAVE =
* I_DEFAULT = 'X'IS_LAYOUT = GS_LAYOUT
* IS_PRINT =
* IT_SPECIAL_GROUPS =
* IT_TOOLBAR_EXCLUDING =
* IT_HYPERLINK =
* IT_ALV_GRAPHICS =
* IT_EXCEPT_QINFO =
* IR_SALV_ADAPTER =CHANGINGIT_OUTTAB = GT_MAIN[]IT_FIELDCATALOG = GT_FIELDCAT_MAIN2
* IT_SORT =
* IT_FILTER =EXCEPTIONSINVALID_PARAMETER_COMBINATION = 1PROGRAM_ERROR = 2TOO_MANY_LINES = 3OTHERS = 4.IF SY-SUBRC <> 0.
* Implement suitable error handling hereENDIF.ELSE.PERFORM REFRESH_ALV USING GO_ALV_GRID.ENDIF.
ENDMODULE.
FORM SETEDIT_CELL .DATA LS_CELL TYPE LVC_S_STYL .LS_CELL-MAXLEN = 10 .LS_CELL-FIELDNAME = 'FLD_01'.LS_CELL-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_BUTTON.INSERT LS_CELL INTO TABLE GT_CELL .CLEAR LS_CELL .LS_CELL-MAXLEN = 10 .LS_CELL-FIELDNAME = 'FLD_02'.LS_CELL-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_BUTTON.INSERT LS_CELL INTO TABLE GT_CELL .CLEAR LS_CELL .LS_CELL-MAXLEN = 10 .LS_CELL-FIELDNAME = 'FLD_03'.LS_CELL-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_BUTTON.INSERT LS_CELL INTO TABLE GT_CELL .CLEAR LS_CELL .LS_CELL-MAXLEN = 10 .LS_CELL-FIELDNAME = 'FLD_04'.LS_CELL-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_BUTTON.INSERT LS_CELL INTO TABLE GT_CELL .CLEAR LS_CELL .LS_CELL-MAXLEN = 10 .LS_CELL-FIELDNAME = 'FLD_05'.LS_CELL-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_BUTTON.INSERT LS_CELL INTO TABLE GT_CELL .CLEAR LS_CELL .LS_CELL-MAXLEN = 10 .LS_CELL-FIELDNAME = 'FLD_06'.LS_CELL-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_BUTTON.INSERT LS_CELL INTO TABLE GT_CELL .CLEAR LS_CELL .LS_CELL-MAXLEN = 10 .LS_CELL-FIELDNAME = 'FLD_07'.LS_CELL-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_BUTTON.INSERT LS_CELL INTO TABLE GT_CELL .CLEAR LS_CELL .LS_CELL-MAXLEN = 10 .LS_CELL-FIELDNAME = 'FLD_08'.LS_CELL-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_BUTTON.INSERT LS_CELL INTO TABLE GT_CELL .CLEAR LS_CELL .LS_CELL-MAXLEN = 10 .LS_CELL-FIELDNAME = 'FLD_09'.LS_CELL-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_BUTTON.INSERT LS_CELL INTO TABLE GT_CELL .CLEAR LS_CELL .LS_CELL-MAXLEN = 10 .LS_CELL-FIELDNAME = 'FLD_10'.LS_CELL-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_BUTTON.INSERT LS_CELL INTO TABLE GT_CELL .CLEAR LS_CELL .LS_CELL-MAXLEN = 10 .LS_CELL-FIELDNAME = 'FLD_11'.LS_CELL-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_BUTTON.INSERT LS_CELL INTO TABLE GT_CELL .CLEAR LS_CELL .LS_CELL-MAXLEN = 10 .LS_CELL-FIELDNAME = 'FLD_12'.LS_CELL-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_BUTTON.INSERT LS_CELL INTO TABLE GT_CELL .CLEAR LS_CELL .LS_CELL-MAXLEN = 10 .LS_CELL-FIELDNAME = 'FLD_13'.LS_CELL-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_BUTTON.INSERT LS_CELL INTO TABLE GT_CELL .CLEAR LS_CELL .LS_CELL-MAXLEN = 10 .LS_CELL-FIELDNAME = 'FLD_14'.LS_CELL-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_BUTTON.INSERT LS_CELL INTO TABLE GT_CELL .CLEAR LS_CELL .LS_CELL-MAXLEN = 10 .LS_CELL-FIELDNAME = 'FLD_15'.LS_CELL-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_BUTTON.INSERT LS_CELL INTO TABLE GT_CELL .CLEAR LS_CELL .LS_CELL-MAXLEN = 10 .LS_CELL-FIELDNAME = 'FLD_16'.LS_CELL-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_BUTTON.INSERT LS_CELL INTO TABLE GT_CELL .CLEAR LS_CELL .LS_CELL-MAXLEN = 10 .LS_CELL-FIELDNAME = 'FLD_17'.LS_CELL-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_BUTTON.INSERT LS_CELL INTO TABLE GT_CELL .CLEAR LS_CELL .LS_CELL-MAXLEN = 10 .LS_CELL-FIELDNAME = 'FLD_18'.LS_CELL-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_BUTTON.INSERT LS_CELL INTO TABLE GT_CELL .CLEAR LS_CELL .LS_CELL-MAXLEN = 10 .LS_CELL-FIELDNAME = 'FLD_19'.LS_CELL-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_BUTTON.INSERT LS_CELL INTO TABLE GT_CELL .CLEAR LS_CELL .LS_CELL-MAXLEN = 10 .LS_CELL-FIELDNAME = 'FLD_20'.LS_CELL-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_BUTTON.INSERT LS_CELL INTO TABLE GT_CELL .CLEAR LS_CELL .ENDFORM.
*&---------------------------------------------------------------------*
*& Form SET_SCRTEXT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> P_
*&---------------------------------------------------------------------*
FORM SET_SCRTEXT USING P_TXT TYPE CHAR2.GS_FIELDCAT-SCRTEXT_L = GS_FIELDCAT-SCRTEXT_M= GS_FIELDCAT-SCRTEXT_S = P_TXT.ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_UPROW
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> PS_ROW_NO_ROW_ID
*&---------------------------------------------------------------------*
FORM GET_UPROW USING VALUE(P_ROW_ID)VALUE(P_FIELDNAME)CHANGING P_UPROW.IF P_UPROW < 1.P_UPROW = 1 .RETURN .ENDIF.READ TABLE GT_DATABASE INTO GS_DATABASE INDEX P_ROW_ID .IF <DYN_TBFIELD> IS ASSIGNED.UNASSIGN <DYN_TBFIELD> .ENDIF.ASSIGN COMPONENT P_FIELDNAMEOF STRUCTURE GS_DATABASE TO <DYN_TBFIELD> .IF <DYN_TBFIELD> IS ASSIGNED.IF <DYN_TBFIELD> IS NOT INITIAL.RETURN .ENDIF.ENDIF.IF <DYN_TBFIELD> IS INITIAL.P_ROW_ID = P_ROW_ID - 1 .P_UPROW = P_UPROW - 1 .PERFORM GET_UPROW2 USING P_ROW_ID P_FIELDNAMECHANGING P_UPROW.ENDIF.ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_UPROW2
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> GET_UPROW
*& --> P_FIELDNAME
*&---------------------------------------------------------------------*
FORM GET_UPROW2 USING VALUE(P_ROW_ID)VALUE(P_FIELDNAME)CHANGING P_UPROW .IF P_UPROW < 1.P_UPROW = 1 .RETURN .ENDIF.READ TABLE GT_DATABASE INTO GS_DATABASE INDEX P_ROW_ID .IF <DYN_TBFIELD> IS ASSIGNED.UNASSIGN <DYN_TBFIELD> .ENDIF.ASSIGN COMPONENT P_FIELDNAMEOF STRUCTURE GS_DATABASE TO <DYN_TBFIELD> .IF <DYN_TBFIELD> IS ASSIGNED.IF <DYN_TBFIELD> IS NOT INITIAL.RETURN .ENDIF.ENDIF.IF <DYN_TBFIELD> IS INITIAL.P_ROW_ID = P_ROW_ID - 1 .P_UPROW = P_UPROW - 1 .PERFORM GET_UPROW USING P_ROW_ID P_FIELDNAMECHANGING P_UPROW.ENDIF.ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_DOWROW
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> PS_ROW_NO_ROW_ID
*& --> PS_COL_ID_FIELDNAME
*& <-- LV_DOW
*&---------------------------------------------------------------------*
FORM GET_DOWROW USING VALUE(P_ROW_ID)VALUE(P_FIELDNAME)CHANGING P_DOWROW.IF P_DOWROW > GV_ROW.P_DOWROW = GV_ROW.RETURN .ENDIF.READ TABLE GT_DATABASE INTO GS_DATABASE INDEX P_ROW_ID .IF <DYN_TBFIELD> IS ASSIGNED.UNASSIGN <DYN_TBFIELD> .ENDIF.ASSIGN COMPONENT P_FIELDNAMEOF STRUCTURE GS_DATABASE TO <DYN_TBFIELD> .IF <DYN_TBFIELD> IS ASSIGNED.IF <DYN_TBFIELD> IS NOT INITIAL.RETURN .ENDIF.ENDIF.IF <DYN_TBFIELD> IS INITIAL.P_ROW_ID = P_ROW_ID + 1 .P_DOWROW = P_DOWROW + 1 .PERFORM GET_DOWROW2 USING P_ROW_ID P_FIELDNAMECHANGING P_DOWROW.ENDIF.ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_DOWROW2
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> P_ROW_ID
*& --> P_FIELDNAME
*& <-- P_DOWROW
*&---------------------------------------------------------------------*
FORM GET_DOWROW2 USING VALUE(P_ROW_ID)VALUE(P_FIELDNAME)CHANGING P_DOWROW.IF P_DOWROW > GV_ROW.P_DOWROW = GV_ROW.RETURN .ENDIF.READ TABLE GT_DATABASE INTO GS_DATABASE INDEX P_ROW_ID .IF <DYN_TBFIELD> IS ASSIGNED.UNASSIGN <DYN_TBFIELD> .ENDIF.ASSIGN COMPONENT P_FIELDNAMEOF STRUCTURE GS_DATABASE TO <DYN_TBFIELD> .IF <DYN_TBFIELD> IS ASSIGNED.IF <DYN_TBFIELD> IS NOT INITIAL.RETURN .ENDIF.ENDIF.IF <DYN_TBFIELD> IS INITIAL.P_ROW_ID = P_ROW_ID + 1 .P_DOWROW = P_DOWROW + 1 .PERFORM GET_DOWROW2 USING P_ROW_ID P_FIELDNAMECHANGING P_DOWROW.ENDIF.ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_LEFT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& <-- PS_COL_ID_FIELDNAME+4(2)
*&---------------------------------------------------------------------*
FORM GET_LEFT USING VALUE(P_INDX)CHANGING P_NUM LIKE GV_INDEX.DATA LV_FIELD TYPE C LENGTH 6 .CONCATENATE 'FLD_' P_NUM INTO LV_FIELD .IF P_NUM < 1.P_NUM = 1 .RETURN .ENDIF.IF <DYN_TBFIELD> IS ASSIGNED.UNASSIGN <DYN_TBFIELD> .ENDIF.IF <DYN_MAIN> IS ASSIGNED.UNASSIGN <DYN_MAIN> .ENDIF.READ TABLE GT_MAIN INDEX P_INDX .ASSIGN COMPONENT LV_FIELD OF STRUCTURE GS_DATABASE TO <DYN_TBFIELD>.ASSIGN COMPONENT LV_FIELD OF STRUCTURE GT_MAIN TO <DYN_MAIN> .IF <DYN_TBFIELD> IS INITIAL.P_NUM = P_NUM - 1 .SHENGYU = SHENGYU - 1 .DELETE TABLE GT_MAIN-CELLBTN[] WITH TABLE KEY FIELDNAME = LV_FIELD.IF SY-SUBRC EQ 0 .MODIFY GT_MAIN INDEX P_INDX.ENDIF.ELSEIF <DYN_TBFIELD> EQ 9 .RETURN .ELSE.<DYN_MAIN> = <DYN_TBFIELD> .SHENGYU = SHENGYU - 1 .DELETE TABLE GT_MAIN-CELLBTN[] WITH TABLE KEY FIELDNAME = LV_FIELD.MODIFY GT_MAIN INDEX P_INDX.RETURN .ENDIF.PERFORM GET_LEFT USING P_INDXCHANGING P_NUM .ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_RIGHT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& <-- LV_NUM
*&---------------------------------------------------------------------*
FORM GET_RIGHT USING P_INDXCHANGING P_NUM LIKE GV_INDEX.DATA LV_FIELD TYPE C LENGTH 6 .CONCATENATE 'FLD_' P_NUM INTO LV_FIELD .IF P_NUM > GV_COL.P_NUM = GV_COL .RETURN .ENDIF.IF <DYN_TBFIELD> IS ASSIGNED.UNASSIGN <DYN_TBFIELD> .ENDIF.IF <DYN_MAIN> IS ASSIGNED.UNASSIGN <DYN_MAIN> .ENDIF.READ TABLE GT_MAIN INDEX P_INDX .ASSIGN COMPONENT LV_FIELD OF STRUCTURE GS_DATABASE TO <DYN_TBFIELD>.ASSIGN COMPONENT LV_FIELD OF STRUCTURE GT_MAIN TO <DYN_MAIN> .IF <DYN_TBFIELD> IS INITIAL.P_NUM = P_NUM + 1 .SHENGYU = SHENGYU - 1 .DELETE TABLE GT_MAIN-CELLBTN WITH TABLE KEY FIELDNAME = LV_FIELD.MODIFY GT_MAIN INDEX P_INDX.ELSEIF <DYN_TBFIELD> EQ 9 .RETURN .ELSE.<DYN_MAIN> = <DYN_TBFIELD> .SHENGYU = SHENGYU - 1 .DELETE TABLE GT_MAIN-CELLBTN[] WITH TABLE KEY FIELDNAME = LV_FIELD.MODIFY GT_MAIN INDEX P_INDX.RETURN .ENDIF.PERFORM GET_RIGHT USING P_INDXCHANGING P_NUM.ENDFORM.
*&---------------------------------------------------------------------*
*& Form REFRESH_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> GO_ALV_GRID
*&---------------------------------------------------------------------*
FORM REFRESH_ALV USING PO_ALVGRID TYPE REF TO CL_GUI_ALV_GRID.DATA LS_STBL TYPE LVC_S_STBL."稳定刷新LS_STBL-ROW = 'X'." 基于行的稳定刷新LS_STBL-COL = 'X'." 基于列稳定刷新CALL METHOD PO_ALVGRID->REFRESH_TABLE_DISPLAYEXPORTINGIS_STABLE = LS_STBL.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form GAME_OVER
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM GAME_OVER .DATA LV_INDEX TYPE N LENGTH 2 .DATA LV_ROW TYPE N LENGTH 2 .DATA LV_FIELDNAME TYPE C LENGTH 6 .LOOP AT GT_DATABASE INTO GS_DATABASE.LV_ROW = SY-TABIX .READ TABLE GT_MAIN INDEX LV_ROW .DO GV_COL TIMES.LV_INDEX = SY-INDEX .CONCATENATE 'FLD_' LV_INDEX INTO LV_FIELDNAME .IF <DYN_TBFIELD> IS ASSIGNED.UNASSIGN <DYN_TBFIELD> .ENDIF.ASSIGN COMPONENT LV_FIELDNAMEOF STRUCTURE GS_DATABASE TO <DYN_TBFIELD> .IF <DYN_TBFIELD> EQ 9.ASSIGN COMPONENT LV_FIELDNAMEOF STRUCTURE GT_MAIN TO <DYN_MAIN>.IF SY-SUBRC EQ 0.<DYN_MAIN> = ICON_LED_RED .ENDIF.ENDIF.ENDDO.MODIFY GT_MAIN INDEX LV_ROW .ENDLOOP.PERFORM REFRESH_ALV USING GO_ALV_GRID.MESSAGE '游戏结束' TYPE 'I' .ENDFORM.
*&---------------------------------------------------------------------*
*& Form INIT_TIMER_PROGRESS
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM INIT_TIMER_PROGRESS .CHECK GO_TIMER IS INITIAL.CREATE OBJECT GO_TIMEREXCEPTIONSOTHERS = 9.CREATE OBJECT EVENT_HANDLER.SET HANDLER EVENT_HANDLER->HANDLE_TIMER FOR GO_TIMER.GO_TIMER->INTERVAL = 1.CALL METHOD GO_TIMER->RUN "¼EXCEPTIONSOTHERS = 9.ENDFORM.
*&---------------------------------------------------------------------*
*& Module EXIT INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE EXIT INPUT.CASE GV_OKCODE.WHEN GC_EXIT.LEAVE PROGRAM .WHEN OTHERS.ENDCASE.ENDMODULE.
*&---------------------------------------------------------------------*
*& Form SET_POS_LEI
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM SET_POS_LEI .DATA LV_LINES TYPE I ."根据雷的个数随机确定雷的位置 横坐标DO GV_LEI TIMES.CALL FUNCTION 'QF05_RANDOM_INTEGER'EXPORTINGRAN_INT_MAX = GV_RANDNUMMAXRAN_INT_MIN = 1IMPORTINGRAN_INT = GV_RANDNUMEXCEPTIONSINVALID_INPUT = 1OTHERS = 2.IF SY-SUBRC EQ 0.GT_POS-ROW = GV_RANDNUM .ENDIF."根据雷的个数随机确定雷的位置 纵坐标CLEAR: GV_RANDNUMMAX ,GV_RANDNUM.GV_RANDNUMMAX = GV_COL.CALL FUNCTION 'QF05_RANDOM_INTEGER'EXPORTINGRAN_INT_MAX = GV_RANDNUMMAXRAN_INT_MIN = 1IMPORTINGRAN_INT = GV_RANDNUMEXCEPTIONSINVALID_INPUT = 1OTHERS = 2.IF SY-SUBRC EQ 0.GT_POS-COL = GV_RANDNUM .ENDIF.APPEND GT_POS .ENDDO.SORT GT_POS BY ROW ASCENDING COL DESCENDING .DELETE ADJACENT DUPLICATES FROM GT_POS COMPARING ROW COL.DESCRIBE TABLE GT_POS LINES LV_LINES .IF SY-INDEX EQ GV_LEI AND LV_LINES < GV_LEI_DO.GV_LEI = GV_LEI_DO - LV_LINES .PERFORM SET_POS_LEI .ENDIF.ENDFORM.
ABAP开发 扫雷小游戏相关推荐
- 如何利用C#开发“扫雷”小游戏
本文详细说明了利用C#语言开发"扫雷"小游戏的开发过程.
- 如何开发一个扫雷小游戏?
如何用C#开发一个扫雷小游戏? 十分自豪的说,计算机编程就是变魔术,每一个coder都是一个魔术师. 初学C#的时候,我相信很多人都和我一样,学会了基本语法,掌握了基本的数据结构,也见过了不少微软提供 ...
- 【java游戏开发】教你用java做出扫雷小游戏
扫雷是一款大众类的益智小游戏.根据点击格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输. 本课程详细讲解一个扫雷游戏的开发过程.只要90分钟就可以完成一个你自己亲手开发出来的Java ...
- c语言小游戏 精简_C语言开发简易版扫雷小游戏
C 语言开发简易版扫雷小游戏 本文给大家分享的是一个使用 C 语言开发的命令行下的简易版扫雷小游戏, 本身没有什么太 多的技术含量, 只不过是笔者的处女作, 所以还是推荐给大家, 希望对大家学习 C ...
- 一个扫雷小游戏带你初识VUE3和typescript
一个扫雷小游戏带你初识VUE3和typescript 阅读本文你会了解到: vue3的部分新特性 typescript的基本使用 部分es6语法 基础部分 为什么要使用ref和reactive来声明变 ...
- Python【小游戏合集】之重温童年最爱的扫雷小游戏
导语: 哈喽吖!有许多铁汁们私信小编说用Python自行制作小游戏 之后简直就是上头了~让wo多出一点小游戏合集(看来铁汁们跟小编一样都酷爱游戏) 有求必应~小游戏立刻安排上啦~~(扫雷真的是 ...
- C语言大一课设 扫雷小游戏
目录 [题 目]扫雷小游戏 [项目简介] [总体功能结构流程图] 登录和注册流程图: 打印棋盘流程图: 计算周围雷的个数流程图: test.c game.h game.c 运行结果 (1)注册运 ...
- 在SAP GUI中玩扫雷小游戏
在GUI中玩扫雷小游戏 ABAP代码: *&---------------------------------------------------------------------* *&a ...
- 用C语言实现扫雷小游戏(附上思路+项目展示+源代码)
文章目录 前言 一.扫雷小游戏整体思路讲解. 二.game.c各游戏功能函数的讲解 1.InitBoard 初始化数组函数讲解 2.DisplayBoard 打印格子函数讲解 3.Setmine 电脑 ...
最新文章
- 牛客网:为什么不能将实数作为 HashMap 的 key?
- linux selenium_爬虫界又出神器|一款比selenium更高效的利器
- GridView 与ImageAdapter (笔记)
- Navicat客户端PostgreSQL连接报错:Could not connect to server:Connection refused(0x00002740/10061)
- 【elementUI】el-tree搜索时加载子节点对应父节点、父节点对应子节点树
- vs2017中编译提示一些系统头文件没有找到
- 226. Invert Binary Tree 翻转二叉树
- iOS开发 - App程序启动原理
- 私有GIT服务器的免密提交
- 哔哩哔哩公司swot分析_是时候颠覆你的SWOT营销分析法了!TOWS分析法可能更适合你...
- eclipse关闭js校验
- .net core 允许跨域
- fortran语言能用matlab,fortran语言与matlab
- samba服务端配置和客户端使用【含windows共享文件到linux】
- 秋意浓(2018.9.28)
- Linux 下使用Trickle限制下载/上传带宽
- 纯css画梯形,纯CSS3实现的梯形立方体
- hdu4966 朱刘算法
- Ubuntu/Mac/Windows与手机传输文件
- 微信小程序轮播图渲染(示例)