REPORT ZTICTACTOE .
TABLES SSCRFIELDS.
DATA: FLAG, count(10) type c ,
f1,f2,f3,f4,f5,f6,f7,f8,f9,
p1(2) type c,
p2(2) type c,
player(2) type c,
ch type c.
SELECTION-SCREEN BEGIN OF BLOCK rad1
WITH FRAME TITLE text-002 no intervals.
PARAMETERS Message(10) TYPE c .
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN:
BEGIN OF LINE,
PUSHBUTTON 2(5) BUT1 USER-COMMAND CLI1 MODIF ID sc1,
PUSHBUTTON 7(5) BUT2 USER-COMMAND CLI2 MODIF ID sc2,
PUSHBUTTON 12(5) BUT3 USER-COMMAND CLI3 MODIF ID sc3,
END OF LINE,
BEGIN OF LINE,
PUSHBUTTON 2(5) BUT4 USER-COMMAND CLI4 MODIF ID sc4,
PUSHBUTTON 7(5) BUT5 USER-COMMAND CLI5 MODIF ID sc5,
PUSHBUTTON 12(5) BUT6 USER-COMMAND CLI6 MODIF ID sc6,
END OF LINE,
BEGIN OF LINE,
PUSHBUTTON 2(5) BUT7 USER-COMMAND CLI7 MODIF ID sc7,
PUSHBUTTON 7(5) BUT8 USER-COMMAND CLI8 MODIF ID sc8,
PUSHBUTTON 12(5) BUT9 USER-COMMAND CLI9 MODIF ID sc9,
END OF LINE.
SELECTION-SCREEN END OF BLOCK rad1.
* DISPLAYING THE SCORE FILED AS A LABEL
*disabling process******************************* *
form box_disable using ch.
LOOP AT SCREEN.
IF screen-group1 = ch.
screen-input = '0'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
endform. "box_disable
AT SELECTION-SCREEN OUTPUT.
if f1 = 1.
perform box_disable using 'SC1'.
endif.
if f2 = 1.
perform box_disable using 'SC2'.
endif.
if f3 = 1.
perform box_disable using 'SC3'.
endif.
if f4 = 1.
perform box_disable using 'SC4'.
endif.
if f5 = 1.
perform box_disable using 'SC5'.
endif.
if f6 = 1.
perform box_disable using 'SC6'.
endif.
if f7 = 1.
perform box_disable using 'SC7'.
endif.
if f8 = 1.
perform box_disable using 'SC8'.
endif.
if f9 = 1.
perform box_disable using 'SC9'.
endif.
AT SELECTION-SCREEN .
CASE SSCRFIELDS.
WHEN 'CLI1'.
count = count + 1.
perform player_turn.
BUT1 = p1.
f1 = '1'.
perform computer_move.
WHEN 'CLI2'.
count = count + 1.
perform player_turn.
BUT2 = p1.
f2 = '1'.
perform computer_move.
WHEN 'CLI3'.
count = count + 1.
perform player_turn.
BUT3 = p1.
f3 = '1'.
perform computer_move.
WHEN 'CLI4'.
count = count + 1.
perform player_turn.
BUT4 = p1.
f4 = '1'.
perform computer_move.
WHEN 'CLI5'.
count = count + 1.
perform player_turn.
BUT5 = p1.
f5 = '1'.
perform computer_move.
WHEN 'CLI6'.
count = count + 1.
perform player_turn.
BUT6 = p1.
f6 = '1'.
perform computer_move.
WHEN 'CLI7'.
count = count + 1.
perform player_turn.
BUT7 = p1.
f7 = '1'.
perform computer_move.
WHEN 'CLI8'.
count = count + 1.
perform player_turn.
BUT8 = p1.
f8 = '1'.
perform computer_move.
WHEN 'CLI9'.
count = count + 1.
perform player_turn.
BUT9 = p1.
f9 = '1'.
perform computer_move.
ENDCASE.
*this is for toggle operation p1 = X ; p2 = O ;
form player_turn.
player = count MOD 2.
**BUT2 = player.
if player = 1.
**BUT4 = ‘player1′.
p1 = 'X'.
else.
**BUT4 = ‘player2′.
p1 = 'O'.
endif.
endform. "player_turn
**———————————————————————**
** Form computer_move
**———————————————————————**
** text
**———————————————————————-**
form computer_move.
if count = 9.
Message = 'DRAW'.
perform reset.
endif.
if count = 7.
perform fourth_move.
endif.
if count = 5.
perform third_move.
endif.
if count = 3.
perform second_move.
endif.
if count = 1.
perform first_move.
endif.
perform who_wins.
endform. "computer_move
**computer – O
form first_move.
if but5 <> 'X'.
but5 = 'O'.
else.
BUT9 = 'O'.
endif.
count = count + 1.
endform. "first_move
**———————————————————————**
** Form second_move
**———————————————————————**
** text
**———————————————————————-**
form second_move.
data str1 type c.
str1 = 'X'.
perform check_possible using 'X'.
if count = 3.
perform misc_move.
endif.
if count = 3.
perform empty_fill.
endif.
endform. "second_move
**———————————————————————**
** Form check_possible
**———————————————————————**
** text
**———————————————————————-**
form check_possible using str type c.
**checking for rows
**1st row *–3rd col empty
if but1 = str and but2 = str and but3 = ''.
but3 = 'O'.
count = count + 1.
endif.
**2ndrow
if but4 = str and but5 = str and but6 = ''.
but6 = 'O'.
count = count + 1.
endif.
**3rd row
if but7 = str and but8 = str and but9 = ''.
but9 = 'O'.
count = count + 1.
endif.
**1st row *–2nd col empty
if but1 = str and but2 = '' and but3 = str.
but2 = 'O'.
count = count + 1.
endif.
**2ndrow
if but4 = str and but5 = '' and but6 = str.
but5 = 'O'.
count = count + 1.
endif.
**3rd row
if but7 = str and but8 = '' and but9 = str.
but8 = 'O'.
count = count + 1.
endif.
**1st row *–1st col empty
if but1 = '' and but2 = str and but3 = str.
but1 = 'O'.
count = count + 1.
endif.
**2ndrow
if but4 = '' and but5 = str and but6 = str.
but4 = 'O'.
count = count + 1.
endif.
**3rd row
if but7 = '' and but8 = str and but9 = str.
but7 = 'O'.
count = count + 1.
endif.
**check for columns
**1st col *–3rd col empty
if but1 = str and but4 = str and but7 = ''.
but7 = 'O'.
count = count + 1.
endif.
**2nd col
if but2 = str and but5 = str and but8 = ''.
but8 = 'O'.
count = count + 1.
endif.
**3rd col
if but3 = str and but6 = str and but9 = ''.
but9 = 'O'.
count = count + 1.
endif.
**1st col *–2nd col empty
if but1 = str and but4 = '' and but7 = str.
but4 = 'O'.
count = count + 1.
endif.
**2nd col
if but2 = str and but5 = '' and but8 = str.
but5 = 'O'.
count = count + 1.
endif.
**3rd col
if but3 = str and but6 = '' and but9 = str.
but6 = 'O'.
count = count + 1.
endif.
**1st col *–1st col empty
if but1 = '' and but4 = str and but7 = str.
but1 = 'O'.
count = count + 1.
endif.
**2nd col
if but2 = '' and but5 = str and but8 = str.
but2 = 'O'.
count = count + 1.
endif.
**3rd col
if but3 = '' and but6 = str and but9 = str.
but3 = 'O'.
count = count + 1.
endif.
**diagonal
**left-top
if but1 = '' and but5 = str and but9 = str.
but1 = 'O'.
count = count + 1.
endif.
if but1 = str and but5 = str and but9 = ''.
but9 = 'O'.
count = count + 1.
endif.
**right-top
if but3 = '' and but5 = str and but7 = str.
but3 = 'O'.
count = count + 1.
endif.
if but3 = str and but5 = str and but7 = ''.
but7 = 'O'.
count = count + 1.
endif.
endform. "check_possible
**———————————————————————**
** Form misc_move
**———————————————————————**
** text
**———————————————————————-**
form misc_move.
if but6 = 'X' and but8 = 'X'.
but9 = 'O'.
count = count + 1.
endif.
if but1 = 'X' and but9 = 'X'.
but2 = 'O'.
count = count + 1.
endif.
if but3 = 'X' and but7 = 'X'.
but2 = 'O'.
count = count + 1.
endif.
if but1 = 'X' and but5 = 'X'.
but7 = 'O'.
count = count + 1.
endif.
if but1 = 'X' and but8 = 'X'.
but7 = 'O'.
count = count + 1.
endif.
if but3 = 'X' and but8 = 'X'.
but9 = 'O'.
count = count + 1.
endif.
if but6 = 'X' and but7 = 'X'.
but9 = 'O'.
count = count + 1.
endif.
if but4 = 'X' and but6 = 'X'.
but1 = 'O'.
count = count + 1.
endif.
**—————————-misc–last updated trial *-error
if but2 = 'X' and but8 = 'X'.
but1 = 'O'.
count = count + 1.
exit .
endif.
if but2 = 'X' and but7 = 'X'.
but9 = 'O'.
count = count + 1.
endif.
if but2 = 'X' and but9 = 'X'.
but7 = 'O'.
count = count + 1.
endif.
if but4 = 'X' and but8 = 'X'.
but1 = 'O'.
count = count + 1.
endif.
if but1 = 'X' and but6 = 'X'.
but3 = 'O'.
count = count + 1.
endif.
if but2 = 'X' and but6 = 'X'.
but9 = 'O'.
count = count + 1.
endif.
if but2 = 'X' and but4 = 'X'.
but3 = 'O'.
count = count + 1.
endif.
if but4 = 'X' and but9 = 'X'.
but7 = 'O'.
count = count + 1.
endif.
if but4 = 'X' and but3 = 'X'.
but1 = 'O'.
count = count + 1.
endif.
endform. "misc_move
**———————————————————————**
** Form empty_fill
**———————————————————————**
** text
**———————————————————————-**
form empty_fill.
if but1 <> 'X' and but1 <> 'O'.
but1 = 'O'.
count = count + 1.
elseif but2 <> 'X' and but2 <> 'O'.
but2 = 'O'.
count = count + 1.
elseif but3 <> 'X' and but3 <> 'O'.
but3 = 'O'.
count = count + 1.
elseif but4 <> 'X' and but4 <> 'O'.
but4 = 'O'.
count = count + 1.
elseif but5 <> 'X' and but5 <> 'O'.
but5 = 'O'.
count = count + 1.
elseif but6 <> 'X' and but6 <> 'O'.
but6 = 'O'.
count = count + 1.
elseif but7 <> 'X' and but7 <> 'O'.
but7 = 'O'.
count = count + 1.
elseif but8 <> 'X' and but8 <> 'O'.
but8 = 'O'.
count = count + 1.
elseif but9 <> 'X' and but9 <> 'O'.
but9 = 'O'.
count = count + 1.
endif.
endform. "empty_fill
**———————————————————————**
** Form third_move
**———————————————————————**
** text
**———————————————————————-**
form third_move.
perform check_possible using 'O'.
if count = 5.
perform check_possible using 'X'.
endif.
if count = 5.
perform empty_fill.
endif.
endform. "third_move
**———————————————————————**
** Form fourth_move
**———————————————————————**
** text
**———————————————————————-**
form fourth_move.
perform check_possible using 'O'.
if count = 7.
perform check_possible using 'X'.
endif.
if count = 7.
perform empty_fill.
endif.
endform. "fourth_move
**check for win ,reset——————————————————————————-*-
**———————————————————————**
** Form check_x_win
**———————————————————————**
** text
**———————————————————————-**
form check_x_win.
** checking of the rows
data a type i.
if but1 = 'X' AND but2 = 'X' AND but3 = 'X'.
Message = ' X wins '.
perform reset.
endif.
if but4 = 'X' AND but5 = 'X' AND but6 = 'X'.
Message = ' X wins '.
perform reset.
endif.
if but7 = 'X' AND but8 = 'X' AND but9 = 'X'.
Message = ' X wins '.
perform reset.
endif.
** checking of the cols
if but1 = 'X' AND but4 = 'X' AND but7 = 'X'.
Message = ' X wins '.
perform reset.
endif.
if but2 = 'X' AND but5 = 'X' AND but8 = 'X'.
Message = ' X wins '.
perform reset.
endif.
if but3 = 'X' AND but6 = 'X' AND but9 = 'X'.
Message = ' X wins '.
perform reset.
endif.
** checking for diagonal
if but1 = 'X' AND but5 = 'X' AND but9 = 'X'.
Message = ' X wins '.
perform reset.
endif.
if but3 = 'X' AND but5 = 'X' AND but7 = 'X'.
Message = ' X wins '.
perform reset.
endif.
endform. "check_x_win
**———————————————————————**
** Form check_o_win
**———————————————————————**
** text
**———————————————————————-**
form check_o_win.
** checking of the rows
if but1 = 'O' AND but2 = 'O' AND but3 = 'O'.
Message = ' SAP wins '.
perform reset.
endif.
if but4 = 'O' AND but5 = 'O' AND but6 = 'O'.
Message = ' SAP wins '.
perform reset.
endif.
if but7 = 'O' AND but8 = 'O' AND but9 = 'O'.
Message = ' SAP wins '.
perform reset.
endif.
** checking of the cols
if but1 = 'O' AND but4 = 'O' AND but7 = 'O'.
Message = 'SAP wins '.
perform reset.
endif.
if but2 = 'O' AND but5 = 'O' AND but8 = 'O'.
Message = ' SAP wins '.
perform reset.
endif.
if but3 = 'O' AND but6 = 'O' AND but9 = 'O'.
Message = ' SAP wins '.
perform reset.
endif.
** checking for diagonal
if but1 = 'O' AND but5 = 'O' AND but9 = 'O'.
Message = ' SAP wins '.
perform reset.
endif.
if but3 = 'O' AND but5 = 'O' AND but7 = 'O'.
Message = ' SAP wins '.
perform reset.
endif.
endform. "check_o_win
**———————————————————————**
** Form who_wins
**———————————————————————**
** text
**———————————————————————-**
form who_wins.
perform check_x_win.
perform check_o_win.
endform. "who_wins
**———————————————————————**
** Form reset
**———————————————————————**
** text
**———————————————————————-**
form reset.
BUT1 = ' '.
BUT2 = ' '.
BUT3 = ' '.
BUT4 = ' '.
BUT5 = ' '.
BUT6 = ' '.
BUT7 = ' '.
BUT8 = ' '.
BUT9 = ' '.
f1 = ' '.
f2 =' '.
f3 = ' '.
f4 =' '.
f5 = ' '.
f6 =' '.
f7 = ' '.
f8 =' '.
f9 = ' '.
** Message = ‘ ‘.
** Score = ‘ ‘.
count = 0.
endform. "reset
initialization.
count = 0.
BUT1 = p1.
BUT2 = p1.
BUT3 = p1.
BUT4 = p1.
BUT5 = p1.
BUT6 = p1.
BUT7 = p1.
BUT8 = p1.
BUT9 = p1.
Serkan AKKAVAK
Computer Engineer BSc
SAP Department Deputy Manager
Contact : serkurumsal@yandex.com
0 Comments