TICTACTOE

lets play a game this Sunday.

Sun Aug 3, 2025

Copy the below Code


REPORT zac_tictacto.

TYPES:BEGIN OF lty_table,
var1 TYPE c,
var2 TYPE c,
var3 TYPE c,
END OF lty_table.
DATA lv_counter1 TYPE i.
DATA lv_counter2 TYPE i.

DATA lv_helper TYPE c.
DATA lv_flag TYPE c.

DATA lv_final TYPE i VALUE 9.


DATA lwa1 TYPE lty_table.
DATA lwa2 TYPE lty_table.
DATA lwa3 TYPE lty_table.
CALL SCREEN 100.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'ZSTATUS'.
* SET TITLEBAR 'xxx'.

CASE sy-ucomm.
WHEN 'CLEAR' OR 'RESET'.
CLEAR:lwa1,lwa2,lwa3,lv_flag.
* WHEN .
WHEN OTHERS.
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.

CASE sy-ucomm.
WHEN 'CHECK'.
WHEN 'CLEAR' OR 'RESET'.
CLEAR:lwa1,lwa2,lwa3,lv_flag,lv_counter1.

WHEN 'SAVE'.
WHEN 'BACK'.

LEAVE TO SCREEN 0.
WHEN 'EXIT'.
WHEN 'CANCEL'.

WHEN '1'.
IF lv_flag = 'X'.
EXIT.
ENDIF.
lv_counter1 = lv_counter1 + 1 .
IF lv_counter1 = 1 OR lv_counter1 = 3 OR lv_counter1 = 5 OR lv_counter1 = 7 .
lwa1-var1 = 'X'.
ELSE.
lwa1-var1 = 'O'.
ENDIF.
PERFORM check_if_win..

WHEN '2'.
IF lv_flag = 'X'.
EXIT.
ENDIF.
lv_counter1 = lv_counter1 + 1 .
IF lv_counter1 = 1 OR lv_counter1 = 3 OR lv_counter1 = 5 OR lv_counter1 = 7 .
lwa2-var1 = 'X'.
ELSE.
lwa2-var1 = 'O'.
ENDIF.
PERFORM check_if_win.

WHEN '3'.
IF lv_flag = 'X'.
EXIT.
ENDIF.
lv_counter1 = lv_counter1 + 1 .
IF lv_counter1 = 1 OR lv_counter1 = 3 OR lv_counter1 = 5 OR lv_counter1 = 7 .
lwa3-var1 = 'X'.
ELSE.
lwa3-var1 = 'O'.
ENDIF.
PERFORM check_if_win.


WHEN '4'.
IF lv_flag = 'X'.
EXIT.
ENDIF.
lv_counter1 = lv_counter1 + 1 .
IF lv_counter1 = 1 OR lv_counter1 = 3 OR lv_counter1 = 5 OR lv_counter1 = 7 .
lwa1-var2 = 'X'.
ELSE.
lwa1-var2 = 'O'.
ENDIF.
PERFORM check_if_win.

WHEN '5'.
IF lv_flag = 'X'.
EXIT.
ENDIF.
lv_counter1 = lv_counter1 + 1 .
IF lv_counter1 = 1 OR lv_counter1 = 3 OR lv_counter1 = 5 OR lv_counter1 = 7 .
lwa2-var2 = 'X'.
ELSE.
lwa2-var2 = 'O'.
ENDIF.
PERFORM check_if_win.

WHEN '6'.
PERFORM check_if_win.
IF lv_flag = 'X'.
EXIT.
ENDIF.
lv_counter1 = lv_counter1 + 1 .
IF lv_counter1 = 1 OR lv_counter1 = 3 OR lv_counter1 = 5 OR lv_counter1 = 7 .
lwa3-var2 = 'X'.
ELSE.
lwa3-var2 = 'O'.
ENDIF.
PERFORM check_if_win.

WHEN '7'.
PERFORM check_if_win.
IF lv_flag = 'X'.
EXIT.
ENDIF.
lv_counter1 = lv_counter1 + 1 .
IF lv_counter1 = 1 OR lv_counter1 = 3 OR lv_counter1 = 5 OR lv_counter1 = 7 .
lwa1-var3 = 'X'.
ELSE.
lwa1-var3 = 'O'.
ENDIF.

