ABAP小游戏数字华容道(拼图游戏)

其实就是拼图游戏的简化版,拼图游戏是将每個方块移动组合,组成完整拼图,现在是改成按数字大小从左到右排列,顺序对了就成功,然后记录花费时间,我是只做了9个拼图的数字拼图,大家可以下载后,自己尝试修改扩展成16个或25个的拼图。

初始界面如下

点解START按钮,会出现随机打乱的数字,移动数字,让数字按从小到大排序

 

如下图排好了,排完顺序,按钮会变成灰色禁止移动

同时左下角会有提示成功用时多少秒

点击EXIT按钮,可以看到数据排名,既然是有数据库记录,当然可以把游戏分享给你的同事一起比赛,看看谁的游戏时间更快。

1.首先创建一个记录游戏玩家得分排名的数据库,如下图

2,然后打开SE38,复制下面程序代码,激活后就可以开始游戏了,代码量不多,只有700行

REPORT ZTEST214_13.
TYPE-POOLS : SLIS.     "调用类型池

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE V_TEXT.
SELECTION-SCREEN PUSHBUTTON /10(3) PUSH1 USER-COMMAND PUSH1.
SELECTION-SCREEN PUSHBUTTON  14(3) PUSH2 USER-COMMAND PUSH2.
SELECTION-SCREEN PUSHBUTTON  18(3) PUSH3 USER-COMMAND PUSH3.
SELECTION-SCREEN PUSHBUTTON /10(3) PUSH4 USER-COMMAND PUSH4.
SELECTION-SCREEN PUSHBUTTON  14(3) PUSH5 USER-COMMAND PUSH5.
SELECTION-SCREEN PUSHBUTTON  18(3) PUSH6 USER-COMMAND PUSH6.
SELECTION-SCREEN PUSHBUTTON /10(3) PUSH7 USER-COMMAND PUSH7.
SELECTION-SCREEN PUSHBUTTON  14(3) PUSH8 USER-COMMAND PUSH8.
SELECTION-SCREEN PUSHBUTTON  18(3) PUSH9 USER-COMMAND PUSH9.
SELECTION-SCREEN END OF BLOCK B1.

SELECTION-SCREEN PUSHBUTTON  /10(10) START  USER-COMMAND START.
SELECTION-SCREEN PUSHBUTTON  25(10)  EXIT  USER-COMMAND EXIT.

TYPES:
  BEGIN OF COORD,
    X TYPE I,
    Y TYPE I,
  END OF COORD.

*----------------------------------------------------------------------*
*       CLASS BUTTN DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS BUTTN DEFINITION.

  PUBLIC SECTION.
    CLASS-DATA:
      FLAG TYPE CHAR3 VALUE 'Z' READ-ONLY.
    CLASS-METHODS:
      C_ISSWAP IMPORTING BUT1         TYPE REF TO BUTTN
                         BUT2         TYPE REF TO BUTTN
               RETURNING VALUE(R_CHE) TYPE CHAR1,
      C_SWAP   IMPORTING BUT1 TYPE REF TO BUTTN
                         BUT2 TYPE REF TO BUTTN.
    "构造函数,名称固定CONSTRUCTOR
    METHODS:
      CONSTRUCTOR IMPORTING I_ID    TYPE I
                            I_NAME  TYPE FIELDNAME
                            I_UCOMM TYPE SY-UCOMM
                            I_ICON  TYPE CHAR3
                            I_X     TYPE I
                            I_Y     TYPE I,

      SHOW_ICON,

      GET_ID    RETURNING VALUE(R_ID) TYPE CHAR10,

      GET_ICON  RETURNING VALUE(R_ICON) TYPE CHAR3,
      SET_ICON  IMPORTING I_ICON TYPE CHAR3,

      SET_ICON2 IMPORTING I_ICON2 TYPE CHAR3,

      GET_UCOMM RETURNING VALUE(R_UCOMM) TYPE SY-UCOMM,

      GET_NAME  RETURNING VALUE(R_NAME) TYPE FIELDNAME,

      GET_COORD0 RETURNING VALUE(R_COORD0) TYPE COORD,

      SWAP IMPORTING I_BTN           TYPE REF TO BUTTN
           RETURNING VALUE(R_RESULT) TYPE CHAR1,

      CHE_SORT RETURNING VALUE(R_CHE) TYPE CHAR1,

      GET_NEARCOORD IMPORTING I_COORD         TYPE COORD
                    RETURNING VALUE(R_COORD0) TYPE COORD,
