• ABAP版连连看


    网上看到的,感觉不错,借来装13。。。

    *&---------------------------------------------------------------------*
    *& Report  ZGAME_LLK
    *&
    *&---------------------------------------------------------------------*
    *&
    *&
    *&---------------------------------------------------------------------*
    
    REPORT zgame_llk.
    INCLUDE <icon>.
    TYPE-POOLS: slis.
    TABLES: sscrfields.
    CLASS lcl_event_handler DEFINITION DEFERRED.
    
    DATA: lt_icon TYPE TABLE OF icon WITH HEADER LINE.
    DATA: go_timer TYPE REF TO cl_gui_timer, "进度条计时器
           go_evt_hndl TYPE REF TO lcl_event_handler,
           twinkle_timer TYPE REF TO cl_gui_timer,   "闪烁计时器
           twinkle_evt_hndl TYPE REF TO lcl_event_handler.
    DATA: l_left_time TYPE i VALUE 360, "剩余时间
          l_times TYPE i,                 "用来控制进度条的黑方框数目
          l_start_time TYPE i,            "开始时间
          l_end_time TYPE i,              "结束时间
          l_cost_time TYPE i.             "所用时间
    TYPES: BEGIN OF score_line,
      user    LIKE sy-uname,
      time(5) TYPE c,
      hintcount(3) TYPE c,
      reformcount(3) TYPE c,
    END OF score_line.
    DATA: high_scores TYPE TABLE OF score_line WITH HEADER LINE,
          database_id LIKE indx-srtfd VALUE 'Z0324491X'. " export/import to database ID
    *----------------------------------------------------------------------*
    *       CLASS lcl_event_handler DEFINITION
    *----------------------------------------------------------------------*
    *
    *----------------------------------------------------------------------*
    CLASS lcl_event_handler DEFINITION.
      PUBLIC SECTION.
        METHODS:
        handle_timer FOR EVENT finished OF cl_gui_timer,
        handle_twinkle FOR EVENT finished OF cl_gui_timer.
    ENDCLASS. "lcl_event_handler DEFINITION
    *&---------------------------------------------------------------------*
    *&      CLASS lcl_event_handler IMPLEMENTATION
    *&---------------------------------------------------------------------*
    CLASS lcl_event_handler IMPLEMENTATION.
      METHOD handle_timer."进度条
        CALL METHOD cl_gui_cfw=>set_new_ok_code
          EXPORTING
            new_code = 'RFSH'.
        CALL METHOD go_timer->run "必须重新激活定时器
        EXCEPTIONS
          OTHERS = 9.
      ENDMETHOD.                 "handle_timer
    
      METHOD handle_twinkle."提示闪烁
        CALL METHOD cl_gui_cfw=>set_new_ok_code
          EXPORTING
            new_code = 'TWNK'.
        CALL METHOD twinkle_timer->run "必须重新激活定时器
        EXCEPTIONS
          OTHERS = 9.
      ENDMETHOD.                 "handle_timer
    ENDCLASS. "lcl_event_handler IMPLEMENTATION
    
    DEFINE displ_hsline.
      selection-screen: begin of line.
      selection-screen: comment  38(3) hs1_&1.
      selection-screen: comment 42(14) hs2_&1.
      selection-screen: comment  56(5) hs3_&1.
      selection-screen: comment  64(8) hs4_&1.
      selection-screen: comment  73(8) hs5_&1.
      selection-screen: end of line.
    END-OF-DEFINITION.
    
    SELECTION-SCREEN BEGIN OF SCREEN 1001.
    *功能按钮
    SELECTION-SCREEN PUSHBUTTON 40(6) bt_hint USER-COMMAND bt_hint.
    SELECTION-SCREEN COMMENT 70(10) usedtime.
    SELECTION-SCREEN PUSHBUTTON 50(6) bt_rfm USER-COMMAND bt_reform.
    SELECTION-SCREEN PUSHBUTTON 60(6) bt_rec USER-COMMAND bt_record.
    *SELECTION-SCREEN PUSHBUTTON 28(10) refresh USER-COMMAND bt_refresh.
    *时间条
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 39(80) progress.
    SELECTION-SCREEN END OF LINE.
    *图片按钮
    SELECTION-SCREEN SKIP 1.
    SELECTION-SCREEN PUSHBUTTON 38(4) bto01 USER-COMMAND bto01 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 41(4) bto02 USER-COMMAND bto02 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 44(4) btc01 USER-COMMAND btc01 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 47(4) btc02 USER-COMMAND btc02 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 50(4) btc03 USER-COMMAND btc03 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 53(4) btc04 USER-COMMAND btc04 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 56(4) btc05 USER-COMMAND btc05 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 59(4) btc06 USER-COMMAND btc06 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 62(4) btc07 USER-COMMAND btc07 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 65(4) btc08 USER-COMMAND btc08 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 68(4) btc09 USER-COMMAND btc09 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 71(4) btc10 USER-COMMAND btc10 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 74(4) btc11 USER-COMMAND btc11 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 77(4) btc12 USER-COMMAND btc12 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 80(4) bto03 USER-COMMAND bto03 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 83(4) bto04 USER-COMMAND bto04 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON /38(4) bto05 USER-COMMAND bto05 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 83(4) bto06 USER-COMMAND bto06 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON /38(4) btr01 USER-COMMAND btr01 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 44(4) pb001 USER-COMMAND pb001 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 47(4) pb002 USER-COMMAND pb002 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 50(4) pb003 USER-COMMAND pb003 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 53(4) pb004 USER-COMMAND pb004 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 56(4) pb005 USER-COMMAND pb005 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 59(4) pb006 USER-COMMAND pb006 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 62(4) pb007 USER-COMMAND pb007 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 65(4) pb008 USER-COMMAND pb008 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 68(4) pb009 USER-COMMAND pb009 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 71(4) pb010 USER-COMMAND pb010 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 74(4) pb011 USER-COMMAND pb011 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 77(4) pb012 USER-COMMAND pb012 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 83(4) btr13 USER-COMMAND btr13 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON /38(4) btr02 USER-COMMAND btr02 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 44(4) pb013 USER-COMMAND pb013 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 47(4) pb014 USER-COMMAND pb014 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 50(4) pb015 USER-COMMAND pb015 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 53(4) pb016 USER-COMMAND pb016 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 56(4) pb017 USER-COMMAND pb017 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 59(4) pb018 USER-COMMAND pb018 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 62(4) pb019 USER-COMMAND pb019 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 65(4) pb020 USER-COMMAND pb020 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 68(4) pb021 USER-COMMAND pb021 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 71(4) pb022 USER-COMMAND pb022 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 74(4) pb023 USER-COMMAND pb023 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 77(4) pb024 USER-COMMAND pb024 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 83(4) btr14 USER-COMMAND btr14 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON /38(4) btr03 USER-COMMAND btr03 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 44(4) pb025 USER-COMMAND pb025 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 47(4) pb026 USER-COMMAND pb026 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 50(4) pb027 USER-COMMAND pb027 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 53(4) pb028 USER-COMMAND pb028 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 56(4) pb029 USER-COMMAND pb029 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 59(4) pb030 USER-COMMAND pb030 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 62(4) pb031 USER-COMMAND pb031 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 65(4) pb032 USER-COMMAND pb032 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 68(4) pb033 USER-COMMAND pb033 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 71(4) pb034 USER-COMMAND pb034 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 74(4) pb035 USER-COMMAND pb035 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 77(4) pb036 USER-COMMAND pb036 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 83(4) btr15 USER-COMMAND btr15 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON /38(4) btr04 USER-COMMAND btr04 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 44(4) pb037 USER-COMMAND pb037 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 47(4) pb038 USER-COMMAND pb038 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 50(4) pb039 USER-COMMAND pb039 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 53(4) pb040 USER-COMMAND pb040 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 56(4) pb041 USER-COMMAND pb041 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 59(4) pb042 USER-COMMAND pb042 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 62(4) pb043 USER-COMMAND pb043 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 65(4) pb044 USER-COMMAND pb044 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 68(4) pb045 USER-COMMAND pb045 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 71(4) pb046 USER-COMMAND pb046 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 74(4) pb047 USER-COMMAND pb047 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 77(4) pb048 USER-COMMAND pb048 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 83(4) btr16 USER-COMMAND btr16 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON /38(4) btr05 USER-COMMAND btr05 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 44(4) pb049 USER-COMMAND pb049 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 47(4) pb050 USER-COMMAND pb050 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 50(4) pb051 USER-COMMAND pb051 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 53(4) pb052 USER-COMMAND pb052 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 56(4) pb053 USER-COMMAND pb053 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 59(4) pb054 USER-COMMAND pb054 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 62(4) pb055 USER-COMMAND pb055 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 65(4) pb056 USER-COMMAND pb056 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 68(4) pb057 USER-COMMAND pb057 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 71(4) pb058 USER-COMMAND pb058 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 74(4) pb059 USER-COMMAND pb059 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 77(4) pb060 USER-COMMAND pb060 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 83(4) btr17 USER-COMMAND btr17 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON /38(4) btr06 USER-COMMAND btr06 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 44(4) pb061 USER-COMMAND pb061 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 47(4) pb062 USER-COMMAND pb062 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 50(4) pb063 USER-COMMAND pb063 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 53(4) pb064 USER-COMMAND pb064 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 56(4) pb065 USER-COMMAND pb065 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 59(4) pb066 USER-COMMAND pb066 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 62(4) pb067 USER-COMMAND pb067 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 65(4) pb068 USER-COMMAND pb068 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 68(4) pb069 USER-COMMAND pb069 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 71(4) pb070 USER-COMMAND pb070 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 74(4) pb071 USER-COMMAND pb071 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 77(4) pb072 USER-COMMAND pb072 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 83(4) btr18 USER-COMMAND btr18 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON /38(4) btr07 USER-COMMAND btr07 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 44(4) pb073 USER-COMMAND pb073 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 47(4) pb074 USER-COMMAND pb074 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 50(4) pb075 USER-COMMAND pb075 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 53(4) pb076 USER-COMMAND pb076 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 56(4) pb077 USER-COMMAND pb077 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 59(4) pb078 USER-COMMAND pb078 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 62(4) pb079 USER-COMMAND pb079 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 65(4) pb080 USER-COMMAND pb080 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 68(4) pb081 USER-COMMAND pb081 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 71(4) pb082 USER-COMMAND pb082 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 74(4) pb083 USER-COMMAND pb083 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 77(4) pb084 USER-COMMAND pb084 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 83(4) btr19 USER-COMMAND btr19 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON /38(4) btr08 USER-COMMAND btr08 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 44(4) pb085 USER-COMMAND pb085 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 47(4) pb086 USER-COMMAND pb086 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 50(4) pb087 USER-COMMAND pb087 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 53(4) pb088 USER-COMMAND pb088 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 56(4) pb089 USER-COMMAND pb089 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 59(4) pb090 USER-COMMAND pb090 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 62(4) pb091 USER-COMMAND pb091 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 65(4) pb092 USER-COMMAND pb092 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 68(4) pb093 USER-COMMAND pb093 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 71(4) pb094 USER-COMMAND pb094 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 74(4) pb095 USER-COMMAND pb095 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 77(4) pb096 USER-COMMAND pb096 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 83(4) btr20 USER-COMMAND btr20 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON /38(4) btr09 USER-COMMAND btr09 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 44(4) pb097 USER-COMMAND pb097 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 47(4) pb098 USER-COMMAND pb098 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 50(4) pb099 USER-COMMAND pb099 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 53(4) pb100 USER-COMMAND pb100 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 56(4) pb101 USER-COMMAND pb101 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 59(4) pb102 USER-COMMAND pb102 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 62(4) pb103 USER-COMMAND pb103 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 65(4) pb104 USER-COMMAND pb104 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 68(4) pb105 USER-COMMAND pb105 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 71(4) pb106 USER-COMMAND pb106 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 74(4) pb107 USER-COMMAND pb107 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 77(4) pb108 USER-COMMAND pb108 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 83(4) btr21 USER-COMMAND btr21 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON /38(4) btr10 USER-COMMAND btr10 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 44(4) pb109 USER-COMMAND pb109 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 47(4) pb110 USER-COMMAND pb110 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 50(4) pb111 USER-COMMAND pb111 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 53(4) pb112 USER-COMMAND pb112 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 56(4) pb113 USER-COMMAND pb113 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 59(4) pb114 USER-COMMAND pb114 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 62(4) pb115 USER-COMMAND pb115 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 65(4) pb116 USER-COMMAND pb116 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 68(4) pb117 USER-COMMAND pb117 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 71(4) pb118 USER-COMMAND pb118 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 74(4) pb119 USER-COMMAND pb119 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 77(4) pb120 USER-COMMAND pb120 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 83(4) btr22 USER-COMMAND btr22 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON /38(4) btr11 USER-COMMAND btr11 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 44(4) pb121 USER-COMMAND pb121 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 47(4) pb122 USER-COMMAND pb122 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 50(4) pb123 USER-COMMAND pb123 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 53(4) pb124 USER-COMMAND pb124 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 56(4) pb125 USER-COMMAND pb125 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 59(4) pb126 USER-COMMAND pb126 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 62(4) pb127 USER-COMMAND pb127 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 65(4) pb128 USER-COMMAND pb128 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 68(4) pb129 USER-COMMAND pb129 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 71(4) pb130 USER-COMMAND pb130 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 74(4) pb131 USER-COMMAND pb131 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 77(4) pb132 USER-COMMAND pb132 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 83(4) btr23 USER-COMMAND btr23 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON /38(4) btr12 USER-COMMAND btr12 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 44(4) pb133 USER-COMMAND pb133 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 47(4) pb134 USER-COMMAND pb134 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 50(4) pb135 USER-COMMAND pb135 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 53(4) pb136 USER-COMMAND pb136 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 56(4) pb137 USER-COMMAND pb137 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 59(4) pb138 USER-COMMAND pb138 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 62(4) pb139 USER-COMMAND pb139 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 65(4) pb140 USER-COMMAND pb140 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 68(4) pb141 USER-COMMAND pb141 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 71(4) pb142 USER-COMMAND pb142 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 74(4) pb143 USER-COMMAND pb143 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 77(4) pb144 USER-COMMAND pb144 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 83(4) btr24 USER-COMMAND btr24 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON /38(4) bto07 USER-COMMAND bto07 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 83(4) bto08 USER-COMMAND bto08 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON /38(4) bto09 USER-COMMAND bto09 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 41(4) bto10 USER-COMMAND bto10 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 44(4) btc13 USER-COMMAND btc13 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 47(4) btc14 USER-COMMAND btc14 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 50(4) btc15 USER-COMMAND btc15 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 53(4) btc16 USER-COMMAND btc16 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 56(4) btc17 USER-COMMAND btc17 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 59(4) btc18 USER-COMMAND btc18 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 62(4) btc19 USER-COMMAND btc19 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 65(4) btc20 USER-COMMAND btc20 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 68(4) btc21 USER-COMMAND btc21 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 71(4) btc22 USER-COMMAND btc22 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 74(4) btc23 USER-COMMAND btc23 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 77(4) btc24 USER-COMMAND btc24 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 80(4) bto11 USER-COMMAND bto11 VISIBLE LENGTH 2.
    SELECTION-SCREEN PUSHBUTTON 83(4) bto12 USER-COMMAND bto12 VISIBLE LENGTH 2.
    SELECTION-SCREEN COMMENT /38(80) c_topic.
    SELECTION-SCREEN ULINE /38(48) .
    displ_hsline 0.
    SELECTION-SCREEN ULINE /38(48) .
    displ_hsline 1.
    displ_hsline 2.
    displ_hsline 3.
    displ_hsline 4.
    displ_hsline 5.
    displ_hsline 6.
    displ_hsline 7.
    displ_hsline 8.
    displ_hsline 9.
    displ_hsline 10.
    displ_hsline 11.
    displ_hsline 12.
    displ_hsline 13.
    displ_hsline 14.
    displ_hsline 15.
    displ_hsline 16.
    displ_hsline 17.
    displ_hsline 18.
    displ_hsline 19.
    displ_hsline 20.
    displ_hsline 21.
    displ_hsline 22.
    displ_hsline 23.
    displ_hsline 24.
    displ_hsline 25.
    displ_hsline 26.
    displ_hsline 27.
    displ_hsline 28.
    displ_hsline 29.
    displ_hsline 30.
    displ_hsline 31.
    displ_hsline 32.
    displ_hsline 33.
    displ_hsline 34.
    displ_hsline 35.
    displ_hsline 36.
    displ_hsline 37.
    displ_hsline 38.
    displ_hsline 39.
    displ_hsline 40.
    displ_hsline 41.
    displ_hsline 42.
    displ_hsline 43.
    displ_hsline 44.
    displ_hsline 45.
    displ_hsline 46.
    displ_hsline 47.
    displ_hsline 48.
    displ_hsline 49.
    displ_hsline 50.
    displ_hsline 51.
    displ_hsline 52.
    displ_hsline 53.
    displ_hsline 54.
    displ_hsline 55.
    displ_hsline 56.
    displ_hsline 57.
    displ_hsline 58.
    displ_hsline 59.
    displ_hsline 60.
    displ_hsline 61.
    displ_hsline 62.
    displ_hsline 63.
    displ_hsline 64.
    displ_hsline 65.
    displ_hsline 66.
    displ_hsline 67.
    displ_hsline 68.
    displ_hsline 69.
    displ_hsline 70.
    displ_hsline 71.
    displ_hsline 72.
    displ_hsline 73.
    displ_hsline 74.
    displ_hsline 75.
    displ_hsline 76.
    displ_hsline 77.
    displ_hsline 78.
    displ_hsline 79.
    displ_hsline 80.
    displ_hsline 81.
    displ_hsline 82.
    displ_hsline 83.
    displ_hsline 84.
    displ_hsline 85.
    displ_hsline 86.
    displ_hsline 87.
    displ_hsline 88.
    displ_hsline 89.
    displ_hsline 90.
    displ_hsline 91.
    displ_hsline 92.
    displ_hsline 93.
    displ_hsline 94.
    displ_hsline 95.
    displ_hsline 96.
    displ_hsline 97.
    displ_hsline 98.
    displ_hsline 99.
    displ_hsline 100.
    displ_hsline 101.
    displ_hsline 102.
    displ_hsline 103.
    displ_hsline 104.
    displ_hsline 105.
    displ_hsline 106.
    displ_hsline 107.
    displ_hsline 108.
    displ_hsline 109.
    displ_hsline 110.
    displ_hsline 111.
    displ_hsline 112.
    displ_hsline 113.
    displ_hsline 114.
    displ_hsline 115.
    displ_hsline 116.
    displ_hsline 117.
    displ_hsline 118.
    displ_hsline 119.
    displ_hsline 120.
    displ_hsline 121.
    displ_hsline 122.
    displ_hsline 123.
    displ_hsline 124.
    displ_hsline 125.
    displ_hsline 126.
    displ_hsline 127.
    displ_hsline 128.
    displ_hsline 129.
    displ_hsline 130.
    displ_hsline 131.
    displ_hsline 132.
    displ_hsline 133.
    displ_hsline 134.
    displ_hsline 135.
    displ_hsline 136.
    displ_hsline 137.
    displ_hsline 138.
    displ_hsline 139.
    displ_hsline 140.
    displ_hsline 141.
    displ_hsline 142.
    displ_hsline 143.
    displ_hsline 144.
    displ_hsline 145.
    displ_hsline 146.
    displ_hsline 147.
    displ_hsline 148.
    displ_hsline 149.
    displ_hsline 150.
    displ_hsline 151.
    displ_hsline 152.
    displ_hsline 153.
    displ_hsline 154.
    displ_hsline 155.
    displ_hsline 156.
    displ_hsline 157.
    displ_hsline 158.
    displ_hsline 159.
    displ_hsline 160.
    displ_hsline 161.
    displ_hsline 162.
    displ_hsline 163.
    displ_hsline 164.
    displ_hsline 165.
    displ_hsline 166.
    displ_hsline 167.
    displ_hsline 168.
    displ_hsline 169.
    displ_hsline 170.
    displ_hsline 171.
    displ_hsline 172.
    displ_hsline 173.
    displ_hsline 174.
    displ_hsline 175.
    displ_hsline 176.
    displ_hsline 177.
    SELECTION-SCREEN END OF SCREEN 1001.
    
    START-OF-SELECTION.
      CALL SCREEN 1001.
    
      DATA: l_chars(26) TYPE c VALUE 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.
    
      DATA: BEGIN OF lt_game OCCURS 0,                            "游戏区域
         value(14) TYPE c,
       END OF lt_game.
    
      DATA: BEGIN OF lt_number OCCURS 0,                        "1~144
         number TYPE i,
       END OF lt_number.
    
      DATA: BEGIN OF lt_area OCCURS 0,
         chr(1) TYPE c,
         row TYPE i,
         col TYPE i,
         top TYPE i,
         left TYPE i,
         bottom TYPE i,
         right TYPE i,
       END OF lt_area.
    
      DATA: BEGIN OF lt_pic OCCURS 0,
         id(4) TYPE c,
       END OF lt_pic.
    
      DATA: lt_last_area LIKE lt_area OCCURS 0,
             lt_cur_area LIKE lt_area OCCURS 0.
    
      DATA: randnum TYPE i,     "随机数
            randchr(1) TYPE c,  "随即字母
            linecount TYPE i.   "lt_number的行数
    
      DATA: last_pb(5) TYPE c,
            cur_pb(5) TYPE c,
            connected(1) TYPE c,
            left_pbs TYPE i VALUE 144,            "剩余个数
            l_pb_chr(1) TYPE c,                   "按钮对应的字母
            l_hint_count(3) TYPE c,               "提示次数
            l_reform_count(3) TYPE c,             "重排次数
            l_dead(1) TYPE c,                     "是否还可以消除
            l_gameover(1) TYPE c.                 "时间耗尽、游戏结束
    
      DATA: l_hint_pb1(5) TYPE c,                               "提示按钮1
            l_hint_pb2(5) TYPE c,                               "提示按钮2
            l_hint_icon1(4) TYPE c,
            l_hint_icon2(4) TYPE c.
    
    INITIALIZATION.
    
      bt_hint = '提示'.
      bt_rfm = '重排'.
      bt_rec = '排行榜'.
    *  refresh = '刷新图片'.
      btc01 = btc13 = btr01 = btr13 = '1'.
      btc02 = btc14 = btr02 = btr14 = '2'.
      btc03 = btc15 = btr03 = btr15 = '3'.
      btc04 = btc16 = btr04 = btr16 = '4'.
      btc05 = btc17 = btr05 = btr17 = '5'.
      btc06 = btc18 = btr06 = btr18 = '6'.
      btc07 = btc19 = btr07 = btr19 = '7'.
      btc08 = btc20 = btr08 = btr20 = '8'.
      btc09 = btc21 = btr09 = btr21 = '9'.
      btc10 = btc22 = btr10 = btr22 = '10'.
      btc11 = btc23 = btr11 = btr23 = '11'.
      btc12 = btc24 = btr12 = btr24 = '12'.
    
      c_topic = '================:: HIGH SCORES ::================'.
      hs2_0  = '用户名'.
      hs3_0  = '时间'.
      hs4_0  = '提示次数'.
      hs5_0  = '重排次数'.
    
      PERFORM high_scores_read.
    
      PERFORM high_scores_show.
    
      DO 30 TIMES.
        CONCATENATE progress '' INTO progress.
      ENDDO.
    
    *  初始化时间
      PERFORM init_timer_progress.
    
    *1.初始化lt_game、lt_number、lt_pic.
      DO 144 TIMES. "为lt_number赋值:1~144
        lt_number-number = sy-index.
        APPEND lt_number.
      ENDDO.
    
      l_hint_count = '0'.
      l_reform_count = '0'.
      l_gameover = ''.
    
      DO 14 TIMES.  "初始化lt_game为14个#
        lt_game-value = '##############'.
        APPEND lt_game.
      ENDDO.
    
      DATA: l_icon_count TYPE i,
            l_get_icon TYPE c.
      SELECT * INTO TABLE lt_icon FROM icon.
      DELETE lt_icon WHERE
        id = icon_green_light OR
        id = icon_yellow_light OR
        id = icon_red_light OR
        id = icon_message_information OR
        id = icon_message_warning OR
        id = icon_message_error OR
        id = icon_message_question OR
        id = icon_message_critical OR
        id = icon_space OR
        id = icon_include_in_selection OR
        id = icon_light_out OR
        id = icon_remove_from_selection OR
        id = icon_wf_workitem_ol OR
        id = icon_new_handling_unit OR
        id = icon_new_handling_if_full OR
        id = icon_set_sum_undo OR
        id = icon_sort_undo OR
        id = icon_bw_process OR
        id = icon_bw_simulate OR
        id = icon_bw_process_cancel OR
        id = icon_bw_simulate_cancel OR
        id = icon_org_unit OR
        id = icon_incomplete OR
        id = icon_aew_project
    .
    
      l_icon_count = LINES( lt_icon[] ).
      REFRESH: lt_pic.
      DO 26 TIMES.
        CLEAR: l_get_icon.
        WHILE l_get_icon = ''.
          CALL FUNCTION 'QF05_RANDOM_INTEGER'
            EXPORTING
              ran_int_max   = l_icon_count
              ran_int_min   = 1
            IMPORTING
              ran_int       = randnum
            EXCEPTIONS
              invalid_input = 1
              OTHERS        = 2.
          READ TABLE lt_icon INDEX randnum.
          READ TABLE lt_pic WITH KEY id = lt_icon-id.
          IF sy-subrc <> 0.
            l_get_icon = 'X'.
            lt_pic-id = lt_icon-id.
            APPEND lt_pic.
          ENDIF.
        ENDWHILE.
      ENDDO.
    
    *2.生成随机数
      DO 72 TIMES. "执行72次,每次生成一个字母,并在lt_number中取出两个随机数字,确定其在lt_game中的位置,放入。
        CALL FUNCTION 'QF05_RANDOM_INTEGER'
          EXPORTING
            ran_int_max   = 26
            ran_int_min   = 1
          IMPORTING
            ran_int       = randnum
          EXCEPTIONS
            invalid_input = 1
            OTHERS        = 2.
        randnum = randnum - 1.
        randchr = l_chars+randnum(1).
        DO 2 TIMES.
          DESCRIBE TABLE lt_number LINES linecount.
          CALL FUNCTION 'QF05_RANDOM_INTEGER'
            EXPORTING
              ran_int_max   = linecount
              ran_int_min   = 1
            IMPORTING
              ran_int       = randnum
            EXCEPTIONS
              invalid_input = 1
              OTHERS        = 2.
          PERFORM update_internaltable_and_icon USING randchr.
        ENDDO.
      ENDDO.
    
    *3.检查是否有可以连接的
      PERFORM check_dead.
    
    *4.设置开始时间
      GET RUN TIME FIELD l_start_time.
    
    AT SELECTION-SCREEN.
    
    *时间递减
      IF sy-ucomm = 'RFSH' AND l_left_time > 0.
        l_left_time = l_left_time - 12.
        IF l_left_time = 0.
          CALL METHOD go_timer->free.  "删除定时器
          l_gameover = 'X'.
          MESSAGE '时间已经耗尽,你失败了!' TYPE 'E'.
        ENDIF.
      ENDIF.
    
      GET RUN TIME FIELD l_end_time.
      l_cost_time = ( l_end_time - l_start_time ) / 1000000.
      usedtime = l_cost_time.
      CONDENSE usedtime NO-GAPS.
      CONCATENATE '已用时' usedtime '' INTO usedtime. "更新comment
    
      IF sy-ucomm = 'TWNK'.
        PERFORM pb_twinkle.
        CALL METHOD twinkle_timer->free.
        FREE twinkle_timer.
      ENDIF.
    
    *更新时间条
      CLEAR progress.
      l_times = l_left_time / 12.
      DO l_times TIMES.
        CONCATENATE progress '' INTO progress.
      ENDDO.
      l_times = 30 - l_times.
      DO l_times TIMES.
        CONCATENATE progress '' INTO progress.
      ENDDO.
    
      CHECK l_gameover = ''.
    
      IF sscrfields-ucomm = 'BT_HINT'.
        PERFORM get_hint USING 'X'.
      ELSEIF sscrfields-ucomm = 'BT_REFORM'.
        PERFORM reform USING ''.
    *  ELSEIF sscrfields-ucomm = 'BT_REFRESH'.
    *    PERFORM update_pb_visible.
      ELSEIF sscrfields-ucomm = 'BT_RECORD'.
        PERFORM alv_show_record.
      ENDIF.
      CHECK sscrfields-ucomm CS 'PB'.
    
    *图片按钮事件处理
      IF last_pb IS NOT INITIAL.
        CHECK sscrfields-ucomm NE last_pb.
        cur_pb = sscrfields-ucomm.
        PERFORM get_area TABLES lt_last_area USING last_pb '' ''.
        PERFORM get_area TABLES lt_cur_area USING cur_pb '' ''.
        PERFORM check_connect TABLES lt_last_area lt_cur_area CHANGING connected.
        IF connected EQ 'X'.
          PERFORM clear_pb USING last_pb.
          PERFORM clear_pb USING cur_pb.
          last_pb = ''.
          cur_pb = ''.
        ELSE.
          last_pb = cur_pb.
        ENDIF.
        REFRESH: lt_last_area, lt_cur_area.
      ELSE.
        last_pb = sscrfields-ucomm.
      ENDIF.
    
    AT SELECTION-SCREEN OUTPUT.
      PERFORM update_pb_visible.
    
    *&---------------------------------------------------------------------*
    *&      Form  SET_CHAR
    *&---------------------------------------------------------------------*
    *       在lt_game中设置相应字母,
    *       并在lt_number中删除对应行,并更新按钮图片
    *----------------------------------------------------------------------*
    *      -->P_LT_GAME  text
    *      -->P_LT_NUMBER  text
    *      -->P_RANDNUM1  text
    *----------------------------------------------------------------------*
    FORM update_internaltable_and_icon USING p_chr.
      DATA: row TYPE p,
            col TYPE p,
            left TYPE p,
            right TYPE p,
            pbname(5) TYPE c,
            pbnum(3) TYPE c,
            chr_index TYPE i.
      FIELD-SYMBOLS <pbname> TYPE ANY.
    
      READ TABLE lt_number INDEX randnum.
    
    *修改lt_game
      row = FLOOR( ( lt_number-number - 1 ) / 12 ) + 2.
      col = ( lt_number-number - 1 )  MOD 12 + 2.
      left = col - 1.
      right = 14 - col.
    
      READ TABLE lt_game INDEX row.
      CONCATENATE lt_game-value+0(left) p_chr lt_game-value+col(right) INTO lt_game-value.
      MODIFY lt_game INDEX row.
    
    *在lt_number中删除对应行
      DELETE lt_number INDEX randnum.
    
    *更新图片
      pbnum = lt_number-number.
      PERFORM get_pb_name USING pbnum CHANGING pbname.
      ASSIGN (pbname) TO <pbname>.
    
      FIND p_chr IN SECTION OFFSET 0 OF l_chars
         MATCH OFFSET chr_index.
      chr_index = chr_index + 1.
      READ TABLE lt_pic INDEX chr_index.
      IF <pbname> IS ASSIGNED.
        <pbname> = lt_pic-id.
      ENDIF.
    ENDFORM. " SET_CHAR
    *&---------------------------------------------------------------------*
    *&      Form  GET_AREA
    *&---------------------------------------------------------------------*
    *       根据button或p_row、p_col获取其area
    *----------------------------------------------------------------------*
    *      -->AREA       text
    *      -->PB_UCOMM   text
    *----------------------------------------------------------------------*
    FORM get_area TABLES area STRUCTURE lt_area USING pb_ucomm p_row p_col.
      DATA: num TYPE p,
            row TYPE p,
            col TYPE p,
            tmprow TYPE p,
            tmpcol TYPE p,
            chr(1) TYPE c.
    
      IF pb_ucomm NE ''.
        num = pb_ucomm+2(3).
        row = FLOOR( ( num - 1 ) / 12 ) + 2.
        col = ( num - 1 )  MOD 12 + 2.
      ELSE.
        row = p_row.
        col = p_col.
      ENDIF.
    
      READ TABLE lt_game INDEX row.
      tmpcol = col - 1.
      area-chr = lt_game-value+tmpcol(1).
    
      area-row = row.
      area-col = col.
    
    *取Top
      tmprow = row - 1.
      tmpcol = col - 1.
      READ TABLE lt_game INDEX tmprow.
      chr = lt_game-value+tmpcol(1).
      WHILE chr EQ '#'.
        IF tmprow = 0.
          EXIT.
        ENDIF.
        tmprow = tmprow - 1.
        READ TABLE lt_game INDEX tmprow.
        chr = lt_game-value+tmpcol(1).
      ENDWHILE.
      area-top = tmprow + 1.
    
    *取Left
      tmprow = row.
      tmpcol = col - 2.
      READ TABLE lt_game INDEX tmprow.
      chr = lt_game-value+tmpcol(1).
      WHILE chr EQ '#'.
        IF tmpcol = 0.
          EXIT.
        ENDIF.
        tmpcol = tmpcol - 1.
        chr = lt_game-value+tmpcol(1).
      ENDWHILE.
      IF tmpcol = 0.
        area-left = 1.
      ELSE.
        area-left = tmpcol + 2.
      ENDIF.
    
    *取Bottom
      tmprow = row + 1.
      tmpcol = col - 1.
      READ TABLE lt_game INDEX tmprow.
      chr = lt_game-value+tmpcol(1).
      WHILE chr EQ '#'.
        IF tmprow = 15.
          EXIT.
        ENDIF.
        tmprow = tmprow + 1.
        READ TABLE lt_game INDEX tmprow.
        chr = lt_game-value+tmpcol(1).
      ENDWHILE.
      area-bottom = tmprow - 1.
    
    *取Right
      tmprow = row.
      tmpcol = col.
      READ TABLE lt_game INDEX tmprow.
      chr = lt_game-value+tmpcol(1).
      WHILE chr EQ '#'.
        IF tmpcol = 13.
          EXIT.
        ENDIF.
        tmpcol = tmpcol + 1.
        chr = lt_game-value+tmpcol(1).
      ENDWHILE.
      IF tmpcol = 13.
        area-right = 14.
      ELSE.
        area-right = tmpcol.
      ENDIF.
    
      APPEND area.
    ENDFORM. "GET_AREA
    *&---------------------------------------------------------------------*
    *&      Form  check_connected
    *&---------------------------------------------------------------------*
    *       查看是否可以连接
    *----------------------------------------------------------------------*
    *      -->LASTPB     text
    *      -->CURPB      text
    *----------------------------------------------------------------------*
    FORM check_connect TABLES lt_area1 STRUCTURE lt_area
                                lt_area2 STRUCTURE lt_area
                       CHANGING connect.
      DATA: tmpnum TYPE i.
    
      READ TABLE lt_area1 INDEX 1.
      READ TABLE lt_area2 INDEX 1.
    
      IF lt_area1-chr EQ '#' OR lt_area2-chr EQ '#'.
        connect = ''.
        EXIT.
      ENDIF.
    
      IF lt_area1-chr NE lt_area2-chr.
        connect = ''.
        EXIT.
      ENDIF.
    
    *相邻情况下的判断
      tmpnum = ABS( lt_area1-row - lt_area2-row ) + ABS( lt_area1-col - lt_area2-col ).
      IF tmpnum = 1.
        connect = 'X'.
        EXIT.
      ENDIF.
    
      DATA: j TYPE i,
             k TYPE i,
             l TYPE i,
             m TYPE i,
             n TYPE i,
             flag_failed(1) TYPE c,
             tmpchr(1) TYPE c.
    
    
    
    *不相邻的时候,判断方式一
      j = lt_area1-top.
      WHILE j <= lt_area1-bottom.
        k = lt_area2-top.
        WHILE k <= lt_area2-bottom.
          IF j EQ k.
            READ TABLE lt_game INDEX j.
            IF lt_area1-col < lt_area2-col.
              l = lt_area1-col + 1.
              m = lt_area2-col - 1.
              flag_failed = ''.
              WHILE l <= m.
                n = l - 1.
                tmpchr = lt_game-value+n(1).
                IF tmpchr NE '#'.
                  flag_failed = 'X'.
                  EXIT.
                ENDIF.
                l = l + 1.
              ENDWHILE.
              IF flag_failed = ''.
                connect = 'X'.
                RETURN.
              ENDIF.
            ELSE.
              l = lt_area2-col + 1.
              m = lt_area1-col - 1.
              flag_failed = ''.
              WHILE l <= m.
                n = l - 1.
                tmpchr = lt_game-value+n(1).
                IF tmpchr NE '#'.
                  flag_failed = 'X'.
                  EXIT.
                ENDIF.
                l = l + 1.
              ENDWHILE.
              IF flag_failed = ''.
                connect = 'X'.
                RETURN.
              ENDIF.
            ENDIF.
          ENDIF.
          k = k + 1.
        ENDWHILE.
        j = j + 1.
      ENDWHILE.
    
    
    *不相邻的时候,判断方式二
      j = lt_area1-left.
      WHILE j <= lt_area1-right.
        k = lt_area2-left.
        WHILE k <= lt_area2-right.
          IF j EQ k.
            IF lt_area1-row < lt_area2-row.
              l = lt_area1-row + 1.
              m = lt_area2-row - 1.
              flag_failed = ''.
              WHILE l <= m.
                n = j - 1.
                READ TABLE lt_game INDEX l.
                tmpchr = lt_game-value+n(1).
                IF tmpchr NE '#'.
                  flag_failed = 'X'.
                  EXIT.
                ENDIF.
                l = l + 1.
              ENDWHILE.
              IF flag_failed = ''.
                connect = 'X'.
                RETURN.
              ENDIF.
            ELSE.
              l = lt_area2-row + 1.
              m = lt_area1-row - 1.
              flag_failed = ''.
              WHILE l <= m.
                n = j - 1.
                READ TABLE lt_game INDEX l.
                tmpchr = lt_game-value+n(1).
                IF tmpchr NE '#'.
                  flag_failed = 'X'.
                  EXIT.
                ENDIF.
                l = l + 1.
              ENDWHILE.
              IF flag_failed = ''.
                connect = 'X'.
                RETURN.
              ENDIF.
            ENDIF.
          ENDIF.
          k = k + 1.
        ENDWHILE.
        j = j + 1.
      ENDWHILE.
      connect = ''.
    ENDFORM. "check_connected
    *&---------------------------------------------------------------------*
    *&      Form  CLEAR_PIC
    *&---------------------------------------------------------------------*
    *       隐藏按钮,并更新lt_game
    *----------------------------------------------------------------------*
    *      -->P_LAST_PB  text
    *----------------------------------------------------------------------*
    FORM clear_pb USING pbname.
      FIELD-SYMBOLS <pbname> TYPE ANY.
      ASSIGN (pbname) TO <pbname>.
      <pbname> = icon_space.
    
      DATA: row TYPE p,
             col TYPE p,
             left TYPE p,
             right TYPE p,
             modnum TYPE p,
             costtime(4) TYPE c,
             msg(40) TYPE c.
    
      row = FLOOR( ( pbname+2(3) - 1 ) / 12 ) + 2.
      col = ( pbname+2(3) - 1 )  MOD 12 + 2.
      left = col - 1.
      right = 14 - col.
    
      READ TABLE lt_game INDEX row.
      CONCATENATE lt_game-value+0(left) '#' lt_game-value+col(right) INTO lt_game-value.
      MODIFY lt_game INDEX row.
    
      left_pbs = left_pbs - 1.
      IF left_pbs = 0.
        msg = ''.
        GET RUN TIME FIELD l_end_time.
        l_cost_time = ( l_end_time - l_start_time ) / 1000000 + l_reform_count * 20 + l_hint_count * 5.
        costtime = l_cost_time.
        CONCATENATE '恭喜你!用时为:' costtime '秒!' INTO msg.
        CONDENSE msg NO-GAPS.
        MESSAGE msg TYPE 'S'.
        PERFORM high_scores_read.
        PERFORM high_scores_update.
        PERFORM high_scores_show.
        EXIT.
      ENDIF.
    
      modnum = left_pbs MOD 2.
      IF modnum = 0.
        PERFORM check_dead.
      ENDIF.
    
    ENDFORM. " CLEAR_PIC
    *&---------------------------------------------------------------------*
    *&      Form  get_pb_chr
    *&---------------------------------------------------------------------*
    *       根据pbname获取其代表的字母
    *----------------------------------------------------------------------*
    *      -->PBNAME     text
    *----------------------------------------------------------------------*
    FORM get_pb_chr USING pbname.
      DATA: num TYPE p,
            row TYPE p,
            col TYPE p,
            tmpcol TYPE p.
    
      num = pbname+2(3).
      row = FLOOR( ( num - 1 ) / 12 ) + 2.
      col = ( num - 1 )  MOD 12 + 2.
    
      READ TABLE lt_game INDEX row.
      tmpcol = col - 1.
      l_pb_chr = lt_game-value+tmpcol(1).
    ENDFORM. "get_pb_chr
    
    
    *&---------------------------------------------------------------------*
    *&      Form  get_chr
    *&---------------------------------------------------------------------*
    *       根据p_row、p_col获取相应位置的字母
    *----------------------------------------------------------------------*
    *      -->P_ROW      text
    *      -->P_COL      text
    *----------------------------------------------------------------------*
    FORM get_chr USING p_row p_col CHANGING p_chr.
      DATA: row TYPE p,
            col TYPE p.
      row = p_row.
      col = p_col - 1.
      READ TABLE lt_game INDEX row.
      p_chr = lt_game-value+col(1).
    ENDFORM. "get_chr
    *&---------------------------------------------------------------------*
    *&      Form  GET_HINT
    *&---------------------------------------------------------------------*
    *       获取提示。
    *       若成功,则hintcount每次加一。
    *       如果没有可供消除的,更新l_dead为'X'。
    *----------------------------------------------------------------------*
    *      -->HINTCOUNT  text
    *      -->RESULT     text
    *----------------------------------------------------------------------*
    FORM get_hint USING flag_show_msg. "
      DATA: row1 TYPE p VALUE 2,
            col1 TYPE p VALUE 2,
            row2 TYPE p,
            col2 TYPE p,
            crow1(2) TYPE c,
            ccol1(2) TYPE c,
            crow2(2) TYPE c,
            ccol2(2) TYPE c,
            area1 LIKE lt_area OCCURS 0,
            area2 LIKE lt_area OCCURS 0,
            can_connect(1) TYPE c,
            msg(40) TYPE c,
            chr1(1) TYPE c,
            chr2(1) TYPE c.
    
      WHILE row1 <= 13.
        WHILE col1 <= 13.
          PERFORM get_chr USING row1 col1 CHANGING chr1.
          IF chr1 NE '#'.
            IF col1 = 13 .
              IF row1 = 13.
                l_dead = 'X'.
                RETURN.
              ELSE.
                row2 = row1 + 1.
                col2 = 2.
              ENDIF.
            ELSE.
              row2 = row1.
              col2 = col1 + 1.
            ENDIF.
            WHILE row2 <= 13.
              WHILE col2 <= 13.
                PERFORM get_chr USING row2 col2 CHANGING chr2.
                IF chr2 EQ chr1.
                  REFRESH: area1, area2.
                  PERFORM get_area TABLES area1 USING '' row1 col1.
                  PERFORM get_area TABLES area2 USING '' row2 col2.
                  PERFORM check_connect TABLES area1 area2 CHANGING can_connect.
                  IF can_connect = 'X'.
                    IF flag_show_msg EQ 'X'.
                      crow1 = row1 - 1.
                      ccol1 = col1 - 1.
                      crow2 = row2 - 1.
                      ccol2 = col2 - 1.
                      l_hint_count = l_hint_count + 1.
                      CONCATENATE '' l_hint_count '次提示:第' crow1 '行第'
                        ccol1 '列----第' crow2 '行第' ccol2 '' ',耗时增加5秒!' INTO msg.
                      CONDENSE msg NO-GAPS.
                      MESSAGE msg TYPE 'S'.
                      "闪烁
                      DATA: pbnum(3) TYPE c.
                      l_hint_pb1 = l_hint_pb1 = ''.
                      pbnum = ( crow1 - 1 ) * 12 + ccol1.
                      PERFORM get_pb_name USING pbnum CHANGING l_hint_pb1.
                      pbnum = ( crow2 - 1 ) * 12 + ccol2.
                      PERFORM get_pb_name USING pbnum CHANGING l_hint_pb2.
                      IF l_hint_icon1 EQ ''.
                        PERFORM pb_twinkle.
                        PERFORM init_timer_twinkle.
                      ENDIF.
                    ENDIF.
                    l_dead = ''.
                    RETURN.
                  ENDIF.
                ENDIF.
                col2 = col2 + 1.
              ENDWHILE.
              row2 = row2 + 1.
              col2 = 2.
            ENDWHILE.
          ENDIF.
          col1 = col1 + 1.
        ENDWHILE.
        row1 = row1 + 1.
        col1 = 2.
      ENDWHILE.
      l_dead = 'X'.
    ENDFORM. "GET_HINT
    
    
    *&---------------------------------------------------------------------*
    *&      Form  reform
    *&---------------------------------------------------------------------*
    *       重排
    *----------------------------------------------------------------------*
    FORM reform USING p_flag. "系统自动重拍时,不累计重排次数
      DATA: BEGIN OF ft_chars OCCURS 0,
        chr(1) TYPE c,
      END OF ft_chars.
      DATA: f_counts TYPE i,
            j TYPE i VALUE 2,
            k TYPE i VALUE 1,
            msg(40) TYPE c.
    
    *所有剩余的字母放入fm_chars.
      WHILE j <= 13.
        READ TABLE lt_game INDEX j.
        WHILE k <= 12.
          IF lt_game-value+k(1) NE '#'.
            ft_chars-chr = lt_game-value+k(1).
            APPEND ft_chars.
          ENDIF.
          k = k + 1.
        ENDWHILE.
        j = j + 1.
        k = 1.
      ENDWHILE.
    
    *初始化lt_game以及lt_number.
      REFRESH: lt_game, lt_number.
      DO 14 TIMES.  "初始化lt_game为14个#
        lt_game-value = '##############'.
        APPEND lt_game.
      ENDDO.
      DO 144 TIMES. "为lt_number赋值:1~144
        lt_number-number = sy-index.
        APPEND lt_number.
      ENDDO.
    
    *随机将数据放入lt_game
      LOOP AT ft_chars.
        DESCRIBE TABLE lt_number LINES linecount.
        CALL FUNCTION 'QF05_RANDOM_INTEGER'
          EXPORTING
            ran_int_max   = linecount
            ran_int_min   = 1
          IMPORTING
            ran_int       = randnum
          EXCEPTIONS
            invalid_input = 1
            OTHERS        = 2.
        PERFORM update_internaltable_and_icon USING ft_chars-chr.
      ENDLOOP.
    
      PERFORM update_pb_visible.
    
      IF p_flag = ''.
        l_reform_count = l_reform_count + 1.
        msg = l_reform_count.
        CONCATENATE '' msg '次重排,耗时增加20秒!' INTO msg.
        CONDENSE msg NO-GAPS.
        MESSAGE msg TYPE 'S'.
      ENDIF.
    ENDFORM. "reform
    *&---------------------------------------------------------------------*
    *&      Form  check_dead
    *&---------------------------------------------------------------------*
    *       检查是否还有可以消除的,如果没有,自动执行重排直至有可以消除的为止
    *----------------------------------------------------------------------*
    FORM check_dead.
      PERFORM get_hint USING ''.
      WHILE l_dead EQ 'X'.
        MESSAGE '没有可以消除的图片,自动进行重排' TYPE 'S'.
        PERFORM reform USING 'X'.
        PERFORM get_hint USING ''.
      ENDWHILE.
    ENDFORM. "check_dead
    *&---------------------------------------------------------------------*
    *&      Form  Update_pb_visible
    *&---------------------------------------------------------------------*
    *       重排后,刷新按钮的可见性
    *----------------------------------------------------------------------*
    FORM update_pb_visible.
      LOOP AT SCREEN.
        CHECK screen-name+0(2) EQ 'PB'.
        PERFORM get_pb_chr USING screen-name.
        IF l_pb_chr EQ '#'.
          screen-invisible = '1'.
        ELSE.
          screen-invisible = '0'.
        ENDIF.
        MODIFY SCREEN.
      ENDLOOP.
    ENDFORM. "Update_pb_visible
    *&---------------------------------------------------------------------*
    *&      Form  init_timer_progress
    *&---------------------------------------------------------------------*
    *       初始化进度条计时器
    *----------------------------------------------------------------------*
    FORM init_timer_progress.
      CHECK go_timer IS INITIAL.
      CREATE OBJECT go_timer
        EXCEPTIONS
          OTHERS = 9.
      CREATE OBJECT go_evt_hndl.
      SET HANDLER go_evt_hndl->handle_timer FOR go_timer.
      go_timer->interval = 12.                                  "设置间隔为6秒
      CALL METHOD go_timer->run "激活定时器
      EXCEPTIONS
        OTHERS = 9.
    ENDFORM. " init_timer_progress
    *&---------------------------------------------------------------------*
    *&      Form  init_timer_twinkle
    *&---------------------------------------------------------------------*
    *       初始化闪烁计时器
    *----------------------------------------------------------------------*
    FORM init_timer_twinkle.
      CREATE OBJECT twinkle_timer
        EXCEPTIONS
          OTHERS = 9.
      CREATE OBJECT twinkle_evt_hndl.
      SET HANDLER twinkle_evt_hndl->handle_twinkle FOR twinkle_timer.
      twinkle_timer->interval = 1.                              "设置间隔为1秒
      CALL METHOD twinkle_timer->run "激活定时器
      EXCEPTIONS
        OTHERS = 9.
    ENDFORM. "init_timer_twinkle
    *&---------------------------------------------------------------------*
    *&      Form  high_scores_read
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM high_scores_read.
      REFRESH high_scores.
      IMPORT lines = high_scores[] FROM DATABASE indx(st) ID database_id.
    ENDFORM. "high_scores_read
    *&---------------------------------------------------------------------*
    *&      Form  high_scores_show
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM high_scores_show.
      DATA: s(7) TYPE c, line(3) TYPE c.
      FIELD-SYMBOLS: <fs0> TYPE c,
                     <fs1> TYPE c,
                     <fs2> TYPE c,
                     <fs3> TYPE c,
                     <fs4> TYPE c.
    
      DO 177 TIMES.
        line = sy-index.
        CONDENSE line NO-GAPS.
        CONCATENATE 'hs1_' line INTO s.
        ASSIGN (s) TO <fs0>.
        CONCATENATE 'hs2_' line INTO s.
        ASSIGN (s) TO <fs1>.
        CONCATENATE 'hs3_' line INTO s.
        ASSIGN (s) TO <fs2>.
        CONCATENATE 'hs4_' line INTO s.
        ASSIGN (s) TO <fs3>.
        CONCATENATE 'hs5_' line INTO s.
        ASSIGN (s) TO <fs4>.
        READ TABLE high_scores INDEX sy-index.
        IF high_scores-user = 'AC-LSUN'.
          high_scores-user = '************'.
        ENDIF.
        IF sy-subrc EQ 0.
          <fs0> = line.
          <fs1> = high_scores-user.
          <fs2> = high_scores-time.
          <fs3> = high_scores-hintcount.
          <fs4> = high_scores-reformcount.
          CONDENSE <fs3> NO-GAPS.
          CONDENSE <fs4> NO-GAPS.
          IF <fs1> <> '' AND <fs3> = ''.
            <fs3> = '0'.
          ENDIF.
          IF <fs1> <> '' AND <fs4> = ''.
            <fs4> = '0'.
          ENDIF.
        ELSE.
          CLEAR: <fs0>, <fs1>, <fs2>, <fs3>.
          EXIT.
        ENDIF.
      ENDDO.
    ENDFORM. "high_scores_show
    *&---------------------------------------------------------------------*
    *&      Form  high_scores_update
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM high_scores_update.
      high_scores-user = sy-uname.
      WRITE l_cost_time TO high_scores-time RIGHT-JUSTIFIED.
      WRITE l_hint_count TO high_scores-hintcount.
      WRITE l_reform_count TO high_scores-reformcount.
      APPEND high_scores.
      SORT high_scores BY time user hintcount reformcount.
    *  LOOP AT high_scores FROM 11.
    *    DELETE high_scores INDEX sy-tabix.
    *  ENDLOOP.
      EXPORT lines = high_scores[] TO DATABASE indx(st) ID database_id.
    ENDFORM. "high_scores_update
    *&---------------------------------------------------------------------*
    *&      Form  PB_TWINKLE
    *&---------------------------------------------------------------------*
    *       闪烁
    *----------------------------------------------------------------------*
    *      -->P_CROW1  text
    *      -->P_CCOL1  text
    *      -->P_CROW2  text
    *      -->P_CCOL2  text
    *----------------------------------------------------------------------*
    FORM pb_twinkle.
      FIELD-SYMBOLS: <pbname1> TYPE ANY,
                     <pbname2> TYPE ANY.
    
      ASSIGN (l_hint_pb1) TO <pbname1>.
      ASSIGN (l_hint_pb2) TO <pbname2>.
      IF <pbname1> NE icon_space.
        l_hint_icon1 = <pbname1>.
        <pbname1> = icon_space.
      ELSE.
        <pbname1> = l_hint_icon1.
        l_hint_icon1 = ''.
      ENDIF.
      IF <pbname2> NE icon_space.
        l_hint_icon2 = <pbname2>.
        <pbname2> = icon_space.
      ELSE.
        <pbname2> = l_hint_icon2.
        l_hint_icon1 = ''.
      ENDIF.
    ENDFORM. " PB_TWINKLE
    *&---------------------------------------------------------------------*
    *&      Form  get_pb_name
    *&---------------------------------------------------------------------*
    *       根据pushbutton的编号获取其名字
    *----------------------------------------------------------------------*
    *      -->P_PBNUM    text
    *      -->P_PBNAME   text
    *----------------------------------------------------------------------*
    FORM get_pb_name USING p_pbnum CHANGING p_pbname.
      DATA: pbnum(3) TYPE c.
      pbnum = p_pbnum.
      CONDENSE pbnum NO-GAPS.
      IF STRLEN( pbnum ) EQ 1.
        CONCATENATE 'PB00' pbnum INTO p_pbname.
      ELSEIF STRLEN( pbnum ) EQ 2.
        CONCATENATE 'PB0' pbnum INTO p_pbname.
      ELSE.
        CONCATENATE 'PB' pbnum INTO p_pbname.
      ENDIF.
    ENDFORM. "get_pb_name
    *&---------------------------------------------------------------------*
    *&      Form  ALV_SHOW_RECORD
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM alv_show_record .
      DATA: ls_layout TYPE slis_layout_alv.
      DATA: lt_fieldcat TYPE slis_t_fieldcat_alv,
            ls_fieldcat TYPE slis_fieldcat_alv.
      DATA: BEGIN OF lt_data OCCURS 0.
      DATA: num TYPE i.
      INCLUDE TYPE score_line.
      DATA: END OF lt_data.
      ls_layout-zebra = 'X'.
      ls_layout-colwidth_optimize = 'X'.
    
      DEFINE append_fieldcat.
        ls_fieldcat-fieldname = &1.
        ls_fieldcat-seltext_l = &2.
        ls_fieldcat-seltext_m = &2.
        ls_fieldcat-seltext_s = &2.
        append ls_fieldcat to lt_fieldcat.
      END-OF-DEFINITION.
    
      append_fieldcat 'NUM' '排名' .
      append_fieldcat 'USER' 'User' .
      append_fieldcat 'TIME' '时间' .
      append_fieldcat 'HINTCOUNT' '提示次数' .
      append_fieldcat 'REFORMCOUNT' '重排次数' .
    
      PERFORM high_scores_read.
    
      LOOP AT high_scores.
        MOVE-CORRESPONDING high_scores TO lt_data.
        lt_data-num = sy-tabix.
        IF lt_data-user = 'AC-LSUN'.
          lt_data-user = '************'.
        ENDIF.
        APPEND lt_data.
      ENDLOOP.
    
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
        EXPORTING
    *      i_callback_program = sy-repid
          is_layout          = ls_layout
          it_fieldcat        = lt_fieldcat
          i_grid_title       = '排行榜'
        TABLES
          t_outtab           = lt_data[]
        EXCEPTIONS
          program_error      = 1
          OTHERS             = 2.
    ENDFORM.                    " ALV_SHOW_RECORD

    。。。我手机没玩过,所以总是连不完

  • 相关阅读:
    数据库原理 第七章 数据库设计和ER模型
    jeecgboot常见问题及处理方法-found character '@' that cannot start any token. (Do not use @ for indentation)
    jeecgboot积木报表(jimuReport)Oracle切换
    datart表结构
    这几天找工作的经历
    Jenkins 无法登陆解决方法
    Nginx 部署前后端分离项目(SpringBoot Vue)
    CentOS7 用yum方式安装Nginx
    Centos 7 安装 MYSQL 8.0
    Centos 7 安装 JDK1.8
  • 原文地址:https://www.cnblogs.com/sapSB/p/4815541.html
Copyright © 2020-2023  润新知