|
|
|
5 Most Popular Contributions
|
|
|
|
|
|
|
|
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:
|
|