*    GET_NEARCOORD EXPORTING IT_TAB TYPE REF TO DATA.

      CHE_COORD IMPORTING I_COORD      TYPE COORD
                RETURNING VALUE(R_CHE) TYPE CHAR1.


  PRIVATE SECTION.
    DATA ID       TYPE I.
    DATA NAME     TYPE FIELDNAME.
    DATA UCOMM    TYPE SY-UCOMM.
    DATA ICON     TYPE CHAR3.
    DATA ICON2    TYPE CHAR3.
    DATA COORD0   TYPE COORD.

ENDCLASS.                    "buttn1 DEFINITION

*----------------------------------------------------------------------*
*       CLASS buttn1 IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS BUTTN IMPLEMENTATION.
  METHOD CONSTRUCTOR.
    ID     = I_ID.
    NAME   = I_NAME.
    UCOMM  = I_UCOMM.
    ICON   = I_ICON.
    COORD0-X = I_X.
    COORD0-Y = I_Y.
    CONDENSE: NAME, UCOMM, ICON.
  ENDMETHOD.                    "set_value

  METHOD SHOW_ICON.
    FIELD-SYMBOLS <FS> TYPE ANY.
    ASSIGN (NAME) TO <FS>.
    <FS> = ICON.
  ENDMETHOD.                    "SHOW_ICON

  METHOD GET_ID.
    R_ID = ID.
  ENDMETHOD.                    "get_icon

  METHOD SET_ICON.
    ICON = I_ICON.
    CONDENSE ICON.
  ENDMETHOD.                    "SET_ICON
  METHOD SET_ICON2.
    ICON2 = I_ICON2.
    CONDENSE ICON2.
  ENDMETHOD.                                                "SET_ICON2

  METHOD GET_ICON.
    R_ICON = ICON.
  ENDMETHOD.                    "get_icon

  METHOD GET_UCOMM.
    R_UCOMM = UCOMM.
  ENDMETHOD.                    "get_ucomm

  METHOD GET_NAME.
    R_NAME = NAME.
  ENDMETHOD.                    "GET_NAME

  METHOD GET_COORD0.
    R_COORD0 = COORD0.
  ENDMETHOD.                                                "get_coord0

  METHOD SWAP.
    DATA COORD2 TYPE COORD.
    COORD2 = I_BTN->GET_COORD0( ).
    DATA L_TMP TYPE I.
    IF COORD2-X = ME->COORD0-X.
      L_TMP = COORD2-Y - ME->COORD0-Y.
    ELSEIF COORD2-Y = ME->COORD0-Y.
      L_TMP = COORD2-X - ME->COORD0-X.
    ELSE.
      R_RESULT = ''. "不可交换
      RETURN.
    ENDIF.
    IF L_TMP = 1 OR L_TMP = -1.
      R_RESULT = 'X'. "结果为可交换
    ELSE.
      R_RESULT = ''. "不可交换
      RETURN. "退出METHOD模块
    ENDIF.
    DATA L_ICON TYPE CHAR3.
    L_ICON = I_BTN->GET_ICON( ).
    CONDENSE: L_ICON, ME->ICON.
    I_BTN->SET_ICON( ME->ICON ).
    ME->ICON = L_ICON.
  ENDMETHOD.                    "SWAP_BTN

  METHOD CHE_SORT.
    CONDENSE: ME->ICON, ME->ICON2.
    IF ME->ICON = ME->ICON2.
      R_CHE = 'X'.
    ELSE.
      R_CHE = ''.
    ENDIF.
  ENDMETHOD.                    "CHE_BUTTN

  METHOD GET_NEARCOORD.
    DATA WA_TAB TYPE COORD.
    DATA IT_TAB LIKE TABLE OF WA_TAB.
    WA_TAB-X = ME->COORD0-X.
    WA_TAB-Y = ME->COORD0-Y - 1.
    IF WA_TAB-Y >= 1.
      APPEND WA_TAB TO IT_TAB.
    ENDIF.
    WA_TAB-X = ME->COORD0-X.
    WA_TAB-Y = ME->COORD0-Y + 1.
    IF WA_TAB-Y <= 3.
      APPEND WA_TAB TO IT_TAB.
    ENDIF.
    WA_TAB-X = ME->COORD0-X - 1.
    WA_TAB-Y = ME->COORD0-Y.
    IF WA_TAB-X >= 1.
      APPEND WA_TAB TO IT_TAB.
    ENDIF.
    WA_TAB-X = ME->COORD0-X + 1.
    WA_TAB-Y = ME->COORD0-Y.
    IF WA_TAB-X <= 3.
      APPEND WA_TAB TO IT_TAB.
    ENDIF.
    DELETE IT_TAB[] WHERE X = I_COORD-X AND Y = I_COORD-Y.
    DATA SUM TYPE I.
    DESCRIBE TABLE IT_TAB[] LINES SUM.
