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

Login

Login to view more content!!!





Lost Password?
No account yet? Register

Registered Access

Poll

What area of ABAP are you interested in?
 
Hangman PDF Print E-mail
User Rating: / 0
PoorBest 
Written by Anon.   
Sunday, 21 January 2007
Create an online program and change UNIX_DICT_FILE... REPORT ZHANGMAN NO STANDARD PAGE HEADING.


* Put correct UNIX Words file on the next line.


DATA: UNIX_DICT_FILE(80) VALUE '/usr/share/lib/dict/words'.


INCLUDE .


DATA: DICT_TAB(20) OCCURS 10000 WITH HEADER LINE,


      GIVEUP(20),


      LINE(80), GUESSES OCCURS 10 WITH HEADER LINE,


                CORRECT_GUESSES OCCURS 10 WITH HEADER LINE,


                MESG(60),


      LEN TYPE I,


      NUM_WORDS TYPE I,


      NUM_TRYS TYPE I,


      NUM_FAILS TYPE I,


      NUM_BADS TYPE I,


      NUM_GOODS TYPE I.


DATA  LETTER.


DATA: RUNT TYPE I, SEC TYPE I.


DATA: BEGIN OF PIC,


      ROW LIKE SY-CUROW,


     

COL

 LIKE SY-CUCOL,


      LET,


      END OF PIC.


DATA: BEGIN OF FIG OCCURS 10,


      X(2),


      Y(2),


      L,


      END OF FIG.



 

INITIALIZATION.


  APPEND '6006|' TO FIG.


  APPEND '60070' TO FIG.


  APPEND '6008|' TO FIG.


  APPEND '5908/' TO FIG.


  APPEND '5909/' TO FIG.


  APPEND '6109\' TO FIG.


  APPEND '6108\' TO FIG.


  OPEN DATASET UNIX_DICT_FILE FOR INPUT IN TEXT MODE.


  DO.


    READ DATASET UNIX_DICT_FILE INTO LINE LENGTH LEN.


    IF SY-SUBRC = 0.


      IF LEN < 20.


        APPEND LINE TO DICT_TAB.


      ENDIF.


    ELSE.


      EXIT.


    ENDIF.


  ENDDO.


  CLOSE DATASET UNIX_DICT_FILE.


  DESCRIBE TABLE DICT_TAB LINES NUM_WORDS.


*  write: 'Number of words in dict:',num_words.



 

  PERFORM PRINT_OUT.



 

*---------------------------------------------------------------------*


*       FORM PRINT_OUT                                                *


*---------------------------------------------------------------------*


*       ........                                                      *


*---------------------------------------------------------------------*


  DATA: ABCDE LIKE SY-ABCDE.


*---------------------------------------------------------------------*


*       FORM PRINT_OUT                                                *


*---------------------------------------------------------------------*


*       ........                                                      *


*---------------------------------------------------------------------*


FORM PRINT_OUT.


  DATA: WORD_MASK LIKE DICT_TAB, INDEX TYPE I.


  ABCDE = SY-ABCDE.


  SY-LSIND = 0.


  ULINE: AT /(16), AT 18(16), AT 35(15), AT 51(13).


  FORMAT COLOR COL_KEY.


  WRITE:/ '|',ICON_ACTIVATE AS ICON NO-GAP, ' New Word ' HOTSPOT,


     '|' NO-GAP ,SPACE NO-GAP COLOR COL_BACKGROUND,


          '|', ICON_FAILURE AS ICON NO-GAP, ' Give Up! ' HOTSPOT,


     '|' NO-GAP ,SPACE NO-GAP COLOR COL_BACKGROUND,


          '|',ICON_SYSTEM_HELP AS ICON NO-GAP,' Help Me ' HOTSPOT,


     '|' NO-GAP ,SPACE NO-GAP COLOR COL_BACKGROUND,


          '|',ICON_BREAKPOINT AS ICON NO-GAP,' Exit! ' HOTSPOT,'|'.


  FORMAT RESET.


  ULINE: AT /(16), AT 18(16), AT 35(15), AT 51(13).


  WRITE:/.



 

  IF NOT DICT_TAB IS INITIAL.



 

