Vous êtes sur la page 1sur 4

ABAP Game Tic-Tac-Toe

ABAP Game Tic-Tac-Toe


Please find below a game written in ABAP, this is the famous Tic Tac Toe game.
This is GPL Code
REPORT ZEX_TICTACTOE1 .
*&---------------------------------------------------------------------*
*& Report ZTic-tac-toe
*
*&
*
*&---------------------------------------------------------------------*
* Game Tic-tac-toe in ABAP - GPL Licence.
*&---------------------------------------------------------------------*

*----------------------------------------------------------------------*
* INCLUDES
*
*----------------------------------------------------------------------*
INCLUDE CTSICONS."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

Vous aimerez peut-être aussi