其实就是拼图游戏的简化版,拼图游戏是将每個方块移动组合,组成完整拼图,现在是改成按数字大小从左到右排列,顺序对了就成功,然后记录花费时间,我是只做了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