<style type="text/css">
SPAN {
font-family: "굴림체";
font-size: 10pt;
color: #000000;
background: #FFFFFF;
}
.L1S31 {
color: #808080;
}
.L1S32 {
color: #3399FF;
}
.L1S33 {
color: #4DA619;
}
.L1S52 {
color: #0000FF;
}
</style>
*&---------------------------------------------------------------------*
*& Report Z_LJS_GAME
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
* - 게임 -
* 빙고게임 모두 다 아시죠...
* 숫자를 넣어주고 3빙고 되면 게임 끝 남들하고 같이 실행
* 하고 동일한 숫자를 입력해 주고 먼저 3빙고를 하신분이
* 승리한다 ㅋㅋㅋ 입니다 ㅋㅋㅋㅋ
* 스크린에 컨테이너 그리실때 위에 좀 여유좀 남겨서 거기에
* 숫자 입력하는 부분을 그려서 넣어주셔야 합니다...
*----------------------------------------------------------------------
* 숫자입력 [G_INT] [버튼(F_CODE : ENT)] 빙고개수 [G_BINGO]
*----------------------------------------------------------------------
*[컨테이너~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~]
*----------------------------------------------------------------------
* 머 이런식으로... 해주세요 .... 베이스볼 게임에 이어 ....오랜만에...
* 머리좀 식힐겸 만든거니 이해해주세요....^^;;;
************************************************************************
REPORT z_ljs_game MESSAGE-ID zmgame.
*- SCREEN 100 -*
DATA: g_100_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_scroll TYPE lvc_s_stbl,
gs_layout TYPE lvc_s_layo,
ok_code TYPE sy-ucomm,
save_ok TYPE sy-ucomm.
DATA: gs_variant TYPE disvariant.
*- INTERNAL TABLE -*
*1. 정답 테이블
DATA: BEGIN OF gt_ans OCCURS 0,
col1(2),
col2(2),
col3(2),
col4(2),
col5(2),
END OF gt_ans.
DATA: BEGIN OF gt_val OCCURS 0,
col(2),
END OF gt_val.
*2. 보이는 테이블
DATA: gt_alv LIKE TABLE OF gt_ans WITH HEADER LINE.
*-OTHERS
DATA: g_int(2),
gt_check LIKE TABLE OF gt_val WITH HEADER LINE.
DATA: g_bingo.
***********************************
INITIALIZATION.
***********************************
***********************************
AT SELECTION-SCREEN.
***********************************
***********************************
START-OF-SELECTION.
***********************************
PERFORM get_answer. "정답설정
PERFORM get_alv. "답지설정
***********************************
END-OF-SELECTION.
***********************************
CALL SCREEN 0100.
*&---------------------------------------------------------------------*
*& Include Z_LJS_GAME_O01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'STATUS'.
SET TITLEBAR 'TITLE' WITH '빙고게임!!!'.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module INIT_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE init_0100 OUTPUT.
IF g_100_con IS INITIAL. "INIT.
CREATE OBJECT g_100_con
EXPORTING
container_name = 'G_100_CON'.
CREATE OBJECT g_grid
EXPORTING
i_parent = g_100_con
i_appl_events = 'X'.
*---LAYOUT
PERFORM layout.
*---FCAT
PERFORM fcat.
*---EXCLUDE
PERFORM exclude.
*---GRID_SET
PERFORM grid_set.
ENDIF.
ENDMODULE. " INIT_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module EXIT INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE exit INPUT.
LEAVE TO SCREEN 0.
ENDMODULE. " EXIT INPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
DATA: l_line TYPE sy-tabix,
l_cline TYPE sy-tabix.
CLEAR : ok_code, l_line.
ok_code = sy-ucomm.
CASE ok_code.
WHEN 'ENT'.
CLEAR gt_val.
READ TABLE gt_val WITH KEY col = g_int.
IF sy-subrc = 0.
CLEAR gt_check.
READ TABLE gt_check WITH KEY col = g_int.
IF sy-subrc <> 0.
* 숫자 입력과 빙고 체크가 둘다 이루어져야한다
*----------------------------------------------------------
* --숫자입력부분(답지에표시)
*----------------------------------------------------------
LOOP AT gt_ans.
l_line = sy-tabix.
IF g_int = gt_ans-col1.
PERFORM open USING l_line 'COL1'.
EXIT.
ELSEIF g_int = gt_ans-col2.
PERFORM open USING l_line 'COL2'.
EXIT.
ELSEIF g_int = gt_ans-col3.
PERFORM open USING l_line 'COL3'.
EXIT.
ELSEIF g_int = gt_ans-col4.
PERFORM open USING l_line 'COL4'.
EXIT.
ELSEIF g_int = gt_ans-col5.
PERFORM open USING l_line 'COL5'.
EXIT.
ENDIF.
ENDLOOP.
gt_check-col = g_int.
APPEND gt_check. CLEAR: g_int, gt_check.
*----------------------------------------------------------
* --빙고체크.
*----------------------------------------------------------
* --5개 이상부터 빙고가 나오기 시작하니깐.
CLEAR l_cline.
DESCRIBE TABLE gt_check LINES l_cline.
IF l_cline > 4.
PERFORM bingo_check.
ENDIF.
ELSE.
MESSAGE s000 WITH '이미 표기한 숫자입니다.'
DISPLAY LIKE 'E'.
ENDIF.
ELSE.
MESSAGE s000 WITH '옳지 않은 값입니다.'
DISPLAY LIKE 'E'.
ENDIF.
ENDCASE.
PERFORM screen-refresh.
ENDMODULE. " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*& Form LAYOUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM layout .
CLEAR gs_layout.
gs_layout-sel_mode = 'A'. "ALV제어:선택모드
* gs_layout-cwidth_opt = 'X'. "열 너비 최적화
gs_variant-report = sy-repid.
ENDFORM. " LAYOUT
*&---------------------------------------------------------------------*
*& Form FCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM fcat .
CLEAR: gs_fcat, gt_fcat.
PERFORM fcat_make USING :
'S' 'FIELDNAME' 'COL1',
' ' 'COL_POS' '1',
' ' 'OUTPUTLEN' '5',
'E' 'COLTEXT' '빙',
'S' 'FIELDNAME' 'COL2',
' ' 'COL_POS' '2',
' ' 'OUTPUTLEN' '5',
'E' 'COLTEXT' '고',
'S' 'FIELDNAME' 'COL3',
' ' 'COL_POS' '3',
' ' 'OUTPUTLEN' '5',
'E' 'COLTEXT' '게',
'S' 'FIELDNAME' 'COL4',
' ' 'COL_POS' '4',
' ' 'OUTPUTLEN' '5',
'E' 'COLTEXT' '임',
'S' 'FIELDNAME' 'COL5',
' ' 'COL_POS' '5',
' ' 'OUTPUTLEN' '5',
'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 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_CALL_XI text
*----------------------------------------------------------------------*
FORM set_exclude USING p_exclude.
CLEAR gs_exclude.
gs_exclude = p_exclude.
APPEND gs_exclude TO gt_exclude.
ENDFORM. " SET_EXCLUDE
*&---------------------------------------------------------------------*
*& Form GRID_SET
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM grid_set .
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_alv[]
it_fieldcatalog = gt_fcat
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
ENDFORM. " GRID_SET
*&---------------------------------------------------------------------*
*& Form GET_ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_alv .
DO 5 TIMES.
gt_alv-col1 = ' '.
gt_alv-col2 = ' '.
gt_alv-col3 = ' '.
gt_alv-col4 = ' '.
gt_alv-col5 = ' '.
APPEND gt_alv.
ENDDO.
ENDFORM. " GET_ALV
*&---------------------------------------------------------------------*
*& Form GET_ANSWER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_answer .
DATA: l_value TYPE i.
DATA: l_name(20),
l_col(3) VALUE 'COL',
l_int TYPE i,
l_num(1) VALUE 1.
CLEAR: gt_val[], gt_val, l_value.
*----------------------------------------
*--정답 생성
*----------------------------------------
DO 25 TIMES.
DO 3000 TIMES.
PERFORM ran_dom CHANGING l_value.
CLEAR gt_val.
READ TABLE gt_val WITH KEY col = l_value.
IF sy-subrc <> 0.
gt_val-col = l_value.
APPEND gt_val.
EXIT.
ENDIF.
ENDDO.
ENDDO.
FIELD-SYMBOLS <fs>.
LOOP AT gt_val.
CONCATENATE 'GT_ANS-' l_col l_num INTO l_name.
ASSIGN (l_name) TO <fs>.
<fs> = gt_val-col.
CASE l_num.
WHEN '5'.
l_num = '1'.
APPEND gt_ans. CLEAR gt_ans.
WHEN OTHERS.
l_int = l_num + 1.
l_num = l_int.
ENDCASE.
ENDLOOP.
ENDFORM. " GET_ANSWER
*&---------------------------------------------------------------------*
*& Form RAN_DOM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_L_VALUE text
*----------------------------------------------------------------------*
FORM ran_dom CHANGING p_value.
DO 5 TIMES.
CALL FUNCTION 'RANDOM_I4'
EXPORTING
rnd_min = 1
rnd_max = 25
IMPORTING
rnd_value = p_value.
ENDDO.
ENDFORM. " RAN_DOM
*&---------------------------------------------------------------------*
*& Form OPEN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_L_LINE text
* -->P_0041 text
*----------------------------------------------------------------------*
FORM open USING p_line
value(p_col).
CLEAR gt_alv.
LOOP AT gt_alv.
IF sy-tabix = p_line.
CASE p_col.
WHEN 'COL1'.
gt_alv-col1 = g_int.
WHEN 'COL2'.
gt_alv-col2 = g_int.
WHEN 'COL3'.
gt_alv-col3 = g_int.
WHEN 'COL4'.
gt_alv-col4 = g_int.
WHEN 'COL5'.
gt_alv-col5 = g_int.
ENDCASE.
MODIFY gt_alv. CLEAR gt_alv.
ENDIF.
ENDLOOP.
ENDFORM. " OPEN
*&---------------------------------------------------------------------*
*& Form SCREEN-REFRESH
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM screen-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. " SCREEN-REFRESH
*&---------------------------------------------------------------------*
*& Form BINGO_CHECK
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM bingo_check .
DATA: l_bc.
DATA: l_bc1 TYPE c,
l_bc2 TYPE c,
l_bc3 TYPE c,
l_bc4 TYPE c.
DATA: l_col1,
l_col2,
l_col3,
l_col4,
l_col5.
DATA: l_d1,
l_d2.
CLEAR: l_bc1, l_bc2, l_bc3, l_bc4.
CLEAR: l_col1, l_col2, l_col3, l_col4, l_col5.
CLEAR: l_d1, l_d2.
LOOP AT gt_alv.
* --가로 빙고체크.
IF ( gt_alv-col1 IS NOT INITIAL AND
gt_alv-col2 IS NOT INITIAL AND
gt_alv-col3 IS NOT INITIAL AND
gt_alv-col4 IS NOT INITIAL AND
gt_alv-col5 IS NOT INITIAL ).
l_bc1 = l_bc1 + 1.
ENDIF.
* --세로 빙고체크.
IF gt_alv-col1 IS NOT INITIAL.
l_col1 = l_col1 + 1.
ENDIF.
IF gt_alv-col2 IS NOT INITIAL.
l_col2 = l_col2 + 1.
ENDIF.
IF gt_alv-col3 IS NOT INITIAL.
l_col3 = l_col3 + 1.
ENDIF.
IF gt_alv-col4 IS NOT INITIAL.
l_col4 = l_col4 + 1.
ENDIF.
IF gt_alv-col5 IS NOT INITIAL.
l_col5 = l_col5 + 1.
ENDIF.
* -- 대각선 빙고 체크.
CASE sy-tabix.
WHEN '1'.
IF gt_alv-col1 IS NOT INITIAL.
l_d1 = l_d1 + 1.
ENDIF.
IF gt_alv-col5 IS NOT INITIAL.
l_d2 = l_d2 + 1.
ENDIF.
WHEN '2'.
IF gt_alv-col2 IS NOT INITIAL.
l_d1 = l_d1 + 1.
ENDIF.
IF gt_alv-col4 IS NOT INITIAL.
l_d2 = l_d2 + 1.
ENDIF.
WHEN '3'.
IF gt_alv-col3 IS NOT INITIAL.
l_d1 = l_d1 + 1.
l_d2 = l_d2 + 1.
ENDIF.
WHEN '4'.
IF gt_alv-col4 IS NOT INITIAL.
l_d1 = l_d1 + 1.
ENDIF.
IF gt_alv-col2 IS NOT INITIAL.
l_d2 = l_d2 + 1.
ENDIF.
WHEN '5'.
IF gt_alv-col5 IS NOT INITIAL.
l_d1 = l_d1 + 1.
ENDIF.
IF gt_alv-col1 IS NOT INITIAL.
l_d2 = l_d2 + 1.
ENDIF.
ENDCASE.
ENDLOOP.
*--세로빙고 계산.
IF l_col1 = 5.
l_bc2 = 1.
ENDIF.
IF l_col2 = 5.
l_bc2 = l_bc2 + 1.
ENDIF.
IF l_col3 = 5.
l_bc2 = l_bc2 + 1.
ENDIF.
IF l_col4 = 5.
l_bc2 = l_bc2 + 1.
ENDIF.
IF l_col5 = 5.
l_bc2 = l_bc2 + 1.
ENDIF.
IF l_d1 = 5.
l_bc3 = l_bc3 + 1.
ENDIF.
IF l_d2 = 5.
l_bc3 = l_bc3 + 1.
ENDIF.
CLEAR l_bc.
l_bc = l_bc1 + l_bc2 + l_bc3.
CLEAR g_bingo.
CASE l_bc.
WHEN '0'.
g_bingo = 0.
WHEN '1'.
g_bingo = 1.
WHEN '2'.
g_bingo = 2.
WHEN '3'.
g_bingo = 3.
MESSAGE i000 WITH '승리하셨습니다.'.
WHEN OTHERS.
MESSAGE i000 WITH '승리하셨습니다.'.
ENDCASE.
ENDFORM. " BINGO_CHECK
댓글 10
-
kukluxklan
2012.01.30 08:05
-
디카초올~
2012.02.09 17:22
캄사합니다. -
병하
2012.04.03 18:57
감사합니다~^^
-
Robert-jo
2012.06.26 23:43
이야 감사감사 어떻게 이렇게 잘짜셨는지 비법좀~
-
Robert-jo
2012.06.26 23:43
요 나는 배울것이야~
-
재리
2012.07.06 07:51
감사합니다.
-
바끄로
2012.07.24 00:19
감사합니다.
-
보노쿤~
2012.09.19 19:12
굉장하네요 이걸짜신게 너무 신기해요~~ ^^ 감사합니다.
-
해피후니
2013.05.30 01:23
재밌네요 ..ㅎ
-
아밥어렵다
2013.09.17 00:46
실행 해 보고 싶다... 하지만 난 초보다.... 어떻게 돌리는지 모르겠다....ㅜㅜ
thanks
