우선 g_con 으로 컨테이너를 screen 100 에 만들어주시고
STATUS에 BACK EXIT CANC 를 설정해주시고요
TITLE 에 & & << 요것좀 넣어주시고 만들어주시면 잘 실행되실꺼에요 ^^;;;
초보가 만든거니.. 이해들 해주시고요...딱히 올릴곳이 없어서 여기다 올립니다.
REPORT z_ljs_008 MESSAGE-ID zljs.
*----------------------------------------------------------------------*
*베이스볼 게임
*추억의 고전 게임으로 실행을 하면 초기 범위값을 설정하는 파라미터에
*범위값을 입력(초기값10)하고 실행을 하면 그 입력값보다 같거나 작은
*중복되지 않는 값이 3개가 랜덤으로 설정된다.
*이 세개의 값을 찾는 것이 이 게임의 목표이다.
*도전 버튼을 눌러 값을 세개를 다 채운후 입력을 누르면
*정답과 비교하여 숫자 1개가 동일한 위치에 동일한 값이 입력되었으면
*1스트라이크 2볼로 결과값으로 옆에 출력이됩니다.
*만약 숫자 2개가 동일한 위치에 동알한 값이 입력되었으면
*2스트라이크 1볼로 결과값으로 옆에 출력이 됩니다.
*3개의 숫자를 다 맞추면 팝업메세지로 'N'번만에 성공하셨습니다라는
*메세지를 출력시켜줍니다.
*여러명이서 할경우 더 적은 도전으로 3스트라이크를 잡으신 분이
*승리하신 겁니다.
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION DEFERRED.
*----------------------------------------------------------------------*
DATA: g_event TYPE REF TO lcl_event_receiver.
DATA: g_con TYPE REF TO cl_gui_custom_container,
g_grid TYPE REF TO cl_gui_alv_grid,
gt_fcat TYPE lvc_t_fcat,
gs_fcat TYPE lvc_s_fcat,
gt_sort TYPE lvc_t_sort,
gs_sort TYPE lvc_s_sort,
gt_exclude TYPE ui_functions,
gs_exclude TYPE ui_func,
gs_layout TYPE lvc_s_layo,
gt_celltab TYPE lvc_t_styl,
gs_celltab TYPE lvc_s_styl,
gs_scroll TYPE lvc_s_stbl,
ok_code TYPE sy-ucomm,
save_ok TYPE sy-ucomm.
DATA: gt_color TYPE lvc_t_scol,
gs_color TYPE lvc_s_scol.
DATA: gs_variant TYPE disvariant.
*----------------------------------------------------------------------*
* internal table
*----------------------------------------------------------------------*
DATA: BEGIN OF gs_game,
ball_1 TYPE n LENGTH 2,
ball_2 TYPE n LENGTH 2,
ball_3 TYPE n LENGTH 2,
result TYPE c LENGTH 40,
celltab TYPE lvc_t_styl,
f_col TYPE lvc_t_scol,
END OF gs_game.
DATA: gt_game LIKE TABLE OF gs_game.
DATA: answers_1 TYPE n LENGTH 2,
answers_2 TYPE n LENGTH 2,
answers_3 TYPE n LENGTH 2.
*----------------------------------------------------------------------*
* selection-screen
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK block WITH FRAME TITLE text-001.
PARAMETERS : p_init TYPE n LENGTH 2.
SELECTION-SCREEN END OF BLOCK block.
*----------------------------------------------------------------------*
* CLASS lcl_event_receiver DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS:
handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object
e_interactive ,
handle_ucomm FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm.
ENDCLASS. "lcl_event_receiver DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_event_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_toolbar.
PERFORM handle_toolbar USING e_object.
ENDMETHOD. "handle_toolbar
METHOD handle_ucomm.
PERFORM handle_ucomm USING e_ucomm.
ENDMETHOD. "handle_ucomm
ENDCLASS. "lcl_event_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
INITIALIZATION.
*----------------------------------------------------------------------*
CLEAR: gs_game, gt_game.
gs_game-result = 'GAME을 시작합니다!! 행운을 빕니다 ^^'.
APPEND gs_game TO gt_game.
p_init = 10.
*----------------------------------------------------------------------*
START-OF-SELECTION.
*----------------------------------------------------------------------*
PERFORM get_answers.
*----------------------------------------------------------------------*
END-OF-SELECTION.
*----------------------------------------------------------------------*
CALL SCREEN 100.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
DATA: l_title TYPE c LENGTH 10.
CLEAR l_title.
CONCATENATE p_init '까지 베이스볼 게임' INTO l_title. "게임title.
SET PF-STATUS 'STATUS'.
SET TITLEBAR 'TITLE' WITH l_title. "TITLE에 & & & & 넣어주시고
* l_TITLE로 받아서 TEXT 뿌려줍니다.
*----------------------------------------------------------------------*
* PBO
*----------------------------------------------------------------------*
IF g_con IS INITIAL. "INIT.
CREATE OBJECT g_con
EXPORTING
container_name = 'G_CON'.
CREATE OBJECT g_grid
EXPORTING
i_parent = g_con
i_appl_events = 'X'.
*---LAYOUT
PERFORM layout.
*---FCAT
PERFORM fcat.
*---EXCLUDE
PERFORM exclude.
*---EVENT_RECEIVER
PERFORM event_receiver.
*---GRID_SET
PERFORM grid_set.
ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module EXIT INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE exit INPUT.
CLEAR ok_code.
ok_code = sy-ucomm.
CASE ok_code.
WHEN 'BACK' OR 'EXIT' OR 'CANC'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDMODULE. " EXIT INPUT
*&---------------------------------------------------------------------*
*& Form HANDLE_TOOLBAR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_E_OBJECT text
*----------------------------------------------------------------------*
FORM handle_toolbar USING p_object TYPE REF TO
cl_alv_event_toolbar_set.
DATA: ls_toolbar TYPE stb_button.
CLEAR ls_toolbar.
ls_toolbar-butn_type = 3.
APPEND ls_toolbar TO p_object->mt_toolbar.
CLEAR ls_toolbar.
ls_toolbar-function = 'NEW'.
ls_toolbar-icon = icon_create.
ls_toolbar-text = '도전'.
APPEND ls_toolbar TO p_object->mt_toolbar.
CLEAR ls_toolbar.
ls_toolbar-function = 'ENTE'.
ls_toolbar-icon = icon_complete.
ls_toolbar-text = '입력'.
APPEND ls_toolbar TO p_object->mt_toolbar.
ENDFORM. " HANDLE_TOOLBAR
*&---------------------------------------------------------------------*
*& Form HANDLE_UCOMM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_E_UCOMM text
*----------------------------------------------------------------------*
FORM handle_ucomm USING p_ucomm TYPE sy-ucomm.
DATA: l_line LIKE gs_game.
DATA: l_tabix TYPE i.
DATA: l_fieldname(10).
DATA: l_text TYPE c LENGTH 40.
DATA: l_strike TYPE n,
l_ball TYPE n.
CLEAR: l_line, l_tabix.
CLEAR: gs_celltab, gt_celltab.
CASE p_ucomm.
WHEN 'NEW'.
DESCRIBE TABLE gt_game LINES l_tabix.
READ TABLE gt_game INTO gs_game INDEX l_tabix.
APPEND l_line TO gt_game.
CLEAR l_fieldname. l_fieldname = 'BALL_1'.
PERFORM celltab USING l_fieldname 'E'.
CLEAR l_fieldname. l_fieldname = 'BALL_2'.
PERFORM celltab USING l_fieldname 'E'.
CLEAR l_fieldname. l_fieldname = 'BALL_3'.
PERFORM celltab USING l_fieldname 'E'.
WHEN 'ENTE'.
DESCRIBE TABLE gt_game LINES l_tabix.
READ TABLE gt_game INTO gs_game INDEX l_tabix.
IF gs_game-ball_1 = gs_game-ball_2
OR gs_game-ball_1 = gs_game-ball_3
OR gs_game-ball_2 = gs_game-ball_3.
MESSAGE s000 WITH '같은 숫자가 두개 입력되었습니다.'
DISPLAY LIKE 'E'.
EXIT.
ELSE.
DELETE TABLE gt_game FROM gs_game.
CLEAR l_fieldname. l_fieldname = 'BALL_1'.
PERFORM celltab USING l_fieldname 'D'.
CLEAR l_fieldname. l_fieldname = 'BALL_2'.
PERFORM celltab USING l_fieldname 'D'.
CLEAR l_fieldname. l_fieldname = 'BALL_3'.
PERFORM celltab USING l_fieldname 'D'.
CLEAR: l_text, l_tabix, l_strike, l_ball.
IF gs_game-ball_1 = answers_1.
l_strike = l_strike + 1.
ELSEIF gs_game-ball_1 <> answers_1.
l_ball = l_ball + 1.
ENDIF.
IF gs_game-ball_2 = answers_2.
l_strike = l_strike + 1.
ELSEIF gs_game-ball_2 <> answers_2.
l_ball = l_ball + 1.
ENDIF.
IF gs_game-ball_3 = answers_3.
l_strike = l_strike + 1.
ELSEIF gs_game-ball_3 <> answers_3.
l_ball = l_ball + 1.
ENDIF.
CONCATENATE l_strike '스트라이크 ' l_ball '볼'
INTO l_text.
gs_game-result = l_text.
APPEND gs_game TO gt_game.
ENDIF.
ENDCASE.
IF l_strike = 3.
CLEAR l_tabix.
DESCRIBE TABLE gt_game LINES l_tabix.
l_tabix = l_tabix - 1.
MESSAGE i000 WITH l_tabix '의 시도만에 성공하셨습니다.'.
ENDIF.
IF p_ucomm = 'NEW'.
LOOP AT gt_game INTO gs_game.
IF l_tabix < sy-tabix.
gs_game-celltab = gt_celltab.
MODIFY gt_game FROM gs_game TRANSPORTING celltab.
ENDIF.
ENDLOOP.
ELSE.
LOOP AT gt_game INTO gs_game.
gs_game-celltab = gt_celltab.
MODIFY gt_game FROM gs_game TRANSPORTING celltab.
ENDLOOP.
ENDIF.
PERFORM refresh.
ENDFORM. " HANDLE_UCOMM
*&---------------------------------------------------------------------*
*& Form CELL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM celltab USING p_name p_type.
CASE p_type.
WHEN 'D'.
gs_celltab-fieldname = p_name.
gs_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
INSERT gs_celltab INTO TABLE gt_celltab.
WHEN 'E'.
gs_celltab-fieldname = p_name.
gs_celltab-style = cl_gui_alv_grid=>mc_style_enabled.
INSERT gs_celltab INTO TABLE gt_celltab.
ENDCASE.
ENDFORM. " CELL
*&---------------------------------------------------------------------*
*& Form LAYOUT_SET
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM layout.
CLEAR gs_layout.
gs_layout-sel_mode = 'A'. "ALV제어:선택모드
gs_layout-zebra = 'X'. "줄무늬
gs_layout-cwidth_opt = 'X'. "열 너비 최적화
gs_layout-stylefname = 'CELLTAB'. "ALV제어
gs_layout-ctab_fname = 'F_COL'. "ALV제어
gs_variant-report = sy-repid.
ENDFORM. " LAYOUT
*&---------------------------------------------------------------------*
*& Form EXCLUDE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM exclude .
CLEAR: gs_exclude, gt_exclude[].
PERFORM : set_exclude USING
cl_gui_alv_grid=>mc_fc_excl_all. "모든아이콘삭제.
ENDFORM. " EXCLUDE
*&---------------------------------------------------------------------*
*& Form SET_EXCLUDE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_CL_GUI_ALV_GRID=>MC_FC_EXCL_AL text
*----------------------------------------------------------------------*
FORM set_exclude USING p_exclude.
CLEAR gs_exclude.
gs_exclude = p_exclude.
APPEND gs_exclude TO gt_exclude.
ENDFORM. " SET_EXCLUDE
*&---------------------------------------------------------------------*
*& Form FCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM fcat .
CLEAR: gs_fcat, gt_fcat.
PERFORM fcat_make USING :
'S' 'FIELDNAME' 'BALL_1',
' ' 'COL_POS' '1',
'E' 'COLTEXT' '첫번째공',
'S' 'FIELDNAME' 'BALL_2',
' ' 'COL_POS' '2',
'E' 'COLTEXT' '두번째공',
'S' 'FIELDNAME' 'BALL_3',
' ' 'COL_POS' '3',
'E' 'COLTEXT' '세번째공',
'S' 'FIELDNAME' 'RESULT',
' ' 'COL_POS' '4',
'E' 'COLTEXT' '결과'.
ENDFORM. " FCAT
*&---------------------------------------------------------------------*
*& Form FCAT_MAKE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM fcat_make USING p_start p_option p_value.
DATA l_option(40).
CLEAR l_option.
IF p_start = 'S'.
CLEAR gs_fcat.
ENDIF.
FIELD-SYMBOLS <fs>.
CONCATENATE 'GS_FCAT-' p_option INTO l_option.
ASSIGN (l_option) TO <fs>.
MOVE p_value TO <fs>.
IF p_start = 'E'.
APPEND gs_fcat TO gt_fcat.
ENDIF.
ENDFORM. " FCAT_MAKE
*&---------------------------------------------------------------------*
*& Form GRID_SET
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM grid_set .
CALL METHOD g_grid->set_ready_for_input
EXPORTING
i_ready_for_input = 1.
CALL METHOD g_grid->set_table_for_first_display
EXPORTING
i_bypassing_buffer = 'X'
i_save = 'A'
i_default = 'X'
is_layout = gs_layout
it_toolbar_excluding = gt_exclude
is_variant = gs_variant
CHANGING
it_outtab = gt_game[]
it_fieldcatalog = gt_fcat
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
ENDFORM. " GRID_SET
*&---------------------------------------------------------------------*
*& Form EVENT_RECEIVER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM event_receiver .
CREATE OBJECT g_event.
SET HANDLER g_event->handle_toolbar FOR g_grid.
SET HANDLER g_event->handle_ucomm FOR g_grid.
*-----*
CALL METHOD g_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter.
CALL METHOD g_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified.
*-----*
ENDFORM. " EVENT_RECEIVER
*&---------------------------------------------------------------------*
*& Form REFRESH
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM refresh .
CLEAR gs_scroll.
gs_scroll-row = 'X'.
gs_scroll-col = 'X'.
CALL METHOD g_grid->set_frontend_layout
EXPORTING
is_layout = gs_layout.
CALL METHOD g_grid->refresh_table_display
EXPORTING
is_stable = gs_scroll.
CALL METHOD cl_gui_cfw=>flush.
ENDFORM. " REFRESH
*&---------------------------------------------------------------------*
*& Form ANSWERS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_answers .
DATA: l_line TYPE sy-tabix.
DATA: l_answ_1 TYPE i,
l_answ_2 TYPE i,
l_answ_3 TYPE i.
DATA: BEGIN OF lt_answ OCCURS 0,
answers TYPE i,
END OF lt_answ.
REFRESH lt_answ.
CLEAR: l_answ_1, l_answ_2, l_answ_3.
PERFORM random USING l_answ_1.
lt_answ-answers = l_answ_1.
APPEND lt_answ.
DO 10 TIMES.
PERFORM random USING l_answ_2.
IF l_answ_2 = l_answ_1.
CLEAR l_answ_2.
PERFORM random USING l_answ_2.
ELSE.
lt_answ-answers = l_answ_2.
APPEND lt_answ.
EXIT.
ENDIF.
ENDDO.
DO 10 TIMES.
PERFORM random USING l_answ_3.
IF l_answ_3 = l_answ_1 OR l_answ_3 = l_answ_2.
CLEAR l_answ_3.
PERFORM random USING l_answ_3.
ELSE.
lt_answ-answers = l_answ_3.
APPEND lt_answ.
EXIT.
ENDIF.
ENDDO.
CLEAR: l_line, answers_1, answers_2, answers_3.
LOOP AT lt_answ.
l_line = sy-tabix.
CASE l_line.
WHEN '1'.
answers_1 = lt_answ-answers.
WHEN '2'.
answers_2 = lt_answ-answers.
WHEN '3'.
answers_3 = lt_answ-answers.
ENDCASE.
ENDLOOP.
ENDFORM. " ANSWERS
*&---------------------------------------------------------------------*
*& Form RANDOM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM random USING p_answer.
DATA: l_min TYPE i,
l_max TYPE i.
CLEAR: l_min, l_max.
l_min = 1.
l_max = p_init.
DO 20 TIMES.
CALL FUNCTION 'RANDOM_I4'
EXPORTING
rnd_min = l_min
rnd_max = l_max
IMPORTING
rnd_value = p_answer.
ENDDO.
ENDFORM. " RANDOM
댓글 33
-
보나
2011.08.13 06:16
-
그림장이
2011.08.13 21:45
^^ 네 저도 몰래하다 걸려서 혼난 기억이 ..ㅋ;;
글이 이쪽으로 옮겨져왔을줄은 ㅋ
-
공백
2011.08.15 07:26
아~ 숫자 야구인가요? ㅎㅎ
-
그림장이
2011.08.15 10:39
네 숫자 야구입니다 ^^ ㅎㅎㅎ 친구들과 공책에 적어서 하던 ㅋㅋ
-
신선仙
2011.08.16 08:58
야구게임을 이렇게도 하는군요?
-야구를 모르는 여자-
-
그림장이
2011.08.16 17:53
네 ^^ 스무고게 같이 경우의 수를 줄여가면서 세개의 숫자를 맞추면 되는 게임입니다 ㅎㅎ
-
아바퍼의길
2011.08.16 20:00
추억의 야구겜이네요 ㅋㅋ 다시보니 새롭네요 ㅎ
-
그림장이
2011.08.16 22:30
ㅎㅎ 저도 만들면서... 갑자기 룰이 생각이 안나서 ㅇㅅㅇ.. 많이 새롭더라구요 ㅋㅋ
-
honey
2011.08.17 18:57
새롭고, 재미있네요.
-
그림장이
2011.08.17 19:17
재밌게 봐주셔서 감사합니다 ^^;;;
-
Web In Abap
2011.08.17 23:51
전 님이 누군지 알고 있습니다... 제가 누굴까요??? 맞추시면... 닉 변경 해야겠습니다 ㅋㅋㅋ
-
그림장이
2011.08.17 23:54
저도 알고있습니다 ^^ 바꾸시는건가요? ㅋ
-
JJB
2011.08.18 18:31
어젯밤 심심해서 야구게임하려고 SAP를 실행시키는 .......상황이 벌어졌습니다...
이럴수가...SAP 게임이라니.....^^
-
그림장이
2011.08.19 18:11
헐퀴 ㅋㅋ... 감사합니다..ㅋㅋㅋ;
-
andy
2011.08.18 20:10
ㅎㅎ 잼있네요..
저도 아밥 권한 받아서 한번 깔아봐야 겠습니다. ^^
-
그림장이
2011.08.19 18:14
ㅎㅎ 재미있게 하세요 ㅋㅋ
-
아밥초짜
2011.08.19 00:03
잘 받았습니다. 재미있어서 기능 추가도 해봤습니다.
추가 기능]
1. 바로 재시작 할 수 있는 Refresh 버튼 추가
2. 경기한 내용을 볼 수 있는 history 버튼 추가
3. 상태(신호등) 아이콘 추가
첨부파일도 같이 올립니다.
소스 제공해준 그림장이님에게 감사드립니다.
history 버튼 사용 하실려면 screen 0200 생성해야 합니다.
-
그림장이
2011.08.19 18:10
앗 ^^ 추가까지 하셨군요 한번 해봐야겠습니다 ㅋㅋㅋ
-
왕초보아바퍼
2011.08.24 00:09
ㅋㅋ 이거 예전에 제 동기가 함 만들었었는데.. 다중접속 기능 추가해서 멀티플레이도 가능했었습니다..ㅋㅋㅋ
-
그림장이
2011.08.24 17:43
ㅇㅅㅇ.. 헛 먼저 만드신분이 계셨었군요
-
남군
2011.09.01 23:50
너무 잘 만드셨네요.. 오랜만에 재미있게 해보네요~ ㅋ
-
그림장이
2011.09.06 21:01
재미있게 하셨다니 감사요 ^^;
-
simpleTh
2011.09.15 06:49
우와 이런것도 만들수 있다니!
대단하십니다~!!ㅎㅎ
-
달콩이
2011.09.17 16:33
대단하십니다. 감사합니다.
-
경진애비
2011.10.24 03:00
헉.. 아밥으로 게임을...
-
깍지
2011.11.02 01:37
고생하셧네요 .감사합니다.
-
빛도리
2011.11.22 23:44
대단하세요.. 재밋겠네요 ^^ -
뽀로롱
2011.12.06 22:23
와..대단하시네요...잘 해볼께요..
-
알음알음
2012.01.20 19:46
대단하세요~~
-
토도리
2012.02.03 02:49
좋네요 ㅎ
-
kofnhuge
2012.10.10 00:04
자. 이젠 로또 생성기를 만들어 보는것은?
-
이수현
2013.08.01 20:06
대단하세요~~
-
Friya
2014.09.22 23:11
와 대단하네요.
한번 따라해서 만들어보겠습니다..
내용이 자료실쪽에 가까워 게시글 이동되었습니다.
정말 추억의 게임이네요.... 수업시간에 선생님 몰래하던 기억이 ^^;;;