<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ABAP Tutorials &#187; Game</title>
	<atom:link href="http://www.abap-tutorials.com/tag/game/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.abap-tutorials.com</link>
	<description>ABAP Tutorials, Guides, Training, Manuals</description>
	<lastBuildDate>Thu, 17 Nov 2011 07:43:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Tic-Tac-Toe Game in SAP</title>
		<link>http://www.abap-tutorials.com/2009/08/24/tic-tac-toe-game-in-sap/</link>
		<comments>http://www.abap-tutorials.com/2009/08/24/tic-tac-toe-game-in-sap/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 14:10:08 +0000</pubDate>
		<dc:creator>Admin</dc:creator>
				<category><![CDATA[ABAP]]></category>
		<category><![CDATA[Fun]]></category>
		<category><![CDATA[Sample Code]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[Game]]></category>
		<category><![CDATA[Tic-Tac-Toe]]></category>

		<guid isPermaLink="false">http://naveenvishal.wordpress.com/?p=734</guid>
		<description><![CDATA[The main objective of this program is to develop a game in abap. The game is called as &#8220;Tic Tac Toe&#8221; 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.         *———————————————————————* * Report ZTICTACTOE * *———————————————————————* REPORT ZTICTACTOE. [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align:justify;">The main objective of this program is to develop a game in abap. The game is called as &#8220;<strong>Tic Tac Toe</strong>&#8221; 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.</p>
<div style="width:100%; float:left">
<p style="text-align: center;"> <img class="size-full wp-image-735 aligncenter" title="Tic-Tac-Toe Game" src="http://naveenvishal.files.wordpress.com/2009/08/tictactoe1.jpg" alt="Tic-Tac-Toe Game" width="414" height="207" /></p>
</div>
<p style="text-align:justify;"> </p>
<p style="text-align:justify;"> </p>
<div style="text-align:justify;"><span style="font-family:arial;"><span style="line-height:normal;"> </span></span></div>
<p><span id="more-734"></span></p>
<div style="text-align:justify;">
<pre lang="ABAP">*———————————————————————*

* 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 &lt;&gt; ‘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 &lt;&gt; ‘X’ and but1 &lt;&gt; ‘O’.

but1 = ‘O’.

count = count + 1.

elseif but2 &lt;&gt; ‘X’ and but2 &lt;&gt; ‘O’.

but2 = ‘O’.

count = count + 1.

elseif but3 &lt;&gt; ‘X’ and but3 &lt;&gt; ‘O’.

but3 = ‘O’.

count = count + 1.

elseif but4 &lt;&gt; ‘X’ and but4 &lt;&gt; ‘O’.

but4 = ‘O’.

count = count + 1.

elseif but5 &lt;&gt; ‘X’ and but5 &lt;&gt; ‘O’.

but5 = ‘O’.

count = count + 1.

elseif but6 &lt;&gt; ‘X’ and but6 &lt;&gt; ‘O’.

but6 = ‘O’.

count = count + 1.

elseif but7 &lt;&gt; ‘X’ and but7 &lt;&gt; ‘O’.

but7 = ‘O’.

count = count + 1.

elseif but8 &lt;&gt; ‘X’ and but8 &lt;&gt; ‘O’.

but8 = ‘O’.

count = count + 1.

elseif but9 &lt;&gt; ‘X’ and but9 &lt;&gt; ‘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.</pre>
</div>


<p>You might also be interested in these posts:<ol><li><a href='http://www.abap-tutorials.com/2009/08/01/marble-game/' rel='bookmark' title='ABAP Program for Marble Game in SAP'>ABAP Program for Marble Game in SAP</a></li>
<li><a href='http://www.abap-tutorials.com/2009/09/10/displaying-icons-in-alv-abap/' rel='bookmark' title='Displaying Icons in ALV Grid using ABAP'>Displaying Icons in ALV Grid using ABAP</a></li>
<li><a href='http://www.abap-tutorials.com/2009/09/17/abap-program-to-add-colors-in-alv-grid/' rel='bookmark' title='ABAP Program to add Colors in ALV Grid'>ABAP Program to add Colors in ALV Grid</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.abap-tutorials.com/2009/08/24/tic-tac-toe-game-in-sap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ABAP Program for Marble Game in SAP</title>
		<link>http://www.abap-tutorials.com/2009/08/01/marble-game/</link>
		<comments>http://www.abap-tutorials.com/2009/08/01/marble-game/#comments</comments>
		<pubDate>Sat, 01 Aug 2009 02:58:16 +0000</pubDate>
		<dc:creator>Admin</dc:creator>
				<category><![CDATA[ABAP]]></category>
		<category><![CDATA[Fun]]></category>
		<category><![CDATA[Game]]></category>
		<category><![CDATA[marble]]></category>
		<category><![CDATA[marbles]]></category>
		<category><![CDATA[SAP]]></category>

		<guid isPermaLink="false">http://naveenvishal.wordpress.com/?p=564</guid>
		<description><![CDATA[Try to remove all but one marble from the board. You can remove a marble by skipping over it to an empty spot. Select a marble by clicking on it and move it by selecting the spot that you want to move to.         *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* *&#38; Report  ZTST_MARBLE *&#38; *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* *&#38; *&#38; [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align:justify;">Try to remove all but one marble from the board. You can remove a marble by skipping over it to an empty spot. Select a marble by clicking on it and move it by selecting the spot that you want to move to.</p>
<p style="text-align:justify;"> </p>
<div id="attachment_565" class="wp-caption aligncenter" style="width: 460px"><img class="size-full wp-image-565" title="Marble Game" src="http://naveenvishal.files.wordpress.com/2009/08/marble.jpg" alt="Marble Game" width="450" height="326" /><p class="wp-caption-text">Marble Game</p></div>
<p> </p>
<p> </p>
<p style="text-align:justify;"><span id="more-564"></span></p>
<p style="text-align:justify;"> </p>
<div><span style="color:#3366ff;">*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*</span></div>
<div><span style="color:#3366ff;">*&amp; Report  ZTST_MARBLE</span></div>
<div><span style="color:#3366ff;">*&amp;</span></div>
<div><span style="color:#3366ff;">*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*</span></div>
<div><span style="color:#3366ff;">*&amp;</span></div>
<div><span style="color:#3366ff;">*&amp;</span></div>
<div><span style="color:#3366ff;">*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*</span></div>
<div>REPORT  ZTST_MARBEL NO STANDARD PAGE HEADING.</div>
<div><span style="color:#3366ff;">*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*</span></div>
<div><span style="color:#3366ff;">* I N C L U D E</span></div>
<div><span style="color:#3366ff;">*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*</span></div>
<div>INCLUDE &lt;ICON&gt;.</div>
<div><span style="color:#3366ff;">*</span></div>
<div><span style="color:#3366ff;">*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*</span></div>
<div><span style="color:#3366ff;">* D A T A   D E F I N I T I O N</span></div>
<div><span style="color:#3366ff;">*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*</span></div>
<div><span style="color:#3366ff;">*&#8230;.Types</span></div>
<div>TYPES: BEGIN OF TY_SCORE,</div>
<div>       SRL   TYPE I,</div>
<div>       UNAME TYPE SY-UNAME,</div>
<div>       SCORE TYPE I,</div>
<div>       TIME  TYPE I,</div>
<div>       END   OF TY_SCORE.</div>
<div><span style="color:#3366ff;">*&#8230;.Internal Tables</span></div>
<div>DATA: BEGIN OF ITAB OCCURS 0,</div>
<div>      C1,  C2,  C3,</div>
<div>      C4,  C5,  C6,</div>
<div>      C7,  C8,  C9,</div>
<div>      END   OF ITAB.</div>
<div>DATA: BEGIN OF IT_PRINT OCCURS 0,</div>
<div>      C1(4), C2(4), C3(4),</div>
<div>      C4(4), C5(4), C6(4),</div>
<div>      C7(4), C8(4), C9(4),</div>
<div>      END   OF IT_PRINT.</div>
<div>DATA: IT_SCORE TYPE STANDARD TABLE OF TY_SCORE.</div>
<div><span style="color:#3366ff;">*&#8230;.Work Areas</span></div>
<div>DATA: WA_ITAB  LIKE ITAB,</div>
<div>      WA_PRINT LIKE IT_PRINT,</div>
<div>      W_SCORE  TYPE TY_SCORE.</div>
<div><span style="color:#3366ff;">*&#8230;.Globle Variables</span></div>
<div>DATA: L_NO_M      TYPE I,</div>
<div>      L_NO_S      TYPE I,</div>
<div>      L_NO_C      TYPE CHAR10,</div>
<div>      L_HALF      TYPE I,</div>
<div>      L_HALF_HALF TYPE I,</div>
<div>      L_PRINT     TYPE FLAG,</div>
<div>      L_NAME      TYPE CHAR20,</div>
<div>      L_MOD       TYPE I.</div>
<div>DATA: W_ON        TYPE FLAG,</div>
<div>      W_SEL_LINE  TYPE I,</div>
<div>      W_SEL_COL   TYPE CHAR1,</div>
<div>      W_DEST_OK   TYPE FLAG,</div>
<div>      W_DEST_LINE TYPE I,</div>
<div>      W_DEST_COL  TYPE CHAR1,</div>
<div>      W_FIELD     TYPE CHAR20,</div>
<div>      W_LINE      TYPE I,</div>
<div>      W_GAME_OVER TYPE FLAG,</div>
<div>      W_TOTAL     TYPE I,</div>
<div>      W_REM       TYPE I,</div>
<div>      W_GONE      TYPE I,</div>
<div>      W_ST_TIME   TYPE I,</div>
<div>      W_END_TIME  TYPE I,</div>
<div>      W_EXPORTED  TYPE FLAG.</div>
<div><span style="color:#3366ff;">*&#8230;.Field symbols</span></div>
<div>FIELD-SYMBOLS: &lt;F&gt; TYPE ANY.</div>
<div><span style="color:#3366ff;">*&#8230;.Constants</span></div>
<div>CONSTANTS: ICON_0(40) TYPE C VALUE ICON_WD_RADIO_BUTTON_EMPTY,</div>
<div>           ICON_1(40) TYPE C VALUE ICON_RADIOBUTTON,</div>
<div>           ICON_2(40) TYPE C VALUE ICON_COLOR.</div>
<div><span style="color:#3366ff;">*.. Some systems don&#8217;t have above listed ICONs You can use:</span></div>
<div><span style="color:#3366ff;">**&#8230;.Constants</span></div>
<div><span style="color:#3366ff;">*CONSTANTS: ICON_0(40) TYPE C VALUE ICON_AVERAGE,      &#8221; ICON_WD_RADIO_BUTTON_EMPTY,</span></div>
<div><span style="color:#3366ff;">*           ICON_1(40) TYPE C VALUE ICON_POSITIVE,     &#8221; ICON_RADIOBUTTON,</span></div>
<div><span style="color:#3366ff;">*           ICON_2(40) TYPE C VALUE ICON_COLOR.</span></div>
<div><span style="color:#3366ff;">*</span></div>
<div><span style="color:#3366ff;">*&#8230;.Ranges</span></div>
<div>RANGES: R_NOT_GREY FOR ABDOCMODE-FLAG.</div>
<div><span style="color:#3366ff;">*&#8230;.Macros</span></div>
<div>DEFINE CONV_I_C.</div>
<div>  &amp;2 = &amp;1.</div>
<div>  CONDENSE &amp;2.</div>
<div>END-OF-DEFINITION.</div>
<div><span style="color:#3366ff;">*</span></div>
<div><span style="color:#3366ff;">*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*</span></div>
<div><span style="color:#3366ff;">* S E L E C T I O N   S C R E E N</span></div>
<div><span style="color:#3366ff;">*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*</span></div>
<div>PARAMETERS: P_NUM TYPE I DEFAULT 7.</div>
<div><span style="color:#3366ff;">*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*</span></div>
<div><span style="color:#3366ff;">* A T   S E L E C T I O N &#8211; S C R E E N .</span></div>
<div><span style="color:#3366ff;">*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*</span></div>
<div>AT SELECTION-SCREEN.</div>
<div>  IF  P_NUM GT 9</div>
<div>  OR  P_NUM LT 5.</div>
<div>    MESSAGE E398(00) WITH &#8216;Currently allowed only: 5, 7, 9&#8242;.</div>
<div>  ENDIF.</div>
<div>  L_MOD = P_NUM MOD 2.</div>
<div>  IF L_MOD = 0.</div>
<div>    MESSAGE E398(00) WITH &#8216;Only odd numbers are allowed&#8217;.</div>
<div>  ENDIF.</div>
<div><span style="color:#3366ff;">*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*</span></div>
<div><span style="color:#3366ff;">* S T A R T   O F   S E L E C T I O N</span></div>
<div><span style="color:#3366ff;">*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*</span></div>
<div>START-OF-SELECTION.</div>
<div>  GET TIME FIELD W_ST_TIME.</div>
<div>  PERFORM FILL_MARBLES.</div>
<div>  PERFORM FILL_PRINT_TABLE.</div>
<div>  PERFORM WRITE_MARBLES.</div>
<div><span style="color:#3366ff;">*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*</span></div>
<div><span style="color:#3366ff;">* A T   L I N E   S E L E C T I O N</span></div>
<div><span style="color:#3366ff;">*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*</span></div>
<div>AT LINE-SELECTION.</div>
<div>  GET CURSOR FIELD W_FIELD.</div>
<div>  PERFORM CALCULATE_MARBLES.</div>
<div>  PERFORM FILL_PRINT_TABLE.</div>
<div>  SY-LSIND = 0.</div>
<div>  PERFORM WRITE_MARBLES.</div>
<div>  PERFORM CHECK_GAME_OVER.</div>
<div><span style="color:#3366ff;">*&amp;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;*</span></div>
<div><span style="color:#3366ff;">*&amp;      Form  fill_marbles</span></div>
<div><span style="color:#3366ff;">*&amp;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;*</span></div>
<div><span style="color:#3366ff;">*       Fillup the initial table for the marbles</span></div>
<div><span style="color:#3366ff;">*&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-*</span></div>
<div>FORM FILL_MARBLES .</div>
<div><span style="color:#3366ff;">* Grey cells</span></div>
<div>  L_HALF = FLOOR( P_NUM / 2 ).</div>
<div>  L_HALF_HALF = L_HALF / 2.</div>
<div>  R_NOT_GREY-SIGN   = &#8216;I&#8217;.</div>
<div>  R_NOT_GREY-OPTION = &#8216;BT&#8217;.</div>
<div>  R_NOT_GREY-LOW  = ( L_HALF &#8211; L_HALF_HALF ) + 1.</div>
<div>  R_NOT_GREY-HIGH = ( L_HALF + L_HALF_HALF ) &#8211; 1.</div>
<div>  APPEND R_NOT_GREY.</div>
<div>  CLEAR  R_NOT_GREY.</div>
<div><span style="color:#3366ff;">* Filling up the table</span></div>
<div>  DO P_NUM TIMES.</div>
<div>    L_NO_M = SY-INDEX.</div>
<div>    NEW-LINE.</div>
<div>    DO P_NUM TIMES.</div>
<div>      L_NO_S = SY-INDEX.</div>
<div>      CLEAR: L_PRINT.</div>
<div>      IF L_NO_M IN R_NOT_GREY.</div>
<div>        L_PRINT = &#8216;X&#8217;.</div>
<div>      ENDIF.</div>
<div>      IF L_NO_S IN R_NOT_GREY.</div>
<div>        L_PRINT = &#8216;X&#8217;.</div>
<div>      ENDIF.</div>
<div>      IF L_PRINT = &#8216;X&#8217;.</div>
<div>        CONV_I_C L_NO_S L_NO_C.</div>
<div>        CONCATENATE &#8216;WA_ITAB-C&#8217; L_NO_C INTO L_NAME.</div>
<div>        ASSIGN (L_NAME) TO &lt;F&gt;.</div>
<div>        IF  L_NO_S = L_HALF</div>
<div>        AND L_NO_M = L_HALF.</div>
<div>          &lt;F&gt; = &#8217;0&#8242;.</div>
<div>          W_TOTAL = W_TOTAL &#8211; 1.</div>
<div>        ELSE.</div>
<div>          &lt;F&gt; = &#8217;1&#8242;.</div>
<div>          W_TOTAL = W_TOTAL + 1.</div>
<div>        ENDIF.</div>
<div>      ELSE.</div>
<div>        WRITE: &#8216; &#8216;.</div>
<div>      ENDIF.</div>
<div>    ENDDO.</div>
<div>    APPEND WA_ITAB TO ITAB.</div>
<div>    CLEAR  WA_ITAB.</div>
<div>  ENDDO.</div>
<div>  W_REM = W_TOTAL.</div>
<div>ENDFORM.                    <span style="color:#3366ff;">&#8221; fill_marbles</span></div>
<div><span style="color:#3366ff;">*&amp;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;*</span></div>
<div><span style="color:#3366ff;">*&amp;      Form  fill_print_Table</span></div>
<div><span style="color:#3366ff;">*&amp;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;*</span></div>
<div><span style="color:#3366ff;">*       Convert ITAB value to PRINT table value .</span></div>
<div><span style="color:#3366ff;">*&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-*</span></div>
<div>FORM FILL_PRINT_TABLE .</div>
<div>  FIELD-SYMBOLS: &lt;F1&gt; TYPE ANY.</div>
<div>  REFRESH IT_PRINT.</div>
<div>  LOOP AT ITAB INTO WA_ITAB.</div>
<div>    L_NO_M = SY-INDEX.</div>
<div>    DO P_NUM TIMES.</div>
<div>      CONV_I_C SY-INDEX L_NO_C.</div>
<div>      CLEAR L_NAME.</div>
<div>      CONCATENATE &#8216;WA_ITAB-C&#8217; L_NO_C INTO L_NAME.</div>
<div>      ASSIGN (L_NAME) TO &lt;F&gt;.</div>
<div>      CLEAR L_NAME.</div>
<div>      CONCATENATE &#8216;WA_PRINT-C&#8217; L_NO_C INTO L_NAME.</div>
<div>      ASSIGN (L_NAME) TO &lt;F1&gt;.</div>
<div>      CASE &lt;F&gt;.</div>
<div>        WHEN &#8217;1&#8242;.</div>
<div>          &lt;F1&gt; = ICON_1.</div>
<div>        WHEN &#8217;0&#8242;.</div>
<div>          &lt;F1&gt; = ICON_0.</div>
<div>        WHEN &#8217;2&#8242;.</div>
<div>          &lt;F1&gt; = ICON_2.</div>
<div>        WHEN OTHERS.</div>
<div>      ENDCASE.</div>
<div>    ENDDO.</div>
<div>    APPEND WA_PRINT TO IT_PRINT.</div>
<div>    CLEAR  WA_PRINT.</div>
<div>  ENDLOOP.</div>
<div>ENDFORM.                  <span style="color:#3366ff;">  &#8221; fill_print_Table</span></div>
<div><span style="color:#3366ff;">*&amp;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;*</span></div>
<div><span style="color:#3366ff;">*&amp;      Form  write_marbles</span></div>
<div><span style="color:#3366ff;">*&amp;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;*</span></div>
<div><span style="color:#3366ff;">*       Write marbles from the PRINT table</span></div>
<div><span style="color:#3366ff;">*&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-*</span></div>
<div>FORM WRITE_MARBLES .</div>
<div>  FIELD-SYMBOLS: &lt;F1&gt; TYPE ANY.</div>
<div>  IF W_GAME_OVER IS INITIAL.</div>
<div>    LOOP AT IT_PRINT INTO WA_PRINT.</div>
<div>      SKIP 1.</div>
<div>      W_LINE = SY-TABIX.</div>
<div>      WRITE: (2) W_LINE.</div>
<div>      HIDE  W_LINE.</div>
<div>      DO P_NUM TIMES.</div>
<div>        CONV_I_C SY-INDEX L_NO_C.</div>
<div>        CLEAR L_NAME.</div>
<div>        CONCATENATE &#8216;WA_PRINT-C&#8217; L_NO_C INTO L_NAME.</div>
<div>        ASSIGN (L_NAME) TO &lt;F1&gt;.</div>
<div>        IF NOT &lt;F1&gt; IS INITIAL.</div>
<div>          WRITE: (2) &lt;F1&gt; AS ICON HOTSPOT ON, (2) &#8216; &#8216;.</div>
<div>        ELSE.</div>
<div>          WRITE: (2) &#8216; &#8216;, (2) &#8216; &#8216;.</div>
<div>        ENDIF.</div>
<div>      ENDDO.</div>
<div>    ENDLOOP.</div>
<div>  ENDIF.</div>
<div>  SKIP 4.</div>
<div>  WRITE: /(30) &#8216;Total Marbles:&#8217;,    W_TOTAL.</div>
<div>  WRITE: /(30) &#8216;Remaining Marbles&#8217;, W_REM.</div>
<div>  SKIP 4.</div>
<div>  PERFORM WRITE_5_HIGH_SCORE.</div>
<div>ENDFORM.                    &#8221; write_marbles</div>
<div><span style="color:#3366ff;">*&amp;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;*</span></div>
<div><span style="color:#3366ff;">*&amp;      Form  calculate_marbles</span></div>
<div><span style="color:#3366ff;">*&amp;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;*</span></div>
<div><span style="color:#3366ff;">*       Calculate the marbles after the user input in line selection</span></div>
<div><span style="color:#3366ff;">*&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-*</span></div>
<div>FORM CALCULATE_MARBLES .</div>
<div><span style="color:#3366ff;">* No marble has been selected</span></div>
<div>  IF W_ON IS INITIAL.</div>
<div>    PERFORM VALIDATE_INPUT.</div>
<div>  ELSE.</div>
<div><span style="color:#3366ff;">* remove the seleced marble</span></div>
<div>    PERFORM DESELECT_MARBLE.</div>
<div>    IF W_ON = &#8216;X&#8217;.</div>
<div><span style="color:#3366ff;">*     Check destination cell, if the same marble has not been selected</span></div>
<div>      PERFORM CHECK_DESTINATION.</div>
<div>    ENDIF.</div>
<div>  ENDIF.</div>
<div><span style="color:#3366ff;">* Destination is ok ..? rearrange the marbles in ITAB</span></div>
<div>  IF W_DEST_OK = &#8216;X&#8217;.</div>
<div>    PERFORM REARRANGE_MARBLES.</div>
<div>  ENDIF.</div>
<div>ENDFORM.                    <span style="color:#3366ff;">&#8221; calculate_marbles</span></div>
<div><span style="color:#3366ff;">*&amp;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;*</span></div>
<div><span style="color:#3366ff;">*&amp;      Form  validate_input</span></div>
<div><span style="color:#3366ff;">*&amp;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;*</span></div>
<div><span style="color:#3366ff;">*       Validating the selected marble, is it movable or not</span></div>
<div><span style="color:#3366ff;">*       if marble is movable, highlight it</span></div>
<div><span style="color:#3366ff;">*&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-*</span></div>
<div>FORM VALIDATE_INPUT .</div>
<div>  DATA: L_SEL_FIELD(20),</div>
<div>        L_TMP_FIELD(20),</div>
<div>        L_SEL_COL(1),</div>
<div>        L_TMP_COL(2),</div>
<div>        L_TMP_LINE TYPE I,</div>
<div>        L_OK TYPE FLAG.</div>
<div>  FIELD-SYMBOLS: &lt;F1&gt; TYPE ANY,</div>
<div>                 &lt;F2&gt; TYPE ANY.</div>
<div>  READ TABLE ITAB INTO WA_ITAB INDEX W_LINE.</div>
<div>  L_SEL_FIELD = W_FIELD.</div>
<div>  L_SEL_COL   = W_FIELD+10(1).</div>
<div>  REPLACE &#8216;PRINT&#8217; INTO L_SEL_FIELD WITH &#8216;ITAB&#8217;.</div>
<div>  CONDENSE L_SEL_FIELD.</div>
<div>  ASSIGN (L_SEL_FIELD) TO &lt;F1&gt;.</div>
<div><span style="color:#3366ff;">* value = 0 &gt;&gt; No marble</span></div>
<div>  IF &lt;F1&gt; = &#8217;0&#8242;.</div>
<div>    MESSAGE S398(00) WITH &#8216;No marble to select.!&#8217;.</div>
<div>    EXIT.</div>
<div>  ENDIF.</div>
<div><span style="color:#3366ff;">* Check right</span></div>
<div>  L_TMP_COL = L_SEL_COL + 2.</div>
<div>  IF L_TMP_COL &lt; 9.</div>
<div>    CONCATENATE &#8216;WA_ITAB-C&#8217; L_TMP_COL INTO L_TMP_FIELD.</div>
<div>    CONDENSE L_TMP_FIELD.</div>
<div>    ASSIGN (L_TMP_FIELD) TO &lt;F2&gt;.</div>
<div>    IF &lt;F2&gt; = &#8217;0&#8242;.</div>
<div>      L_OK = &#8216;X&#8217;.</div>
<div>    ENDIF.</div>
<div>  ENDIF.</div>
<div><span style="color:#3366ff;">* Check left</span></div>
<div>  IF L_OK IS INITIAL.</div>
<div>    L_TMP_COL = L_SEL_COL &#8211; 2.</div>
<div>    IF L_TMP_COL &gt; 0.</div>
<div>      CONCATENATE &#8216;WA_ITAB-C&#8217; L_TMP_COL INTO L_TMP_FIELD.</div>
<div>      CONDENSE L_TMP_FIELD.</div>
<div>      ASSIGN (L_TMP_FIELD) TO &lt;F2&gt;.</div>
<div>      IF &lt;F2&gt; = &#8217;0&#8242;.</div>
<div>        L_OK = &#8216;X&#8217;.</div>
<div>      ENDIF.</div>
<div>    ENDIF.</div>
<div>  ENDIF.</div>
<div><span style="color:#3366ff;">* check Above</span></div>
<div>  IF L_OK IS INITIAL.</div>
<div>    L_TMP_LINE = W_LINE &#8211; 2.</div>
<div>    IF L_TMP_LINE &gt; 0.</div>
<div>      READ TABLE ITAB INTO WA_ITAB INDEX L_TMP_LINE.</div>
<div>      IF &lt;F1&gt; = &#8217;0&#8242;.</div>
<div>        L_OK = &#8216;X&#8217;.</div>
<div>      ENDIF.</div>
<div>      READ TABLE ITAB INTO WA_ITAB INDEX W_LINE.</div>
<div>    ENDIF.</div>
<div>  ENDIF.</div>
<div><span style="color:#3366ff;">* Check underneath</span></div>
<div>  IF L_OK IS INITIAL.</div>
<div>    L_TMP_LINE = W_LINE + 2.</div>
<div>    IF L_TMP_LINE &lt; 9.</div>
<div>      READ TABLE ITAB INTO WA_ITAB INDEX L_TMP_LINE.</div>
<div>      IF &lt;F1&gt; = &#8217;0&#8242;.</div>
<div>        L_OK = &#8216;X&#8217;.</div>
<div>      ENDIF.</div>
<div>      READ TABLE ITAB INTO WA_ITAB INDEX W_LINE.</div>
<div>    ENDIF.</div>
<div>  ENDIF.</div>
<div><span style="color:#3366ff;">* Ok .. than ON</span></div>
<div>  IF L_OK = &#8216;X&#8217;.</div>
<div>    W_ON = &#8216;X&#8217;.</div>
<div>    &lt;F1&gt; = &#8217;2&#8242;.</div>
<div>    MODIFY ITAB FROM WA_ITAB INDEX W_LINE.</div>
<div>    W_SEL_LINE = W_LINE.</div>
<div>    W_SEL_COL  = L_SEL_COL .</div>
<div>  ELSE.</div>
<div>    MESSAGE S398(00) WITH &#8216;No marble to select.!&#8217; &#8216; &#8216; &#8216; &#8216; &#8216; &#8216;.</div>
<div>  ENDIF.</div>
<div>ENDFORM.                   <span style="color:#3366ff;"> &#8221; validate_input</span></div>
<div><span style="color:#3366ff;">*&amp;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;*</span></div>
<div><span style="color:#3366ff;">*&amp;      Form  deselect_marble</span></div>
<div><span style="color:#3366ff;">*&amp;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;*</span></div>
<div><span style="color:#3366ff;">*       Deselect the marble if the same marble is selected again</span></div>
<div><span style="color:#3366ff;">*&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-*</span></div>
<div>FORM DESELECT_MARBLE .</div>
<div>  DATA: L_SEL_FIELD(20).</div>
<div>  FIELD-SYMBOLS: &lt;F1&gt; TYPE ANY.</div>
<div>  READ TABLE ITAB INTO WA_ITAB INDEX W_LINE.</div>
<div>  L_SEL_FIELD = W_FIELD.</div>
<div>  REPLACE &#8216;PRINT&#8217; INTO L_SEL_FIELD WITH &#8216;ITAB&#8217;.</div>
<div>  CONDENSE L_SEL_FIELD.</div>
<div>  ASSIGN (L_SEL_FIELD) TO &lt;F1&gt;.</div>
<div>  IF &lt;F1&gt; = &#8217;2&#8242;.</div>
<div>    &lt;F1&gt; = &#8217;1&#8242;.</div>
<div>    MODIFY ITAB FROM WA_ITAB INDEX W_LINE.</div>
<div>    MESSAGE S398(00) WITH &#8216;Marble was deselected..!!&#8217;.</div>
<div>    CLEAR: W_ON, W_SEL_LINE, W_SEL_COL.</div>
<div>  ENDIF.</div>
<div>ENDFORM.                    &#8221; deselect_marble</div>
<div><span style="color:#3366ff;">*&amp;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;*</span></div>
<div><span style="color:#3366ff;">*&amp;      Form  check_destination</span></div>
<div><span style="color:#3366ff;">*&amp;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;*</span></div>
<div><span style="color:#3366ff;">*       Check the destination cell, it should not be empty and distnce</span></div>
<div><span style="color:#3366ff;">*       between selected cell and destination cell must be 2</span></div>
<div><span style="color:#3366ff;">*&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-*</span></div>
<div>FORM CHECK_DESTINATION .</div>
<div>  DATA: L_DEST_FIELD(20),</div>
<div>        L_DEST_COL(1),</div>
<div>        L_DEST_NOT_OK TYPE FLAG,</div>
<div>        L_TMP_LINE TYPE I,</div>
<div>        L_TMP_COL  TYPE C.</div>
<div>  DATA: L_ITAB_DEST LIKE ITAB.</div>
<div>  FIELD-SYMBOLS: &lt;F1&gt; TYPE ANY.</div>
<div>  READ TABLE ITAB INTO L_ITAB_DEST INDEX W_LINE.</div>
<div>  L_DEST_FIELD = W_FIELD.</div>
<div>  L_DEST_COL   = W_FIELD+10(1).</div>
<div>  REPLACE &#8216;WA_PRINT&#8217; INTO L_DEST_FIELD WITH &#8216;L_ITAB_DEST&#8217;.</div>
<div>  CONDENSE L_DEST_FIELD.</div>
<div>  ASSIGN (L_DEST_FIELD) TO &lt;F1&gt;.</div>
<div><span style="color:#3366ff;">* Destination should be empty</span></div>
<div>  IF &lt;F1&gt; &lt;&gt; &#8217;0&#8242;.</div>
<div>    L_DEST_NOT_OK = &#8216;X&#8217;.</div>
<div>  ENDIF.</div>
<div><span style="color:#3366ff;">* Calcualate the distance between selected marble and destination</span></div>
<div>  IF L_DEST_NOT_OK IS INITIAL.</div>
<div>    IF W_SEL_LINE &lt;&gt; W_LINE.</div>
<div>      L_TMP_LINE = ABS( W_SEL_LINE &#8211; W_LINE ).</div>
<div>      IF L_TMP_LINE &lt;&gt; &#8217;2&#8242;.</div>
<div>        L_DEST_NOT_OK = &#8216;X&#8217;.</div>
<div>      ENDIF.</div>
<div>    ENDIF.</div>
<div>  ENDIF.</div>
<div>  IF L_DEST_NOT_OK IS INITIAL.</div>
<div>    IF W_SEL_COL &lt;&gt; L_DEST_COL.</div>
<div>      L_TMP_COL = ABS( W_SEL_COL &#8211; L_DEST_COL ).</div>
<div>      IF L_TMP_COL &lt;&gt; &#8217;2&#8242;.</div>
<div>        L_DEST_NOT_OK = &#8216;X&#8217;.</div>
<div>      ENDIF.</div>
<div>    ENDIF.</div>
<div>  ENDIF.</div>
<div><span style="color:#3366ff;">* destination not ok</span></div>
<div>  IF L_DEST_NOT_OK = &#8216;X&#8217;.</div>
<div>    MESSAGE S398(00) WITH &#8216;Destination is not GOOD&#8217; &#8216; &#8216; &#8216; &#8216; &#8216; &#8216;.</div>
<div>  ELSE.</div>
<div>    W_DEST_OK = &#8216;X&#8217;.</div>
<div>    W_DEST_LINE = W_LINE.</div>
<div>    W_DEST_COL  = L_DEST_COL.</div>
<div>  ENDIF.</div>
<div>ENDFORM.                   <span style="color:#3366ff;"> &#8221; check_destination</span></div>
<div><span style="color:#3366ff;">*&amp;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;*</span></div>
<div><span style="color:#3366ff;">*&amp;      Form  rearrange_marbles</span></div>
<div><span style="color:#3366ff;">*&amp;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;*</span></div>
<div><span style="color:#3366ff;">*       Rearrange marbles</span></div>
<div><span style="color:#3366ff;">*     1 Remove the marble which is inbetween the selected &amp; destination</span></div>
<div><span style="color:#3366ff;">*     2 Remove the marble from the selected cell</span></div>
<div><span style="color:#3366ff;">*     3 Put marble on the destination cell</span></div>
<div><span style="color:#3366ff;">*&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-*</span></div>
<div>FORM REARRANGE_MARBLES .</div>
<div>  DATA: L_FIELD(20),</div>
<div>        L_TMP_LINE TYPE I,</div>
<div>        L_TMP_COL  TYPE CHAR1,</div>
<div>        L_NO_MOVE  TYPE FLAG,</div>
<div>        L_ITAB LIKE ITAB.</div>
<div>*</div>
<div>  FIELD-SYMBOLS: &lt;F1&gt; TYPE ANY.</div>
<div><span style="color:#3366ff;">* Make the inbetween column as 0 if both lines are same</span></div>
<div>  IF W_SEL_LINE = W_DEST_LINE.</div>
<div>    IF W_SEL_COL &gt; W_DEST_COL.</div>
<div>      L_TMP_COL = W_DEST_COL + 1.</div>
<div>    ELSE.</div>
<div>      L_TMP_COL = W_SEL_COL + 1.</div>
<div>    ENDIF.</div>
<div>    READ TABLE ITAB INTO L_ITAB INDEX W_SEL_LINE.</div>
<div>    L_FIELD = W_FIELD.</div>
<div>    REPLACE &#8216;WA_PRINT&#8217; INTO L_FIELD WITH &#8216;L_ITAB&#8217;.</div>
<div>    CONDENSE L_FIELD.</div>
<div>    L_FIELD+8(1) = L_TMP_COL.</div>
<div>    ASSIGN (L_FIELD) TO &lt;F1&gt;.</div>
<div>    IF &lt;F1&gt; = 1.</div>
<div>      &lt;F1&gt; = &#8217;0&#8242;.</div>
<div>      W_GONE = W_GONE + 1.</div>
<div>      MODIFY ITAB FROM L_ITAB INDEX W_SEL_LINE.</div>
<div>    ELSE.</div>
<div>      L_NO_MOVE = &#8216;X&#8217;.</div>
<div>    ENDIF.</div>
<div>    CLEAR  L_ITAB.</div>
<div>  ENDIF.</div>
<div><span style="color:#3366ff;">* Make the inbetween line as 0 if both lines are same</span></div>
<div>  IF W_SEL_COL = W_DEST_COL.</div>
<div>    IF W_SEL_LINE &gt; W_DEST_LINE.</div>
<div>      L_TMP_LINE = W_DEST_LINE + 1.</div>
<div>    ELSE.</div>
<div>      L_TMP_LINE = W_SEL_LINE + 1.</div>
<div>    ENDIF.</div>
<div>    READ TABLE ITAB INTO L_ITAB INDEX L_TMP_LINE.</div>
<div>    L_FIELD = W_FIELD.</div>
<div>    REPLACE &#8216;WA_PRINT&#8217; INTO L_FIELD WITH &#8216;L_ITAB&#8217;.</div>
<div>    CONDENSE L_FIELD.</div>
<div>    L_FIELD+8(1) = W_SEL_COL.</div>
<div>    ASSIGN (L_FIELD) TO &lt;F1&gt;.</div>
<div>    IF &lt;F1&gt; = 1.</div>
<div>      &lt;F1&gt; = &#8217;0&#8242;.</div>
<div>      W_GONE = W_GONE + 1.</div>
<div>      MODIFY ITAB FROM L_ITAB INDEX L_TMP_LINE.</div>
<div>    ELSE.</div>
<div>      L_NO_MOVE = &#8216;X&#8217;.</div>
<div>    ENDIF.</div>
<div>    CLEAR  L_ITAB.</div>
<div>  ENDIF.</div>
<div>  IF L_NO_MOVE IS INITIAL.</div>
<div><span style="color:#3366ff;">*   Make Destination = 1</span></div>
<div>    READ TABLE ITAB INTO L_ITAB INDEX W_DEST_LINE.</div>
<div>    L_FIELD = W_FIELD.</div>
<div>    REPLACE &#8216;WA_PRINT&#8217; INTO L_FIELD WITH &#8216;L_ITAB&#8217;.</div>
<div>    CONDENSE L_FIELD.</div>
<div>    L_FIELD+8(1) = W_DEST_COL.</div>
<div>    ASSIGN (L_FIELD) TO &lt;F1&gt;.</div>
<div>    &lt;F1&gt; = &#8217;1&#8242;.</div>
<div>    MODIFY ITAB FROM L_ITAB INDEX W_DEST_LINE.</div>
<div>    CLEAR  L_ITAB.</div>
<div><span style="color:#3366ff;">*   Make Selected = 0.</span></div>
<div>    READ TABLE ITAB INTO L_ITAB INDEX W_SEL_LINE.</div>
<div>    L_FIELD = W_FIELD.</div>
<div>    REPLACE &#8216;WA_PRINT&#8217; INTO L_FIELD WITH &#8216;L_ITAB&#8217;.</div>
<div>    CONDENSE L_FIELD.</div>
<div>    L_FIELD+8(1) = W_SEL_COL.</div>
<div>    ASSIGN (L_FIELD) TO &lt;F1&gt;.</div>
<div>    &lt;F1&gt; = &#8217;0&#8242;.</div>
<div>    MODIFY ITAB FROM L_ITAB INDEX W_SEL_LINE.</div>
<div>    CLEAR  L_ITAB.</div>
<div>  ELSE.</div>
<div><span style="color:#3366ff;">*   Make Selected = 1 when no movement</span></div>
<div>    READ TABLE ITAB INTO L_ITAB INDEX W_SEL_LINE.</div>
<div>    L_FIELD = W_FIELD.</div>
<div>    REPLACE &#8216;WA_PRINT&#8217; INTO L_FIELD WITH &#8216;L_ITAB&#8217;.</div>
<div>    CONDENSE L_FIELD.</div>
<div>    L_FIELD+8(1) = W_SEL_COL.</div>
<div>    ASSIGN (L_FIELD) TO &lt;F1&gt;.</div>
<div>    &lt;F1&gt; = &#8217;1&#8242;.</div>
<div>    MODIFY ITAB FROM L_ITAB INDEX W_SEL_LINE.</div>
<div>    CLEAR  L_ITAB.</div>
<div>  ENDIF.</div>
<div>  W_REM = W_TOTAL &#8211; W_GONE.</div>
<div>  CLEAR: W_DEST_OK, W_DEST_LINE, W_DEST_COL,</div>
<div>         W_ON,      W_SEL_LINE,  W_SEL_COL.</div>
<div>*</div>
<div>ENDFORM.                    <span style="color:#3366ff;">&#8221; rearrange_marbles</span></div>
<div><span style="color:#3366ff;">*&amp;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;*</span></div>
<div><span style="color:#3366ff;">*&amp;      Form  check_game_over</span></div>
<div><span style="color:#3366ff;">*&amp;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;*</span></div>
<div><span style="color:#3366ff;">*       Check game over when the remaining marbles are half than</span></div>
<div><span style="color:#3366ff;">*         the original marbles. Check for all cells with the marbles and</span></div>
<div><span style="color:#3366ff;">*         check adjacent cells (right, left, above and underneath cells)</span></div>
<div><span style="color:#3366ff;">*         with the value. If the marble found in any adjacent cell than</span></div>
<div><span style="color:#3366ff;">*         GAME is NOT OVER</span></div>
<div><span style="color:#3366ff;">*&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-*</span></div>
<div>FORM CHECK_GAME_OVER .</div>
<div>  STATICS: L_TOT_HALF TYPE I.</div>
<div>  DATA: L_ITAB     LIKE ITAB,</div>
<div>        L_ITAB_TMP LIKE ITAB.</div>
<div>  DATA: L_TMP_FIELD(20),</div>
<div>        L_SEL_COL(1),</div>
<div>        L_TMP_COL(2),</div>
<div>        L_OK       TYPE FLAG,</div>
<div>        L_LINE     TYPE I,</div>
<div>        L_TMP_LINE TYPE I.</div>
<div>  CLEAR: L_OK.</div>
<div>  FIELD-SYMBOLS: &lt;F1&gt; TYPE ANY,</div>
<div>                 &lt;F2&gt; TYPE ANY.</div>
<div>  CHECK W_ON IS INITIAL.</div>
<div>  L_TOT_HALF = ABS( W_TOTAL / 2 ).</div>
<div>  CHECK W_REM &lt; L_TOT_HALF.</div>
<div>  LOOP AT ITAB INTO L_ITAB.</div>
<div>    L_LINE = SY-TABIX.</div>
<div>    L_ITAB_TMP = L_ITAB.</div>
<div>    DO P_NUM TIMES.</div>
<div>      L_ITAB = L_ITAB_TMP.</div>
<div>      L_SEL_COL = SY-INDEX.</div>
<div>      CONV_I_C SY-INDEX L_NO_C.</div>
<div>      CLEAR L_NAME.</div>
<div>      CONCATENATE &#8216;L_ITAB-C&#8217; L_NO_C INTO L_NAME.</div>
<div>      ASSIGN (L_NAME) TO &lt;F1&gt;.</div>
<div>      IF &lt;F1&gt; IS INITIAL</div>
<div>      OR &lt;F1&gt; = &#8217;0&#8242;.</div>
<div>        CONTINUE.</div>
<div>      ENDIF.</div>
<div><span style="color:#3366ff;">*      IF &lt;F1&gt; = &#8217;1&#8242;.</span></div>
<div><span style="color:#3366ff;">*        l_ok = &#8216;X&#8217;.</span></div>
<div><span style="color:#3366ff;">*        exit.</span></div>
<div><span style="color:#3366ff;">*      ENDIF.</span></div>
<div><span style="color:#3366ff;">*     right neighbour</span></div>
<div>      L_TMP_COL = L_SEL_COL + 1.</div>
<div>      IF L_TMP_COL &lt; 9.</div>
<div>        CONCATENATE &#8216;L_ITAB-C&#8217; L_TMP_COL INTO L_TMP_FIELD.</div>
<div>        CONDENSE L_TMP_FIELD.</div>
<div>        ASSIGN (L_TMP_FIELD) TO &lt;F2&gt;.</div>
<div>        IF &lt;F2&gt; = &#8217;1&#8242;.</div>
<div>          L_TMP_COL = L_SEL_COL + 2.</div>
<div>          IF L_TMP_COL &lt; 9.</div>
<div>            CONCATENATE &#8216;L_ITAB-C&#8217; L_TMP_COL INTO L_TMP_FIELD.</div>
<div>            CONDENSE L_TMP_FIELD.</div>
<div>            ASSIGN (L_TMP_FIELD) TO &lt;F2&gt;.</div>
<div>            IF &lt;F2&gt; = &#8217;0&#8242;.</div>
<div>              L_OK = &#8216;X&#8217;.</div>
<div>              EXIT.</div>
<div>            ENDIF.</div>
<div>          ENDIF.</div>
<div>        ENDIF.</div>
<div>      ENDIF.</div>
<div><span style="color:#3366ff;">*     Check left</span></div>
<div>      L_TMP_COL = L_SEL_COL &#8211; 1.</div>
<div>      IF L_TMP_COL &gt; 0.</div>
<div>        CONCATENATE &#8216;L_ITAB-C&#8217; L_TMP_COL INTO L_TMP_FIELD.</div>
<div>        CONDENSE L_TMP_FIELD.</div>
<div>        ASSIGN (L_TMP_FIELD) TO &lt;F2&gt;.</div>
<div>        IF &lt;F2&gt; = &#8217;1&#8242;.</div>
<div>          L_TMP_COL = L_SEL_COL &#8211; 2.</div>
<div>          IF L_TMP_COL &gt; 0.</div>
<div>            CONCATENATE &#8216;L_ITAB-C&#8217; L_TMP_COL INTO L_TMP_FIELD.</div>
<div>            CONDENSE L_TMP_FIELD.</div>
<div>            ASSIGN (L_TMP_FIELD) TO &lt;F2&gt;.</div>
<div>            IF &lt;F2&gt; = &#8217;0&#8242;.</div>
<div>              L_OK = &#8216;X&#8217;.</div>
<div>              EXIT.</div>
<div>            ENDIF.</div>
<div>          ENDIF.</div>
<div>        ENDIF.</div>
<div>      ENDIF.</div>
<div>      CONCATENATE &#8216;L_ITAB-C&#8217; L_NO_C INTO L_TMP_FIELD.</div>
<div>      CONDENSE L_TMP_FIELD.</div>
<div>      ASSIGN (L_TMP_FIELD) TO &lt;F2&gt;.</div>
<div><span style="color:#3366ff;">*     check Above</span></div>
<div>      L_TMP_LINE = L_LINE &#8211; 1.</div>
<div>      IF L_TMP_LINE &gt; 0.</div>
<div>        CLEAR L_ITAB.</div>
<div>        READ TABLE ITAB INTO L_ITAB INDEX L_TMP_LINE.</div>
<div>        IF &lt;F2&gt; = &#8217;1&#8242;.</div>
<div>          L_TMP_LINE = L_LINE &#8211; 2.</div>
<div>          IF L_TMP_LINE &gt; 0.</div>
<div>            CLEAR L_ITAB.</div>
<div>            READ TABLE ITAB INTO L_ITAB INDEX L_TMP_LINE.</div>
<div>            IF &lt;F2&gt; = &#8217;0&#8242;.</div>
<div>              L_OK = &#8216;X&#8217;.</div>
<div>              EXIT.</div>
<div>            ENDIF.</div>
<div>          ENDIF.</div>
<div>        ENDIF.</div>
<div>      ENDIF.</div>
<div><span style="color:#3366ff;">*     Check underneath</span></div>
<div>      L_TMP_LINE = L_LINE + 1.</div>
<div>      IF L_TMP_LINE &lt; 9.</div>
<div>        CLEAR L_ITAB.</div>
<div>        READ TABLE ITAB INTO L_ITAB INDEX L_TMP_LINE.</div>
<div>        IF &lt;F2&gt; = &#8217;1&#8242;.</div>
<div>          L_TMP_LINE = L_LINE + 2.</div>
<div>          IF L_TMP_LINE &lt; 9.</div>
<div>            CLEAR L_ITAB.</div>
<div>            READ TABLE ITAB INTO L_ITAB INDEX L_TMP_LINE.</div>
<div>            IF &lt;F2&gt; = &#8217;0&#8242;.</div>
<div>              L_OK = &#8216;X&#8217;.</div>
<div>              EXIT.</div>
<div>            ENDIF.</div>
<div>          ENDIF.</div>
<div>        ENDIF.</div>
<div>      ENDIF.</div>
<div>    ENDDO.</div>
<div>    IF L_OK = &#8216;X&#8217;.</div>
<div>      EXIT.</div>
<div>    ENDIF.</div>
<div>  ENDLOOP.</div>
<div>  IF L_OK IS INITIAL.</div>
<div>    W_GAME_OVER = &#8216;X&#8217;.</div>
<div>    MESSAGE S398(00) WITH &#8216;Game Over. Socre:&#8217; W_REM.</div>
<div>    PERFORM EXPORT_HIGH_SCORE.</div>
<div><span style="color:#3366ff;">*    leave program.</span></div>
<div>  ENDIF.</div>
<div>ENDFORM.                   <span style="color:#3366ff;"> &#8221; check_game_over</span></div>
<div><span style="color:#3366ff;">*&amp;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;*</span></div>
<div><span style="color:#3366ff;">*&amp;      Form  export_high_score</span></div>
<div><span style="color:#3366ff;">*&amp;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;*</span></div>
<div><span style="color:#3366ff;">*       Export High Score to memory when the game is over</span></div>
<div><span style="color:#3366ff;">*&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-*</span></div>
<div>FORM EXPORT_HIGH_SCORE .</div>
<div>  DATA: L_TIME TYPE I.</div>
<div>  CHECK W_EXPORTED IS INITIAL.</div>
<div>  GET TIME FIELD W_END_TIME.</div>
<div>  L_TIME = W_END_TIME &#8211; W_ST_TIME.</div>
<div>  W_SCORE-UNAME = SY-UNAME.</div>
<div>  W_SCORE-SCORE = W_REM.</div>
<div>  W_SCORE-TIME  = L_TIME.</div>
<div>  APPEND W_SCORE TO IT_SCORE.</div>
<div>  SORT IT_SCORE BY SCORE TIME.</div>
<div>  LOOP AT IT_SCORE INTO W_SCORE.</div>
<div>    W_SCORE-SRL = SY-TABIX.</div>
<div>    MODIFY IT_SCORE FROM W_SCORE.</div>
<div>    CLEAR  W_SCORE.</div>
<div>  ENDLOOP.</div>
<div>  DELETE IT_SCORE WHERE SRL &gt; 5.</div>
<div>  EXPORT IT_SCORE = IT_SCORE TO DATABASE INDX(ZZ)</div>
<div>         ID &#8216;ZGAME_MAR&#8217;.</div>
<div>  W_EXPORTED = &#8216;X&#8217;.</div>
<div>ENDFORM.                    <span style="color:#3366ff;">&#8221; export_high_score</span></div>
<div><span style="color:#3366ff;">*&amp;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;*</span></div>
<div><span style="color:#3366ff;">*&amp;      Form  write_5_high_score</span></div>
<div><span style="color:#3366ff;">*&amp;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;*</span></div>
<div><span style="color:#3366ff;">*       Write 5 high scores</span></div>
<div><span style="color:#3366ff;">*&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-*</span></div>
<div>FORM WRITE_5_HIGH_SCORE .</div>
<div>  IMPORT IT_SCORE = IT_SCORE FROM DATABASE INDX(ZZ)</div>
<div>         ID &#8216;ZGAME_MAR&#8217;.</div>
<div>  WRITE: /(12) &#8216;User&#8217;,</div>
<div>          (10) &#8216;Score&#8217; RIGHT-JUSTIFIED ,</div>
<div>          (10) &#8216;Time&#8217;  RIGHT-JUSTIFIED.</div>
<div>  WRITE: /(34) SY-ULINE.</div>
<div>  LOOP AT IT_SCORE INTO W_SCORE.</div>
<div>    WRITE: /(12) W_SCORE-UNAME,</div>
<div>            (10) W_SCORE-SCORE,</div>
<div>            (10) W_SCORE-TIME.</div>
<div>  ENDLOOP.</div>
<div>ENDFORM.                  <span style="color:#3366ff;">  &#8221; write_5_high_score</span></div>
<div><span style="color:#000000;">*source= Naimesh Patel</span></div>


<p>You might also be interested in these posts:<ol><li><a href='http://www.abap-tutorials.com/2009/08/24/tic-tac-toe-game-in-sap/' rel='bookmark' title='Tic-Tac-Toe Game in SAP'>Tic-Tac-Toe Game in SAP</a></li>
<li><a href='http://www.abap-tutorials.com/2009/08/06/search-for-smartforms-in-your-language/' rel='bookmark' title='ABAP Program to Search For SMARTFORMS in your Language'>ABAP Program to Search For SMARTFORMS in your Language</a></li>
<li><a href='http://www.abap-tutorials.com/2009/09/17/abap-program-to-add-colors-in-alv-grid/' rel='bookmark' title='ABAP Program to add Colors in ALV Grid'>ABAP Program to add Colors in ALV Grid</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.abap-tutorials.com/2009/08/01/marble-game/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

