Warning: include_once(http://erpgenie.com/_borders/topabap.htm) [function.include-once]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /var/www/vhosts/erpgenie.com/httpdocs/abaptips/templates/rhuk_solarflare_ii/index.php on line 52

Warning: include_once() [function.include]: Failed opening 'http://erpgenie.com/_borders/topabap.htm' for inclusion (include_path='.:') in /var/www/vhosts/erpgenie.com/httpdocs/abaptips/templates/rhuk_solarflare_ii/index.php on line 52

Login

Login to view more content!!!





Lost Password?
No account yet? Register

Registered Access

Poll

What area of ABAP are you interested in?
 
Home arrow Sample Code arrow Games arrow Tower of Hanoi
Tower of Hanoi PDF Print E-mail
User Rating: / 2
PoorBest 
Written by Kevin Wilson   
Saturday, 24 February 2007
REPORT ZKJW1 .

INCLUDE <COLOR>.

TYPES: BEGIN OF LINE_TYPE,
         PEG(1) TYPE C,
         POS TYPE I,
         LIN(5) TYPE C,
       END OF LINE_TYPE.
DATA:  LINES    TYPE LINE_TYPE OCCURS 0 WITH HEADER LINE.
DATA: WALINES TYPE LINE_TYPE.
DATA: VPEG1(1) TYPE C.
DATA: VPEG2(1) TYPE C.
DATA: FIRST(1) TYPE C VALUE SPACE.
DATA: INIT(1) TYPE C VALUE 1.
DATA: MOVECNT TYPE I VALUE 0.

PERFORM BUILD_POLE.
PERFORM LOAD.
PERFORM START_SETUP.

AT LINE-SELECTION.
  PERFORM GET_PEG.
  IF FIRST = SPACE.
    PERFORM MAKE_MOVE.
  ENDIF.
*&---------------------------------------------------------------------*
*&      Form  BUILD_POLE
*&---------------------------------------------------------------------*
FORM BUILD_POLE.
  SY-LSIND = 0.
  IF INIT = '1'.
    SKIP '1'.
  ELSE.
    SKIP 3.
  ENDIF.
  INIT = '0'.
  WRITE: /15 '|', 29 '|', 43 '|'.
  WRITE: /15 '|', 29 '|', 43 '|'.
  WRITE: /15 '|', 29 '|', 43 '|'.
  WRITE: /15 '|', 29 '|', 43 '|'.
  WRITE: /15 '|', 29 '|', 43 '|'.
  WRITE: /10(11) SY-ULINE, 24(11) SY-ULINE, 38(11) SY-ULINE.
ENDFORM.                               " BUILD_POLE
*&---------------------------------------------------------------------*
*&      Form  START_SETUP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM START_SETUP.
  DATA X TYPE I.
  DATA Y TYPE I.

  SY-LSIND = 0.
  LOOP AT LINES.
    IF LINES-PEG = 1.
      X = 10.
    ENDIF.
    IF LINES-PEG = 2.
      X = 24.
    ENDIF.
    IF LINES-PEG = 3.
      X = 38.
    ENDIF.

    Y = LINES-POS + 3.
    SKIP TO LINE Y.
    POSITION X.
    WRITE: / LINES-LIN RIGHT-JUSTIFIED HOTSPOT.
    X = X + 6.
    POSITION X.
    WRITE  LINES-LIN LEFT-JUSTIFIED HOTSPOT.
  ENDLOOP.

  PERFORM CHECK_COMPLETE.
ENDFORM.                               " START_SETUP

*&---------------------------------------------------------------------*
*&      Form  LOAD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM LOAD.
  REFRESH LINES.
  DO.
    IF SY-INDEX > 5.
      EXIT.
    ENDIF.
    LINES-PEG = '1'.
    LINES-POS = SY-INDEX.
    LINES-LIN = 'XXXXX'(SY-INDEX).
    APPEND LINES.

    LINES-PEG = '2'.
    LINES-POS = SY-INDEX.
    LINES-LIN = SPACE.
    APPEND LINES.

    LINES-PEG = '3'.
    LINES-POS = SY-INDEX.
    LINES-LIN = SPACE.
    APPEND LINES.

  ENDDO.

ENDFORM.                               " LOAD
*&---------------------------------------------------------------------*
*&      Form  GET_PEG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM GET_PEG.
  IF SY-CUCOL > 10 AND SY-CUCOL < 22.
    IF FIRST = SPACE.
      VPEG1 = '1'.
      FIRST = '1'.
    ELSE.
      VPEG2 = '1'.
      FIRST = SPACE.
    ENDIF.
  ENDIF.
  IF SY-CUCOL > 24 AND SY-CUCOL < 36.
    IF FIRST = SPACE.
      VPEG1 = '2'.
      FIRST = '1'.
    ELSE.
      VPEG2 = '2'.
      FIRST = SPACE.
    ENDIF.
  ENDIF.
  IF SY-CUCOL > 38 AND SY-CUCOL < 50.
    IF FIRST = SPACE.
      VPEG1 = '3'.
      FIRST = '1'.
    ELSE.
      VPEG2 = '3'.
      FIRST = SPACE.
    ENDIF.
  ENDIF.

ENDFORM.                               " GET_PEG
*&---------------------------------------------------------------------*
*&      Form  MAKE_MOVE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM MAKE_MOVE.
  DATA: TLIN1 LIKE LINES-LIN,
        TLIN2 LIKE LINES-LIN,
        INDEX1 TYPE I,
        INDEX2 TYPE I,
        TPOS1 TYPE I,
        TPOS2 TYPE I,
        L1 TYPE I,
        L2 TYPE I.
  CLEAR: TLIN1,
        TLIN2,
        INDEX1,
        INDEX2,
        TPOS1,
        TPOS2,
        L1,
        L2.

  IF VPEG1 = VPEG2.
    WRITE:/ 'Error. You need to select two pegs.'.
    WRITE:/.
    WRITE:/ '       Press back arrow to continue.'.
    EXIT.
  ENDIF.
  SORT LINES.
  LOOP AT LINES WHERE PEG = VPEG1.
    IF LINES-LIN NE SPACE.
      TLIN1 = LINES-LIN.
      INDEX1 = SY-TABIX.
      EXIT.
    ENDIF.
  ENDLOOP.
  IF SY-SUBRC NE 0.
    WRITE:/ 'Error. There is nothing to move from peg:', VPEG1.
    WRITE:/.
    WRITE:/ '       Press back arrow to continue.'.
    EXIT.
  ENDIF.
  LOOP AT LINES WHERE PEG = VPEG2.
    IF LINES-LIN NE SPACE.
      TLIN2 = LINES-LIN.
      TPOS2 = LINES-POS - 1.
      INDEX2 = SY-TABIX.
      EXIT.
    ENDIF.
  ENDLOOP.
  IF TPOS2 = 0.
    TPOS2 = 5.
  ENDIF.
*
  L1 = STRLEN( TLIN1 ).
  L2 = STRLEN( TLIN2 ).
  IF L1 > L2 AND TLIN2 NE SPACE.
  WRITE :/ 'Error. Disc on peg:', VPEG1, 'is greater than disc on peg:',
    VPEG2.
    WRITE:/.
    WRITE:/ '       Press back arrow to continue.'.
    EXIT.
  ENDIF.
  READ TABLE LINES INDEX INDEX1..
  LINES-LIN = SPACE.
  MODIFY LINES INDEX INDEX1.
  LOOP AT LINES WHERE PEG = VPEG2 AND
                      POS = TPOS2.
    LINES-LIN = TLIN1.
    MODIFY LINES.
  ENDLOOP.
  ADD 1 TO MOVECNT.
  PERFORM BUILD_POLE.
  PERFORM START_SETUP.
ENDFORM.                               " MAKE_MOVE
*&---------------------------------------------------------------------*
*&      Form  CHECK_COMPLETE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM CHECK_COMPLETE.
  LOOP AT LINES WHERE PEG = '1' AND  LIN NE SPACE.
  ENDLOOP.
  IF SY-SUBRC = 0.
    EXIT.
  ENDIF.
  LOOP AT LINES WHERE PEG = '2' AND
                      LIN NE SPACE.
  ENDLOOP.
  IF SY-SUBRC = 0.
    EXIT.
  ENDIF.
  SY-LSIND = 0.
  SKIP TO LINE 20.
  WRITE: /30 'W E L L   D O N E'.
  WRITE: /.
  WRITE: /10 'It took you', MOVECNT, 'moves'.
ENDFORM.                    " CHECK_COMPLETE

Related Items:

 
< Prev   Next >

Google Search

Statistics

Contribution Activity
Utilities: 38
Tips and Tricks: 333
Sample Code: 164
Total Contributions: 550

Member Activity
Members: 6244 since 2/1/2007!
New: 1 since yesterday!
Visitors: 1077569

Newest Members

Welcome our newest members:

Google Ads


Warning: include(http://erpgenie.com/_borders/bottom.htm) [function.include]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /var/www/vhosts/erpgenie.com/httpdocs/abaptips/includes/footer.php on line 22

Warning: include() [function.include]: Failed opening 'http://erpgenie.com/_borders/bottom.htm' for inclusion (include_path='.:') in /var/www/vhosts/erpgenie.com/httpdocs/abaptips/includes/footer.php on line 22