*&---------------------------------------------------------------------* *& Report ZTic-tac-toe * *& * *&---------------------------------------------------------------------* * Game Tic-tac-toe in ABAP - GPL Licence. * * Author: Marcos - busgosin@hotmail.com * *&---------------------------------------------------------------------* REPORT ztic-tac-toe. *----------------------------------------------------------------------* * INCLUDES * *----------------------------------------------------------------------* INCLUDE ICONS."ICONS FOR THE GAME. *----------------------------------------------------------------------* * GLOBAL VARIABLES * *----------------------------------------------------------------------* DATA: v_turn(1) VALUE 'X',"Select card. v_win(1) VALUE ' '."Win a player(X) or tie(-)! *----------------------------------------------------------------------* * SELECTION-SCREEN * *----------------------------------------------------------------------* SELECTION-SCREEN BEGIN OF BLOCK b1. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN PUSHBUTTON (4) icon1 USER-COMMAND uc_icon1."1x1 SELECTION-SCREEN PUSHBUTTON (4) icon2 USER-COMMAND uc_icon2."2x1 SELECTION-SCREEN PUSHBUTTON (4) icon3 USER-COMMAND uc_icon3."3x1 SELECTION-SCREEN END OF LINE. SELECTION-SCREEN SKIP 1. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN PUSHBUTTON (4) icon4 USER-COMMAND uc_icon4."1x2 SELECTION-SCREEN PUSHBUTTON (4) icon5 USER-COMMAND uc_icon5."2x2 SELECTION-SCREEN PUSHBUTTON (4) icon6 USER-COMMAND uc_icon6."3x2 SELECTION-SCREEN END OF LINE. SELECTION-SCREEN SKIP 1. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN PUSHBUTTON (4) icon7 USER-COMMAND uc_icon7."1x3 SELECTION-SCREEN PUSHBUTTON (4) icon8 USER-COMMAND uc_icon8."2x3 SELECTION-SCREEN PUSHBUTTON (4) icon9 USER-COMMAND uc_icon9."3x3 SELECTION-SCREEN END OF LINE. SELECTION-SCREEN SKIP 1. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN PUSHBUTTON (12) restart USER-COMMAND uc_restart. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN END OF BLOCK b1. *----------------------------------------------------------------------* * AT SELECTION-SCREEN * *----------------------------------------------------------------------* AT SELECTION-SCREEN. CASE sy-ucomm. WHEN 'UC_ICON1'. PERFORM push_button USING icon1. WHEN 'UC_ICON2'. PERFORM push_button USING icon2. WHEN 'UC_ICON3'. PERFORM push_button USING icon3. WHEN 'UC_ICON4'. PERFORM push_button USING icon4. WHEN 'UC_ICON5'. PERFORM push_button USING icon5. WHEN 'UC_ICON6'. PERFORM push_button USING icon6. WHEN 'UC_ICON7'. PERFORM push_button USING icon7. WHEN 'UC_ICON8'. PERFORM push_button USING icon8. WHEN 'UC_ICON9'. PERFORM push_button USING icon9. WHEN 'UC_RESTART'. PERFORM restart_game. ENDCASE. *----------------------------------------------------------------------* * INITIALIZATION * *----------------------------------------------------------------------* INITIALIZATION. PERFORM clear_buttons. *&---------------------------------------------------------------------* *& Form clear_buttons *&---------------------------------------------------------------------* * Clear the buttons of Selection-Screen. *----------------------------------------------------------------------* FORM clear_buttons . icon1 = '@5F@' . icon2 = '@5F@' . icon3 = '@5F@' . icon4 = '@5F@' . icon5 = '@5F@' . icon6 = '@5F@' . icon7 = '@5F@' . icon8 = '@5F@' . icon9 = '@5F@' . restart = 'Restart'. ENDFORM." clear_buttons *&---------------------------------------------------------------------* *& Form push_button *&---------------------------------------------------------------------* * Checks when a user push a button. *----------------------------------------------------------------------* * --> p_icon Button pushed *----------------------------------------------------------------------* FORM push_button USING p_icon. * Exit if button pushed. IF p_icon <> '@5F@'. EXIT. ENDIF. * Change icon. IF v_turn IS INITIAL. p_icon = '@7C@'. v_turn = 'X'. ELSE. p_icon = '@C9@'. CLEAR v_turn. ENDIF. * Check winner IF ( icon1 = icon5 AND icon5 = icon9 AND icon1 <> '@5F@' )"Diagonal \ OR ( icon3 = icon5 AND icon5 = icon7 AND icon3 <> '@5F@' )"Diagonal / OR ( icon1 = icon2 AND icon2 = icon3 AND icon1 <> '@5F@' )"Row 1 - OR ( icon4 = icon5 AND icon5 = icon6 AND icon4 <> '@5F@' )"Row 2 - OR ( icon7 = icon8 AND icon8 = icon9 AND icon7 <> '@5F@' )"Row 3 - OR ( icon1 = icon4 AND icon4 = icon7 AND icon1 <> '@5F@' )"Col 1 | OR ( icon2 = icon5 AND icon5 = icon8 AND icon2 <> '@5F@' )"Col 2 | OR ( icon3 = icon6 AND icon6 = icon9 AND icon3 <> '@5F@' )."Col 3 | v_win = 'X'. ENDIF. * Check tie IF v_win IS INITIAL AND icon1 <> '@5F@' AND icon2 <> '@5F@' AND icon3 <> '@5F@' AND icon4 <> '@5F@' AND icon5 <> '@5F@' AND icon6 <> '@5F@' AND icon7 <> '@5F@' AND icon8 <> '@5F@' AND icon9 <> '@5F@'. v_win = '-'. ENDIF. * Winner or tie? CASE v_win. * Winner WHEN 'X'. IF v_turn IS INITIAL. MESSAGE i398(00) WITH 'Win player 1!'. PERFORM restart_game. ELSE. MESSAGE i398(00) WITH 'Win player 2!'. PERFORM restart_game. ENDIF. * Tie WHEN '-'. MESSAGE i398(00) WITH 'Tie!'. PERFORM restart_game. ENDCASE. ENDFORM." push_button *&---------------------------------------------------------------------* *& Form restart_game *&---------------------------------------------------------------------* * Restart the game. *----------------------------------------------------------------------* FORM restart_game . v_turn = 'X'. CLEAR v_win. PERFORM clear_buttons. ENDFORM." restart_game