*输出整数型随机数
    DATA L_INDEX TYPE SY-TABIX.
    CALL FUNCTION 'QF05_RANDOM_INTEGER'
      EXPORTING
        RAN_INT_MAX   = SUM "随机数上限
        RAN_INT_MIN   = 1 "随机数下限
      IMPORTING
        RAN_INT       = L_INDEX
      EXCEPTIONS
        INVALID_INPUT = 1
        OTHERS        = 2.
    READ TABLE IT_TAB[] INTO WA_TAB INDEX L_INDEX.
    R_COORD0 = WA_TAB.

  ENDMETHOD.                    "GET_NEARBUT

  METHOD CHE_COORD.
    IF I_COORD = ME->COORD0.
      R_CHE = 'X'.
    ELSE.
      R_CHE = ''.
    ENDIF.
  ENDMETHOD.                    "CHE_COORD

  METHOD C_ISSWAP.
    DATA COORD1 TYPE COORD.
    COORD1 = BUT1->GET_COORD0( ).
    DATA COORD2 TYPE COORD.
    COORD2 = BUT2->GET_COORD0( ).
    DATA L_TMP TYPE I.
    IF COORD1-X = COORD2-X.
      L_TMP = COORD1-Y - COORD2-Y.
    ELSEIF COORD1-Y = COORD2-Y.
      L_TMP = COORD1-X - COORD2-X.
    ELSE.
      R_CHE = ''. "不可交换
      RETURN.
    ENDIF.
    IF L_TMP = 1 OR L_TMP = -1.
      R_CHE = 'X'. "结果为可交换
    ELSE.
      R_CHE = ''. "不可交换
    ENDIF.
  ENDMETHOD.                    "c_isswap

  METHOD C_SWAP.
    DATA L_ICON1 TYPE CHAR3.
    DATA L_ICON2 TYPE CHAR3.
    L_ICON1 = BUT1->GET_ICON( ).
    L_ICON2 = BUT2->GET_ICON( ).
    CONDENSE: L_ICON1,L_ICON2.
    BUT1->SET_ICON( L_ICON2 ).
    BUT2->SET_ICON( L_ICON1 ).
  ENDMETHOD.                    "SWAP

ENDCLASS.                    "buttn1 IMPLEMENTATION

DATA BUTTNS TYPE TABLE OF REF TO BUTTN WITH HEADER LINE.
DATA IS_START TYPE C. "游戏是否是在开始状态。
DATA L_BEGIN TYPE SY-UZEIT. "记录游戏开始时间
DATA L_END   TYPE SY-UZEIT. "记录游戏结束时间

INITIALIZATION.
  PERFORM INITIA.

AT SELECTION-SCREEN OUTPUT.
  PERFORM SET_OUTPUT.

AT SELECTION-SCREEN. "输入
  PERFORM SET_SCREEN.

START-OF-SELECTION.
  PERFORM SHOWALV.

*&---------------------------------------------------------------------*
*&      Form  INITIA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM INITIA .
  V_TEXT = '把下列数据从小到大排列'.
  START = 'START'.
  EXIT = 'EXIT'.
  IS_START = '1'. "游戏没开始

  DEFINE ADDBUTTN.
    CREATE OBJECT BUTTNS
      EXPORTING
        I_ID     = &1
        I_NAME   = &2
        I_UCOMM  = &3
        I_ICON   = &4
        I_X = &5
        I_Y = &6.
    APPEND BUTTNS.
  END-OF-DEFINITION.
*创建9个按钮
  ADDBUTTN:
   1 'PUSH1' 'PUSH1' '1' '1' '1',
   2 'PUSH2' 'PUSH2' '2' '1' '2',
   3 'PUSH3' 'PUSH3' '3' '1' '3',
   4 'PUSH4' 'PUSH4' '4' '2' '1',
   5 'PUSH5' 'PUSH5' '5' '2' '2',
   6 'PUSH6' 'PUSH6' '6' '2' '3',
   7 'PUSH7' 'PUSH7' '7' '3' '1',
   8 'PUSH8' 'PUSH8' '8' '3' '2',
   9 'PUSH9' 'PUSH9' BUTTN=>FLAG '3' '3'.
