Quantcast
Channel: SCN : Popular Discussions - ABAP和Java开发 (ABAP & Java Development)
Viewing all articles
Browse latest Browse all 4604

ABAP 写的小游戏,供大家娱乐

$
0
0

code}

&----


*& Report  Z_BUTTON_GAME                                               *

*&                                                                     *

&----


*&                                                                     *

*&                                                                     *

&----


 

REPORT z_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

 

 


Viewing all articles
Browse latest Browse all 4604

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>