*   print the word mask


    LEN = STRLEN( DICT_TAB ).


    DO.


      INDEX =  SY-INDEX - 1.


      LETTER = DICT_TAB+INDEX(1).


      SEARCH  CORRECT_GUESSES FOR LETTER.


      IF SY-SUBRC = 0.


        WORD_MASK+INDEX = LETTER.


      ELSE.


        WORD_MASK+INDEX = '_'.


      ENDIF.


      IF LEN = SY-INDEX .


        EXIT.


      ENDIF.


    ENDDO.



 

*   found the word


    IF WORD_MASK = DICT_TAB.


      ADD 1 TO NUM_GOODS.


      WRITE:/ 'Got it!.  Correct word is',DICT_TAB,


            /  'It took ' ,NUM_TRYS,'tries.'.


      CLEAR: NUM_TRYS, NUM_FAILS, DICT_TAB.



 

    ELSE.


      WRITE:/  'Guess the Word:' .


      DO LEN TIMES.


        INDEX = SY-INDEX - 1.


        LETTER = WORD_MASK+INDEX.


        WRITE: LETTER.


      ENDDO.



 

*     print guesses


      WRITE: /  'Guesses'.


      SORT GUESSES.


     
LOOP
 AT GUESSES.


        WRITE:  GUESSES NO-GAP.


      ENDLOOP.


      NEW-LINE.



 

*     check max failures


      IF NUM_FAILS < 7.


*     print keyboard


        ULINE AT /(55).


        DO 26 TIMES.


          LETTER = ABCDE.


          IF SY-INDEX = 14 OR SY-INDEX = 1. WRITE:/  SPACE. ENDIF.


          WRITE: (3)LETTER CENTERED HOTSPOT COLOR COL_KEY .


          SHIFT ABCDE.


        ENDDO.


        WRITE:/ MESG.


      ELSE.


        WRITE:/ 'Correct Word was',DICT_TAB.


        WRITE:/ 'Pick a new word'.


        ADD 1 TO NUM_BADS.


        CLEAR DICT_TAB.


        ENDIF.



 

        PERFORM DRAW_FIG.


      ENDIF.


    ELSEIF NOT GIVEUP IS INITIAL.


      WRITE:/ 'Correct Word was',GIVEUP.


      CLEAR GIVEUP.


    ENDIF.


    SKIP TO LINE 11.


    ULINE AT /(64).


    WRITE:/'|',


            (20) 'Words fully guessed', (7)NUM_GOODS,'| ',


            (20) 'Words not guessed',(7)NUM_BADS,'|'.


*    write:/'Letter Guesses', num_trys, 'Failed Guesses',num_fails.


    ULINE AT /(64).



 

  ENDFORM.


*---------------------------------------------------------------------*


*       FORM RANDOM                                                   *


*---------------------------------------------------------------------*


*       ........                                                      *


*---------------------------------------------------------------------*


FORM RANDOM.


  GET RUN TIME FIELD RUNT.


  GET TIME.


  SEC = SY-UZEIT MOD 60.


  RUNT = RUNT MOD 100000.


  MULTIPLY RUNT BY SEC.


  GET TIME.


  RUNT = RUNT MOD 100000.


  ADD SEC TO RUNT .


ENDFORM.



 

AT LINE-SELECTION.


  DATA: FIELD(30),VALUE(50).


  GET CURSOR FIELD FIELD VALUE VALUE.


  IF FIELD = 'ICON_ACTIVATE' OR VALUE = ' New Word'.


    PERFORM NEW_WORD.


  ELSEIF FIELD = 'ICON_FAILURE' OR VALUE = ' Give Up!'.


    PERFORM GIVE_UP.


  ELSEIF FIELD = 'ICON_SYSTEM_HELP' OR VALUE = ' Help Me'.


    PERFORM PRINT_HELP.


  ELSEIF FIELD = 'ICON_BREAKPOINT' OR VALUE = ' Exit!'.


    LEAVE PROGRAM.


  ELSEIF FIELD = 'LETTER' AND NOT VALUE IS INITIAL.


    PERFORM TRY_WORD USING VALUE+1(1).


  ENDIF.



 

*&---------------------------------------------------------------------*


*&      Form  NEW_WORD


*&---------------------------------------------------------------------*


*       text


*----------------------------------------------------------------------*


*  -->  p1        text


*  <--  p2        text


*----------------------------------------------------------------------*