ENDFORM.                    " INITIA

*&---------------------------------------------------------------------*
*&      Form  SET_OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SET_OUTPUT .
  IF IS_START = '1'. "没开始
    PERFORM GAME1.
  ELSEIF IS_START = '2'. "开始
    PERFORM GAME2.
  ELSEIF IS_START = '3'. "结束
    PERFORM GAME3.
  ENDIF.
ENDFORM.                    " SET_OUTPUT

*&---------------------------------------------------------------------*
*&      Form  SET_SCREEN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SET_SCREEN .
  DATA OK_CODE TYPE SY-UCOMM.
  OK_CODE = SY-UCOMM.
  CLEAR SY-UCOMM.
  IF OK_CODE = 'START'.
    PERFORM STARTGAME.
  ELSEIF OK_CODE = 'EXIT'.
    LEAVE TO SCREEN 0.
  ELSEIF OK_CODE = 'PUSH1' OR
         OK_CODE = 'PUSH2' OR
         OK_CODE = 'PUSH3' OR
         OK_CODE = 'PUSH4' OR
         OK_CODE = 'PUSH5' OR
         OK_CODE = 'PUSH6' OR
         OK_CODE = 'PUSH7' OR
         OK_CODE = 'PUSH8' OR
         OK_CODE = 'PUSH9'.
    PERFORM SWAPBUTTN USING OK_CODE.
    PERFORM CHE_SORT. "检查是否排好
  ENDIF.
ENDFORM.                    " SET_SCREEN

*&---------------------------------------------------------------------*
*&      Form  GAME1
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GAME1.

*获取空按钮的名字,将9个按钮的文本显示出来
  DATA L_FIELDNAME TYPE FIELDNAME.
  LOOP AT BUTTNS.
    IF BUTTNS->GET_ICON( ) = BUTTN=>FLAG.
      L_FIELDNAME = BUTTNS->GET_NAME( ).
    ENDIF.
    BUTTNS->SHOW_ICON( ).
  ENDLOOP.

*修改按钮属性
  LOOP AT SCREEN.
    IF SCREEN-NAME = 'PUSH1' OR
       SCREEN-NAME = 'PUSH2' OR
       SCREEN-NAME = 'PUSH3' OR
       SCREEN-NAME = 'PUSH4' OR
       SCREEN-NAME = 'PUSH5' OR
       SCREEN-NAME = 'PUSH6' OR
       SCREEN-NAME = 'PUSH7' OR
       SCREEN-NAME = 'PUSH8' OR
       SCREEN-NAME = 'PUSH9'.
      SCREEN-INPUT = 0. "设为不可输入
    ENDIF.
    "将空按钮设置为不可见
    IF SCREEN-NAME = L_FIELDNAME.
      SCREEN-INVISIBLE = 1.
    ENDIF.
    MODIFY SCREEN.
  ENDLOOP.

ENDFORM.                                                    " GAME1

*&---------------------------------------------------------------------*
*&      Form  GAME2
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GAME2 .

*获取空按钮的名字,将9个按钮的文本显示出来
  DATA L_FIELDNAME TYPE FIELDNAME.
  LOOP AT BUTTNS.
    IF BUTTNS->GET_ICON( ) = BUTTN=>FLAG.
      L_FIELDNAME = BUTTNS->GET_NAME( ).
    ENDIF.
    BUTTNS->SHOW_ICON( ).
  ENDLOOP.

*设置按钮属性
  LOOP AT SCREEN.
    "将空按钮设置为不可见
    IF SCREEN-NAME = L_FIELDNAME.
      SCREEN-INVISIBLE = 1.
    ENDIF.

    IF ( SCREEN-NAME = 'PUSH1' OR
       SCREEN-NAME = 'PUSH2' OR
       SCREEN-NAME = 'PUSH3' OR
       SCREEN-NAME = 'PUSH4' OR
       SCREEN-NAME = 'PUSH5' OR
       SCREEN-NAME = 'PUSH6' OR
       SCREEN-NAME = 'PUSH7' OR
       SCREEN-NAME = 'PUSH8' OR
       SCREEN-NAME = 'PUSH9' ) AND
      SCREEN-INPUT = 0.
      SCREEN-INPUT = 1. "设为可输入
    ENDIF.

    IF SCREEN-NAME = 'START' AND
       SCREEN-INPUT = 1.
      SCREEN-INPUT = 0. "设为不可输入
    ENDIF.

    MODIFY SCREEN.
  ENDLOOP.
