Foro -Documentación -Código fuente -Contacto -Empleo

Buscar

Traducir

Amazon

ZAHORCADO PDF Imprimir E-mail
Usar puntuación: / 1
MaloBueno 
Código fuente - Juegos
Martes, 08 de Julio de 2003 21:41
El juego del ahorcado
*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




Comentarios
Buscar
¡Sólo los usuarios registrados pueden escribir comentarios!

3.26 Copyright (C) 2008 Compojoom.com / Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."

 
home search