PERFORM check_if_win.
WHEN '8'.
IF lv_flag = 'X'.
EXIT.
ENDIF.
lv_counter1 = lv_counter1 + 1 .
IF lv_counter1 = 1 OR lv_counter1 = 3 OR lv_counter1 = 5 OR lv_counter1 = 7 .
lwa2-var3 = 'X'.
ELSE.
lwa2-var3 = 'O'.
ENDIF.
PERFORM check_if_win.
WHEN '9'.
IF lv_flag = 'X'.
EXIT.
ENDIF.
lv_counter1 = lv_counter1 + 1 .
IF lv_counter1 = 1 OR lv_counter1 = 3 OR lv_counter1 = 5 OR lv_counter1 = 7 .
lwa3-var3 = 'X'.
ELSE.
lwa3-var3 = 'O'.
ENDIF.
WHEN OTHERS.
ENDCASE.

ENDMODULE.
*&---------------------------------------------------------------------*
*& Form CHECK_IF_WIN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM check_if_win .
* Row 1
IF lwa1-var1 = 'X' AND lwa2-var1 = 'X' AND lwa3-var1 = 'X'.
MESSAGE 'X WIN' TYPE 'I'.
lv_flag = 'X'.
EXIT.
ELSEIF lwa1-var1 = 'O' AND lwa2-var1 = 'O' AND lwa3-var1 = 'O'.
MESSAGE 'O WIN' TYPE 'I'.
lv_flag = 'X'.
EXIT.
ENDIF.

* Row 2
IF lwa1-var2 = 'X' AND lwa2-var2 = 'X' AND lwa3-var2 = 'X'.
MESSAGE 'X WIN' TYPE 'I'.
lv_flag = 'X'.
EXIT.
ELSEIF lwa1-var2 = 'O' AND lwa2-var2 = 'O' AND lwa3-var2 = 'O'.
MESSAGE 'O WIN' TYPE 'I'.
lv_flag = 'X'.
EXIT.
ENDIF.

* Row 3
IF lwa1-var3 = 'X' AND lwa2-var3 = 'X' AND lwa3-var3 = 'X'.
MESSAGE 'X WIN' TYPE 'I'.
lv_flag = 'X'.
EXIT.
ELSEIF lwa1-var3 = 'O' AND lwa2-var3 = 'O' AND lwa3-var3 = 'O'.
MESSAGE 'O WIN' TYPE 'I'.
lv_flag = 'X'.
EXIT.
ENDIF.

* col 1
IF lwa1-var1 = 'X' AND lwa1-var2 = 'X' AND lwa1-var3 = 'X'.
MESSAGE 'X WIN' TYPE 'I'.
lv_flag = 'X'.
EXIT.
ELSEIF lwa1-var1 = 'O' AND lwa1-var2 = 'O' AND lwa1-var3 = 'O'.
MESSAGE 'O WIN' TYPE 'I'.
lv_flag = 'X'.
EXIT.
ENDIF.
* col 2

IF lwa2-var1 = 'X' AND lwa2-var2 = 'X' AND lwa2-var3 = 'X'.
MESSAGE 'X WIN' TYPE 'I'.
lv_flag = 'X'.
EXIT.
ELSEIF lwa2-var1 = 'O' AND lwa2-var2 = 'O' AND lwa2-var3 = 'O'.
MESSAGE 'O WIN' TYPE 'I'.
lv_flag = 'X'.
EXIT.
ENDIF.
* col 3
IF lwa3-var1 = 'X' AND lwa3-var2 = 'X' AND lwa3-var3 = 'X'.
MESSAGE 'X WIN' TYPE 'I'.
lv_flag = 'X'.
EXIT.
ELSEIF lwa3-var1 = 'O' AND lwa3-var2 = 'O' AND lwa3-var3 = 'O'.
MESSAGE 'O WIN' TYPE 'I'.
lv_flag = 'X'.
EXIT.
ENDIF.

* diag1
IF lwa1-var1 = 'X' AND lwa2-var2 = 'X' AND lwa3-var3 = 'X'.
MESSAGE 'X WIN' TYPE 'I'.
lv_flag = 'X'.
EXIT.
ELSEIF lwa1-var1 = 'O' AND lwa2-var2 = 'O' AND lwa3-var3 = 'O'.
MESSAGE 'O WIN' TYPE 'I'.
lv_flag = 'X'.
EXIT.
ENDIF.
* diag2
IF lwa3-var1 = 'X' AND lwa2-var2 = 'X' AND lwa1-var3 = 'X'.
MESSAGE 'X WIN' TYPE 'I'.
lv_flag = 'X'.
EXIT.
ELSEIF lwa3-var1 = 'O' AND lwa2-var2 = 'O' AND lwa1-var3 = 'O'.
MESSAGE 'O WIN' TYPE 'I'.
lv_flag = 'X'.
EXIT.
ENDIF.
ENDFORM.


Create Module Screen 100 as below




All the fields are pushbuttons and are output only  



LearnABAP.IO
We love ABAP. follow us on Insta ABAPCAFE