ENDFORM.                                                    " GAME2

*&---------------------------------------------------------------------*
*&      Form  game3
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM GAME3.

*获取空按钮的名字,将9个按钮的文本显示出来
  DATA L_FIELDNAME TYPE FIELDNAME.
  LOOP AT BUTTNS.
    IF BUTTNS->GET_ICON( ) = BUTTN=>FLAG.
      L_FIELDNAME = BUTTNS->GET_NAME( ).
    ENDIF.
    BUTTNS->SHOW_ICON( ).
  ENDLOOP.

*设置按钮属性
  LOOP AT SCREEN.
    "将空按钮设置为不可见
    IF SCREEN-NAME = L_FIELDNAME.
      SCREEN-INVISIBLE = 1.
    ENDIF.

    IF ( SCREEN-NAME = 'PUSH1' OR
       SCREEN-NAME = 'PUSH2' OR
       SCREEN-NAME = 'PUSH3' OR
       SCREEN-NAME = 'PUSH4' OR
       SCREEN-NAME = 'PUSH5' OR
       SCREEN-NAME = 'PUSH6' OR
       SCREEN-NAME = 'PUSH7' OR
       SCREEN-NAME = 'PUSH8' OR
       SCREEN-NAME = 'PUSH9' ) AND
      SCREEN-INPUT = 1.
      SCREEN-INPUT = 0. "设为不可输入
    ENDIF.

    IF SCREEN-NAME = 'START' AND
       SCREEN-INPUT = 0.
      SCREEN-INPUT = 1. "设为可输入
    ENDIF.

    MODIFY SCREEN.
  ENDLOOP.
ENDFORM.                                                    "game3

*&---------------------------------------------------------------------*
*&      Form  SWAPBUTTN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_OK_CODE  text
*----------------------------------------------------------------------*
FORM SWAPBUTTN USING OK_CODE2.
*获取按下的按钮
  DATA BUTTNX TYPE REF TO BUTTN.
*获取空按钮
  DATA BUTTN0 TYPE REF TO BUTTN.
  LOOP AT BUTTNS.
    IF BUTTNS->GET_UCOMM( ) = OK_CODE2.
      BUTTNX = BUTTNS.
    ENDIF.
    IF BUTTNS->GET_ICON( ) = BUTTN=>FLAG.
      BUTTN0 = BUTTNS.
    ENDIF.
  ENDLOOP.
*将按下的按钮和空按钮交换
  DATA L_RESULT TYPE CHAR1.
  L_RESULT = BUTTN0->SWAP( BUTTNX ).
ENDFORM.                    " SWAPBUTTN

*&---------------------------------------------------------------------*
*&      Form  STARTGAME
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM STARTGAME .
  IS_START = '2'. "游戏设置为开始
  DATA: BEGIN OF IT_TAB OCCURS 0,
          NUM TYPE I,
        END OF IT_TAB.
*内表加入无序8个数字
  DO 8 TIMES.
    CALL FUNCTION 'QF05_RANDOM_INTEGER'
      EXPORTING
        RAN_INT_MAX   = 100
        RAN_INT_MIN   = 1
      IMPORTING
        RAN_INT       = IT_TAB-NUM
      EXCEPTIONS
        INVALID_INPUT = 1
        OTHERS        = 2.
    APPEND IT_TAB.
  ENDDO.
*将8个数字排序
  SORT IT_TAB BY NUM.
*将这8个数字加入到8个按钮
  DATA L_INDEX TYPE I VALUE 0.
  DATA L_NUM TYPE CHAR3.
  LOOP AT BUTTNS.
    L_INDEX = L_INDEX + 1.
    IF L_INDEX <= 8.
      READ TABLE IT_TAB INDEX L_INDEX.
      L_NUM = IT_TAB-NUM.
      BUTTNS->SET_ICON( L_NUM ).
      BUTTNS->SET_ICON2( L_NUM ).
    ELSEIF L_INDEX = 9.
*第9个加入标记符号
      BUTTNS->SET_ICON2( BUTTN=>FLAG ).
    ENDIF.
  ENDLOOP.

*将按钮顺序打乱
  PERFORM CHAOS.



*设置开始时间
  L_BEGIN = SY-UZEIT.
ENDFORM.                    " STARTGAME

*&---------------------------------------------------------------------*
*&      Form  CHE_SORT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CHE_SORT .
*检查每个按钮是否排好
  DATA L_YES TYPE C VALUE 'X'.
  LOOP AT BUTTNS.
    IF BUTTNS->CHE_SORT( ) <> 'X'.
      L_YES = ''. "没有排好
      EXIT.
    ENDIF.
  ENDLOOP.
