ABAP代码如下,供参考:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 |
REPORT ztest_button_game. INCLUDE <icon>. TABLES : sscrfields. *** internal table for storing the list of icons temporarily DATA : BEGIN OF i_icons OCCURS 1000, id LIKE icon-id, END OF i_icons. *** internal table for storing the 32 icons/pictures DATA : BEGIN OF i_iconlist OCCURS 32, id LIKE icon-id, END OF i_iconlist. *** internal table for storing the icons in the 64 positions DATA : BEGIN OF i_layout OCCURS 0, row(1) TYPE n, col(1) TYPE n, id LIKE icon-id, END OF i_layout. *** data declaration DATA : w_layout LIKE i_layout. DATA : ran_no TYPE i. DATA : len TYPE i. DATA : subrc LIKE sy-subrc. DATA : count TYPE i. DATA : name(10). DATA : flg_one. DATA : flg_two. DATA : icon_one LIKE icon-id. DATA : icon_two LIKE icon-id. DATA : b_one(5). DATA : b_two(5). DATA : current_ucomm LIKE sscrfields-ucomm. FIELD-SYMBOLS : <fs> TYPE any. **** selection-screen declaration. *** keeping the button names and its user-command same will *** make things easier later.... SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME NO INTERVALS. SELECTION-SCREEN SKIP 1. SELECTION-SCREEN PUSHBUTTON /2(4) pb11 USER-COMMAND pb11. SELECTION-SCREEN PUSHBUTTON 9(4) pb12 USER-COMMAND pb12. SELECTION-SCREEN PUSHBUTTON 16(4) pb13 USER-COMMAND pb13. SELECTION-SCREEN PUSHBUTTON 23(4) pb14 USER-COMMAND pb14. SELECTION-SCREEN PUSHBUTTON 30(4) pb15 USER-COMMAND pb15. SELECTION-SCREEN PUSHBUTTON 37(4) pb16 USER-COMMAND pb16. SELECTION-SCREEN PUSHBUTTON 44(4) pb17 USER-COMMAND pb17. SELECTION-SCREEN PUSHBUTTON 51(4) pb18 USER-COMMAND pb18. SELECTION-SCREEN SKIP 1. SELECTION-SCREEN PUSHBUTTON /2(4) pb21 USER-COMMAND pb21. SELECTION-SCREEN PUSHBUTTON 9(4) pb22 USER-COMMAND pb22. SELECTION-SCREEN PUSHBUTTON 16(4) pb23 USER-COMMAND pb23. SELECTION-SCREEN PUSHBUTTON 23(4) pb24 USER-COMMAND pb24. SELECTION-SCREEN PUSHBUTTON 30(4) pb25 USER-COMMAND pb25. SELECTION-SCREEN PUSHBUTTON 37(4) pb26 USER-COMMAND pb26. SELECTION-SCREEN PUSHBUTTON 44(4) pb27 USER-COMMAND pb27. SELECTION-SCREEN PUSHBUTTON 51(4) pb28 USER-COMMAND pb28. SELECTION-SCREEN SKIP 1. SELECTION-SCREEN PUSHBUTTON /2(4) pb31 USER-COMMAND pb31. SELECTION-SCREEN PUSHBUTTON 9(4) pb32 USER-COMMAND pb32. SELECTION-SCREEN PUSHBUTTON 16(4) pb33 USER-COMMAND pb33. SELECTION-SCREEN PUSHBUTTON 23(4) pb34 USER-COMMAND pb34. SELECTION-SCREEN PUSHBUTTON 30(4) pb35 USER-COMMAND pb35. SELECTION-SCREEN PUSHBUTTON 37(4) pb36 USER-COMMAND pb36. SELECTION-SCREEN PUSHBUTTON 44(4) pb37 USER-COMMAND pb37. SELECTION-SCREEN PUSHBUTTON 51(4) pb38 USER-COMMAND pb38. SELECTION-SCREEN SKIP 1. SELECTION-SCREEN PUSHBUTTON /2(4) pb41 USER-COMMAND pb41. SELECTION-SCREEN PUSHBUTTON 9(4) pb42 USER-COMMAND pb42. SELECTION-SCREEN PUSHBUTTON 16(4) pb43 USER-COMMAND pb43. SELECTION-SCREEN PUSHBUTTON 23(4) pb44 USER-COMMAND pb44. SELECTION-SCREEN PUSHBUTTON 30(4) pb45 USER-COMMAND pb45. SELECTION-SCREEN PUSHBUTTON 37(4) pb46 USER-COMMAND pb46. SELECTION-SCREEN PUSHBUTTON 44(4) pb47 USER-COMMAND pb47. SELECTION-SCREEN PUSHBUTTON 51(4) pb48 USER-COMMAND pb48. SELECTION-SCREEN SKIP 1. SELECTION-SCREEN PUSHBUTTON /2(4) pb51 USER-COMMAND pb51. SELECTION-SCREEN PUSHBUTTON 9(4) pb52 USER-COMMAND pb52. SELECTION-SCREEN PUSHBUTTON 16(4) pb53 USER-COMMAND pb53. SELECTION-SCREEN PUSHBUTTON 23(4) pb54 USER-COMMAND pb54. SELECTION-SCREEN PUSHBUTTON 30(4) pb55 USER-COMMAND pb55. SELECTION-SCREEN PUSHBUTTON 37(4) pb56 USER-COMMAND pb56. SELECTION-SCREEN PUSHBUTTON 44(4) pb57 USER-COMMAND pb57. SELECTION-SCREEN PUSHBUTTON 51(4) pb58 USER-COMMAND pb58. SELECTION-SCREEN SKIP 1. SELECTION-SCREEN PUSHBUTTON /2(4) pb61 USER-COMMAND pb61. SELECTION-SCREEN PUSHBUTTON 9(4) pb62 USER-COMMAND pb62. SELECTION-SCREEN PUSHBUTTON 16(4) pb63 USER-COMMAND pb63. SELECTION-SCREEN PUSHBUTTON 23(4) pb64 USER-COMMAND pb64. SELECTION-SCREEN PUSHBUTTON 30(4) pb65 USER-COMMAND pb65. SELECTION-SCREEN PUSHBUTTON 37(4) pb66 USER-COMMAND pb66. SELECTION-SCREEN PUSHBUTTON 44(4) pb67 USER-COMMAND pb67. SELECTION-SCREEN PUSHBUTTON 51(4) pb68 USER-COMMAND pb68. SELECTION-SCREEN SKIP 1. SELECTION-SCREEN PUSHBUTTON /2(4) pb71 USER-COMMAND pb71. SELECTION-SCREEN PUSHBUTTON 9(4) pb72 USER-COMMAND pb72. SELECTION-SCREEN PUSHBUTTON 16(4) pb73 USER-COMMAND pb73. SELECTION-SCREEN PUSHBUTTON 23(4) pb74 USER-COMMAND pb74. SELECTION-SCREEN PUSHBUTTON 30(4) pb75 USER-COMMAND pb75. SELECTION-SCREEN PUSHBUTTON 37(4) pb76 USER-COMMAND pb76. SELECTION-SCREEN PUSHBUTTON 44(4) pb77 USER-COMMAND pb77. SELECTION-SCREEN PUSHBUTTON 51(4) pb78 USER-COMMAND pb78. SELECTION-SCREEN SKIP 1. SELECTION-SCREEN PUSHBUTTON /2(4) pb81 USER-COMMAND pb81. SELECTION-SCREEN PUSHBUTTON 9(4) pb82 USER-COMMAND pb82. SELECTION-SCREEN PUSHBUTTON 16(4) pb83 USER-COMMAND pb83. SELECTION-SCREEN PUSHBUTTON 23(4) pb84 USER-COMMAND pb84. SELECTION-SCREEN PUSHBUTTON 30(4) pb85 USER-COMMAND pb85. SELECTION-SCREEN PUSHBUTTON 37(4) pb86 USER-COMMAND pb86. SELECTION-SCREEN PUSHBUTTON 44(4) pb87 USER-COMMAND pb87. SELECTION-SCREEN PUSHBUTTON 51(4) pb88 USER-COMMAND pb88. SELECTION-SCREEN SKIP 1. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(15) no_tries. PARAMETERS : p_tries TYPE i MODIF ID hid VISIBLE LENGTH 3. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN END OF BLOCK b1. INITIALIZATION. PERFORM do_initialization. AT SELECTION-SCREEN OUTPUT. IF i_layout[] IS INITIAL. MESSAGE i000(z01) WITH 'You have WON !!!'. ENDIF. *** make the count field display only LOOP AT SCREEN. IF screen-group1 = 'HID'. screen-input = 0. MODIFY SCREEN. ENDIF. ENDLOOP. AT SELECTION-SCREEN. *** make sure it is one of the buttons that is clicked and *** not clicking the same button again *** exception is if 2 are open and you want to keep the 2nd one open *** you can do so.... CHECK sscrfields-ucomm CS 'PB' AND ( sscrfields-ucomm <> current_ucomm OR NOT flg_two IS INITIAL ). current_ucomm = sscrfields-ucomm. *** making sure again that a button is clicked and get the icon *** hidden in the clicked button. READ TABLE i_layout WITH KEY row = sscrfields-ucomm+2(1) col = sscrfields-ucomm+3(1). CHECK sy-subrc = 0. PERFORM validate. *&---------------------------------------------------------------------* *& Form validate *&---------------------------------------------------------------------* * checking whether its the 1st or the 2nd button click, assign the ucomm * to the field-symbol. The trick is the buttons have been named same as * its ucomm, so assigning it gives the value of the button. *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM validate. IF NOT flg_two IS INITIAL. ASSIGN (b_one) TO <fs>. <fs> = '@5F@'. ASSIGN (b_two) TO <fs>. <fs> = '@5F@'. CLEAR : flg_one,flg_two, icon_one,icon_two, b_one,b_two. ENDIF. IF flg_one IS INITIAL OR flg_two IS INITIAL. ASSIGN (sscrfields-ucomm) TO <fs>. IF sy-subrc = 0. <fs> = i_layout-id. ENDIF. IF flg_one IS INITIAL. flg_one = 'X'. icon_one = i_layout-id. b_one = sscrfields-ucomm. ELSEIF flg_two IS INITIAL. flg_two = 'X'. icon_two = i_layout-id. b_two = sscrfields-ucomm. ENDIF. ENDIF. IF icon_one = icon_two. p_tries = p_tries + 1. DELETE i_layout WHERE id = icon_one. CLEAR : flg_one,flg_two,icon_one,icon_two. ENDIF. IF NOT flg_two IS INITIAL. p_tries = p_tries + 1. ENDIF. ENDFORM. " validate *&---------------------------------------------------------------------* *& Form do_initialization *&---------------------------------------------------------------------* * Make all the buttons show blank space. Also select, the list of * all icons from the standard table and select 32 from it randomly. Once * the 32 icons are selected, lay it out in pairs on the 8 X 8 board of * buttons. *----------------------------------------------------------------------* *----------------------------------------------------------------------* FORM do_initialization. no_tries = 'No. of Tries'. pb11 = pb12 = pb13 = pb14 = pb15 = pb16 = pb17 = pb18 = icon_space. pb21 = pb22 = pb23 = pb24 = pb25 = pb26 = pb27 = pb28 = icon_space. pb31 = pb32 = pb33 = pb34 = pb35 = pb36 = pb37 = pb38 = icon_space. pb41 = pb42 = pb43 = pb44 = pb45 = pb46 = pb47 = pb48 = icon_space. pb51 = pb52 = pb53 = pb54 = pb55 = pb56 = pb57 = pb58 = icon_space. pb61 = pb62 = pb63 = pb64 = pb65 = pb66 = pb67 = pb68 = icon_space. pb71 = pb72 = pb73 = pb74 = pb75 = pb76 = pb77 = pb78 = icon_space. pb81 = pb82 = pb83 = pb84 = pb85 = pb86 = pb87 = pb88 = icon_space. SELECT id FROM icon INTO TABLE i_icons WHERE NOT id IN ('@5F@','@E5@','@00@','@E6@','@E7@', '@EI@','@GE@','@GG@','@JX@','@JY@', '@JZ@','@K0@'). DESCRIBE TABLE i_icons LINES len. CLEAR : subrc. WHILE subrc < 32. CALL FUNCTION 'QF05_RANDOM_INTEGER' EXPORTING ran_int_max = len ran_int_min = 1 IMPORTING ran_int = ran_no EXCEPTIONS invalid_input = 1 OTHERS = 2. READ TABLE i_icons INDEX ran_no. READ TABLE i_iconlist WITH KEY id = i_icons-id. IF sy-subrc <> 0. i_iconlist-id = i_icons-id. APPEND i_iconlist. ENDIF. DESCRIBE TABLE i_iconlist LINES subrc. ENDWHILE. REFRESH : i_icons. CLEAR : subrc. WHILE subrc < 64. IF subrc <> 0. READ TABLE i_layout INDEX subrc. IF i_layout-col = 8. i_layout-col = 1. i_layout-row = i_layout-row + 1. ELSE. i_layout-col = i_layout-col + 1. ENDIF. ELSE. i_layout-row = 1. i_layout-col = 1. ENDIF. CLEAR : count,i_iconlist. CALL FUNCTION 'QF05_RANDOM_INTEGER' EXPORTING ran_int_max = 32 ran_int_min = 1 IMPORTING ran_int = ran_no EXCEPTIONS invalid_input = 1 OTHERS = 2. READ TABLE i_iconlist INDEX ran_no. LOOP AT i_layout INTO w_layout WHERE id = i_iconlist-id. count = count + 1. ENDLOOP. IF count < 2. i_layout-id = i_iconlist-id. APPEND i_layout. ENDIF. CLEAR : i_layout. DESCRIBE TABLE i_layout LINES subrc. ENDWHILE. CLEAR : flg_one,flg_two,icon_one,icon_two, current_ucomm. ENDFORM. " do_initialization |
运行结果:
以上。
1 条评论