FORM NEW_WORD.


  IF NOT DICT_TAB IS INITIAL.


    ADD 1 TO NUM_BADS.


  ENDIF.


  DO.


    PERFORM RANDOM.


    RUNT = RUNT MOD NUM_WORDS.


    READ TABLE DICT_TAB INDEX RUNT.


    IF NOT DICT_TAB(1) CO SY-ABCDE AND DICT_TAB NA '0123456789'.


      EXIT.


    ENDIF.


  ENDDO.


  TRANSLATE DICT_TAB TO UPPER CASE.


  CLEAR: NUM_TRYS, NUM_FAILS.


  REFRESH: GUESSES, CORRECT_GUESSES.


  PERFORM PRINT_OUT.


ENDFORM.                               " NEW_WORD



 

*&---------------------------------------------------------------------*


*&      Form  TRY_WORD


*&---------------------------------------------------------------------*


*       text


*----------------------------------------------------------------------*


*      -->P_VALUE  text                                                *


*----------------------------------------------------------------------*


FORM TRY_WORD USING   P_VALUE TYPE C.


  SY-LSIND = 0.


  SEARCH GUESSES FOR P_VALUE.


  IF SY-SUBRC = 0.


    CONCATENATE 'Letter' P_VALUE 'already guessed'


                                           INTO MESG SEPARATED BY SPACE.


  ELSE.


    APPEND P_VALUE TO GUESSES .


    IF DICT_TAB CS P_VALUE.


      CONCATENATE 'Letter' P_VALUE 'matches'


                                           INTO MESG SEPARATED BY SPACE.


      APPEND P_VALUE TO CORRECT_GUESSES .


    ELSE.


      CONCATENATE 'Letter' P_VALUE 'does not match'


                                          INTO MESG SEPARATED BY SPACE.


      ADD 1 TO NUM_FAILS.


    ENDIF.


    ADD 1 TO NUM_TRYS.


  ENDIF.


  PERFORM PRINT_OUT.


ENDFORM.                               " TRY_WORD



 

AT PF8.


  PERFORM NEW_WORD.


*&---------------------------------------------------------------------*


*&      Form  GIVE_UP


*&---------------------------------------------------------------------*


*       text


*----------------------------------------------------------------------*


*  -->  p1        text


*  <--  p2        text


*----------------------------------------------------------------------*


FORM GIVE_UP.


  ADD 1 TO NUM_BADS.


  GIVEUP = DICT_TAB.


  CLEAR DICT_TAB.


  PERFORM PRINT_OUT.


ENDFORM.                               " GIVE_UP



 

*---------------------------------------------------------------------*


*       FORM DRAW_FIG                                                 *


*---------------------------------------------------------------------*


*       ........                                                      *


*---------------------------------------------------------------------*


FORM DRAW_FIG.


*   |


*   0


*  /|\


*  / \


*


  BACK.


  SKIP 4.


  WRITE: /55 '  -------'.


  WRITE: /55 '  |'.


  WRITE: /55 '  |'.


  WRITE: /55 '  |'.


  WRITE: /55 '  |'.


  WRITE: /55 '  |'.


  WRITE: /55 '---------'.


 
LOOP
 AT FIG TO NUM_FAILS.


    BACK.


    SKIP TO LINE FIG-Y.


    WRITE: AT FIG-X FIG-L.


  ENDLOOP.


  BACK.


ENDFORM.



 

*&---------------------------------------------------------------------*


*&      Form  PRINT_HELP


*&---------------------------------------------------------------------*


*       text


*----------------------------------------------------------------------*


*  -->  p1        text


*  <--  p2        text


*----------------------------------------------------------------------*


FORM PRINT_HELP.


ULINE AT /(55).


WRITE:


/'What Is "Hangman?"',



 

/, /'"Hangman" is an old schoolkid game where the',


/'computer picks a word or a phrase, and you',


/'try to reconstruct it by picking letters.',


/'You have a certain number of chances to win.',


/'Each time you pick an incorrect letter, you ',


/'lose a chance.',/,


/'Loss of a chance is traditionally depicted by adding',


/'more body parts to a picture of a hanging man.',


/'Once the man is complete, the game is over and you lose.'.


ULINE AT /(55).


WRITE:/ 'Click Green Back Arrow or press F3 to continue...'.


ULINE AT /(55).


ENDFORM.                    " PRINT_HELP
 
< Prev   Next >

Google Search

Statistics

Contribution Activity
Utilities: 38
Tips and Tricks: 330
Sample Code: 164
Total Contributions: 545

Member Activity
Members: 6061 since 2/1/2007!
New: 0 since yesterday!
Visitors: 959691

Newest Members

Welcome our newest members:

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