*排好则执行
  IF L_YES = 'X'.
    IS_START = '3'. "游戏结束
    GET TIME.
    L_END = SY-UZEIT.
    DATA L_LEN TYPE I.
    L_LEN = L_END - L_BEGIN.
    DATA C_LEN(10) TYPE C.
    C_LEN = L_LEN.
    CONDENSE C_LEN.
    DATA STR_MES TYPE STRING.
    CONCATENATE 'you are success! cost "' C_LEN '" Seconds.' INTO STR_MES.
    MESSAGE STR_MES TYPE 'S'.
    PERFORM INPUTTAB USING L_LEN.
  ENDIF.
ENDFORM.                    " CHE_SORT

*&---------------------------------------------------------------------*
*&      Form  CHAOS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CHAOS .
  DATA BUTTN0 TYPE REF TO BUTTN.
  DATA COORDX TYPE COORD.
  DATA BUTTNX TYPE REF TO BUTTN.
  DATA COORD9 TYPE COORD. "存储前一个位置
  DO 50 TIMES.
    LOOP AT BUTTNS.
      IF BUTTNS->GET_ICON( ) = BUTTN=>FLAG.
        BUTTN0 = BUTTNS.
      ENDIF.
    ENDLOOP.
    COORDX = BUTTN0->GET_NEARCOORD( COORD9 ).
    COORD9 = BUTTN0->GET_COORD0( ).
    LOOP AT BUTTNS.
      IF BUTTNS->CHE_COORD( COORDX ) = 'X'.
        BUTTNX = BUTTNS.
      ENDIF.
    ENDLOOP.
    BUTTN0->SWAP( BUTTNX ).
  ENDDO.
ENDFORM.                    " CHAOS

*&---------------------------------------------------------------------*
*&      Form  INPUTTAB
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_C_LEN  text
*----------------------------------------------------------------------*
FORM INPUTTAB USING L_LEN2.
  DATA IT_TAB LIKE ZGAME.
  DATA L_STAID TYPE ZGAME-STAID.
  SELECT SINGLE MAX( STAID ) INTO L_STAID FROM ZGAME.
  IF SY-SUBRC = 0.
    IT_TAB-STAID = L_STAID + 1.
  ELSE.
    IT_TAB-STAID = 1.
  ENDIF.
  IT_TAB-ERNAM = SY-UNAME.
  IT_TAB-ERDAT = SY-DATUM.
  IT_TAB-ERZET = SY-UZEIT.
  IT_TAB-SUCES = L_LEN2.
  INSERT INTO ZGAME VALUES IT_TAB.
ENDFORM.                    " INPUTTAB

*&---------------------------------------------------------------------*
*&      Form  SHOWALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SHOWALV .
  TABLES : SPFLI.
  DATA : FIELDCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
         LAYOUT   TYPE SLIS_LAYOUT_ALV.


  DATA IT_TAB LIKE ZGAME OCCURS 0 WITH HEADER LINE.
  SELECT * FROM ZGAME INTO TABLE IT_TAB.
  SORT IT_TAB BY SUCES.


  "定义宏来设置FIELDCAT属性
  DEFINE FIELDCATSET.
    CLEAR FIELDCAT.
*    FIELDCAT-REF_TABNAME = IT_TAB.
    FIELDCAT-FIELDNAME = &1.
    FIELDCAT-COL_POS = &2.
    FIELDCAT-SELTEXT_L = &3.
    APPEND FIELDCAT.
  END-OF-DEFINITION.

  FIELDCATSET 'STAID' SY-TABIX '序号'.
  FIELDCATSET 'ERNAM' SY-TABIX '游戏者'.
  FIELDCATSET 'ERDAT' SY-TABIX '日期'.
  FIELDCATSET 'ERZET' SY-TABIX '时间'.
  FIELDCATSET 'SUCES' SY-TABIX '花时间(秒)'.
  LAYOUT-COLWIDTH_OPTIMIZE = 'X'.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM = SY-REPID
      IS_LAYOUT          = LAYOUT
      I_GRID_TITLE       = '游戏记录'
      IT_FIELDCAT        = FIELDCAT[]
    TABLES
      T_OUTTAB           = IT_TAB[]
    EXCEPTIONS
      PROGRAM_ERROR      = 1
      OTHERS             = 2.

ENDFORM.                    " SHOWALV

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值