Shared Top Border

Enterprise Resource
Planning Portal

 

Advertise | Founder BLOG

ERPGenie.COM ABAP Tips and Tricks Database

THE ultimate
ERP website

 

Forums | Vote for us |

Google    Other Search Options

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

Google Ads

Shared Bottom Border

Contact Us | Polls | Add URL | Contribute | Privacy | Terms | Feedback

Discussion Forum | BLOG | Consultants: Post your resume | Companies: Advertise on ERPGenie.COM | Post Job
Financials Consultant | Consultant Review | Gallia Consulting | Supply Chain Project | SAP Financials Forum
GenieHoldings.COM, Inc. | Genie Press | WorkflowGenie | ESAGenie | ERPTopSites | ABAP Tips and Tricks | SAP Solutions Database

EDIGenie | Searching Survivor