Tic-Tac-Toe Game in SAP

0
1044

The main objective of this program is to develop a game in abap. The game is called as “Tic Tac Toe” which can be played against a computer. Simple procedures are used to write this program. Use of selection screen concepts are done in this game.

Tic-Tac-Toe Game

 

 

*———————————————————————*

* Report ZTICTACTOE

*

*———————————————————————*

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 = ‘ O wins ‘.

perform reset.

endif.

if but4 = ‘O’ AND but5 = ‘O’ AND but6 = ‘O’.

Message = ‘ O wins ‘.

perform reset.

endif.

if but7 = ‘O’ AND but8 = ‘O’ AND but9 = ‘O’.

Message = ‘ O wins ‘.

perform reset.

endif.

** checking of the cols

if but1 = ‘O’ AND but4 = ‘O’ AND but7 = ‘O’.

Message = ‘O wins ‘.

perform reset.

endif.

if but2 = ‘O’ AND but5 = ‘O’ AND but8 = ‘O’.

Message = ‘ O wins ‘.

perform reset.

endif.

if but3 = ‘O’ AND but6 = ‘O’ AND but9 = ‘O’.

Message = ‘ O wins ‘.

perform reset.

endif.

** checking for diagonal

if but1 = ‘O’ AND but5 = ‘O’ AND but9 = ‘O’.

Message = ‘ O wins ‘.

perform reset.

endif.

if but3 = ‘O’ AND but5 = ‘O’ AND but7 = ‘O’.

Message = ‘ O 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.

LEAVE A REPLY

Please enter your comment!
Please enter your name here