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

Buscar

Traducir

Amazon

ZNIGMINE PDF Imprimir E-mail
Usar puntuación: / 0
MaloBueno 
Código fuente - Juegos
Martes, 08 de Julio de 2003 21:44
Otro buscaminas REPORT YNIGMINE NO STANDARD PAGE HEADING.

************************************************************************
* Installationsanweisungen :
*
* Crea el status 'LIST1' e incluye los siguientes botones:
*
* Apriete botón BOMB --> Bomba
* Comprobar bomba FERT --> Marcar
*
* Crea el status PICK en tecla F2
*
* Crea los siguientes textos..
*
* Text-001 --> Localiza las bombas
* Text-002 --> B U S C A M I N A S
*
************************************************************************


***************************** interne Tabellen *************************
DATA : BEGIN OF ITAB OCCURS 20,
         FELD01    TYPE C,
         FELD02    TYPE C,
         FELD03    TYPE C,
         FELD04    TYPE C,
         FELD05    TYPE C,
         FELD06    TYPE C,
         FELD07    TYPE C,
         FELD08    TYPE C,
         FELD09    TYPE C,
         FELD10    TYPE C,
         FELD11    TYPE C,
         FELD12    TYPE C,
         FELD13    TYPE C,
         FELD14    TYPE C,
         FELD15    TYPE C,
         FELD16    TYPE C,
         FELD17    TYPE C,
         FELD18    TYPE C,
         FELD19    TYPE C,
         FELD20    TYPE C,
      END OF ITAB.

DATA : BRETT   LIKE  ITAB OCCURS 10 WITH HEADER LINE.
DATA : ITAB2   LIKE  ITAB OCCURS 10 WITH HEADER LINE.

***************************** Datenfelder ******************************
DATA : X_WERT         LIKE DATATYPE-INTEGER2,
       Y_WERT         LIKE DATATYPE-INTEGER2,
       H_TREFFER      TYPE I,
       SPIEL_ANFANG   LIKE SY-UZEIT,
       H_ANTWORT      TYPE N,
       H_BOMBEN       TYPE I,
       H_AUSGEW_BOMB  TYPE I,
       HLP_FELD(15)   TYPE C,
       FELD(2)        TYPE C,
       CURFIELD(20)   TYPE C,
       CURLINE(20)    TYPE C,
       INDEX          LIKE SY-INDEX,
       TABIX          LIKE SY-TABIX,
       G_TABIX        LIKE SY-TABIX,
       G_G_TABIX      LIKE SY-TABIX,
       G_INDEX        LIKE SY-INDEX.

****************************** Parameter *******************************
SELECTION-SCREEN BEGIN OF BLOCK INIT WITH FRAME.
SELECTION-SCREEN  COMMENT 27(50) TEXT-002.
SELECTION-SCREEN : SKIP 2.
SELECTION-SCREEN : BEGIN OF LINE.
SELECTION-SCREEN  COMMENT 26(20) TEXT-001.
SELECTION-SCREEN : POSITION 48.
  PARAMETERS : ANZAHL(2)  TYPE C DEFAULT '25'.
SELECTION-SCREEN : END OF LINE.
SELECTION-SCREEN END OF BLOCK INIT.

**************************** Field-Symbols *****************************
FIELD-SYMBOLS : <f>,
                <g>.

************************** at selection screen *************************
AT SELECTION-SCREEN.

  IF ANZAHL LT '10' OR
     ANZAHL GT '50'.
    MESSAGE E398(00) WITH 'Selecciona entre 10 y 50!'.
  ENDIF.

  SPIEL_ANFANG = SY-UZEIT.

************************ start-of-selection ****************************
START-OF-SELECTION.

  SET PF-STATUS 'LIST1'.

  PERFORM INIT.
  PERFORM BELEGUNG.
  PERFORM AUSGABE.

END-OF-SELECTION.

************************* end-of-selection *****************************

*&---------------------------------------------------------------------*
*& Form BELEGUNG
*&---------------------------------------------------------------------*
FORM BELEGUNG.

  H_AUSGEW_BOMB  = ANZAHL.

  DO.

    IF SY-INDEX  > ANZAHL.
      EXIT.
    ENDIF.

    CALL FUNCTION 'RANDOM_INITIALIZE'
         EXPORTING
              CHARSET = '0123456789'
         EXCEPTIONS
              OTHERS  = 1.

    CALL FUNCTION 'RANDOM_I2'
         EXPORTING
              RND_MIN   = 1
              RND_MAX   = 20
         IMPORTING
              RND_VALUE = X_WERT
         EXCEPTIONS
              OTHERS    = 1.

    call function 'RANDOM_INITIALIZE'
        EXPORTING
           CHARSET = '01234567890'
        exceptions
           others  = 1.

    CALL FUNCTION 'RANDOM_I2'
         EXPORTING
              RND_MIN   = 1
              RND_MAX   = 15
         IMPORTING
              RND_VALUE = Y_WERT
         EXCEPTIONS
              OTHERS    = 1.

    READ TABLE ITAB INDEX Y_WERT.
    FELD = X_WERT.
    UNPACK FELD TO FELD.
    CONCATENATE 'ITAB-FELD' FELD INTO HLP_FELD.
    ASSIGN (HLP_FELD) TO <f>.
    IF <f> IS INITIAL.
      <f> = 'B'.
      MODIFY ITAB INDEX Y_WERT.
    ELSE.
      ANZAHL = ANZAHL + 1.
    ENDIF.

  ENDDO.

  LOOP AT ITAB2.

    G_TABIX = SY-TABIX.

    DO 20 TIMES.

      READ TABLE ITAB INDEX G_TABIX.

      FELD = SY-INDEX.
      UNPACK FELD TO FELD.
      CONCATENATE 'ITAB-FELD' FELD INTO HLP_FELD.
      ASSIGN (HLP_FELD) TO <f>.
      CONCATENATE 'ITAB2-FELD' FELD INTO HLP_FELD.
      ASSIGN (HLP_FELD) TO <g>.

      G_INDEX = SY-INDEX.

      IF <f> = 'B'.
        <g> = <f>.
      ELSE.
        PERFORM ZAHL_BESTIMMEN.
        IF <g> IS INITIAL.
          <g> = '0'.
        ENDIF.
      ENDIF.

    ENDDO.

    MODIFY ITAB2.

  ENDLOOP.

ENDFORM.                               " BELEGUNG

*&---------------------------------------------------------------------*
*& Form AUSGABE
*&---------------------------------------------------------------------*
FORM AUSGABE.

  FORMAT COLOR OFF INVERSE OFF INTENSIFIED OFF.

  ULINE AT 0(81).

  LOOP AT BRETT.

    DO 20 TIMES.
      FELD = SY-INDEX.
      UNPACK FELD TO FELD.
      CONCATENATE 'BRETT-FELD' FELD INTO HLP_FELD.
      ASSIGN (HLP_FELD) TO <f>.

      IF  <f> = '®'.
        ADD   1   TO H_TREFFER.
      ELSEIF <f>  = 'B'.
        CONCATENATE 'ITAB2-FELD' FELD INTO HLP_FELD.
        ASSIGN (HLP_FELD) TO <g>.
        READ TABLE ITAB2 INDEX SY-TABIX.
        IF <g> = 'B'.
          ADD   1   TO H_TREFFER.
        ENDIF.
      ENDIF.

      CASE <f>.
        WHEN  '0'
          OR  '1'
          OR  '2'
          OR  '3'
          OR  '4'
          OR  '5'
          OR  '6'
          OR  '7'
          OR  '8'
          OR  '9'.
          FORMAT INVERSE OFF INTENSIFIED.
        WHEN  'B'.
          FORMAT COLOR 6 INVERSE.
      ENDCASE.

      IF SY-INDEX = 1.
        WRITE:/ SY-VLINE.
      ELSE.
        WRITE:  SY-VLINE.
      ENDIF.

      WRITE:   <f>   NO-ZERO.

      FORMAT COLOR OFF INVERSE OFF INTENSIFIED OFF.

    ENDDO.

    WRITE:  SY-VLINE.

    ULINE AT 0(81).
  ENDLOOP.

  SKIP 1.

  WRITE: /10  SY-ULINE(64).

  WRITE: /10  SY-VLINE,
              'Bombar marcadas:',
              H_BOMBEN,
              'sobre',
              H_AUSGEW_BOMB,
              'bombas',
              SY-VLINE.

  WRITE: /10  SY-ULINE(64).

  IF SY-UCOMM = 'FERT'.
     H_TREFFER  = 99.
  ENDIF.

  IF H_TREFFER = H_AUSGEW_BOMB.
    SPIEL_ANFANG = SY-UZEIT - SPIEL_ANFANG.

    MESSAGE I398(00) WITH 'Viva, viva. Eres mi heroe.'
                          'Has acabado el juego en s&oacute;o'
                          SPIEL_ANFANG
                          'intentos!'.
    PERFORM SPIEL_ENDE.
  ENDIF.

  CLEAR:   H_TREFFER.

ENDFORM.                               " AUSGABE
*&---------------------------------------------------------------------*
*& Form INIT
*&---------------------------------------------------------------------*
FORM INIT.

  DO 15 TIMES.
    CLEAR ITAB.
    APPEND ITAB.
  ENDDO.

  DO 15 TIMES.
    CLEAR ITAB2.
    APPEND ITAB2.
  ENDDO.

  DO 15 TIMES.
    BRETT = '®®®®®®®®®®®®®®®®®®®®'.
    APPEND BRETT.
  ENDDO.

ENDFORM.                               " INIT

************************************************************************
AT LINE-SELECTION.

  GET CURSOR FIELD CURFIELD
             LINE  CURLINE.
  TABIX = CURLINE / 2.

  CASE SY-UCOMM.
    WHEN 'PICK'.
      PERFORM FELD_PRUEF.
  ENDCASE.

  SY-LSIND = 0.
  PERFORM AUSGABE.

AT USER-COMMAND.

  GET CURSOR FIELD CURFIELD
             LINE  CURLINE.
  TABIX = CURLINE / 2.

  CASE SY-UCOMM.
    WHEN 'BOMB'.
      IF CURFIELD CS 'BRETT'.
        PERFORM MARK_BOMBE.
      ENDIF.
    WHEN 'FERT'.
        BRETT[] = ITAB2[].
  ENDCASE.

  SY-LSIND = 0.
  PERFORM AUSGABE.

*&---------------------------------------------------------------------*
*& Form ZAHL_BESTIMMEN
*&---------------------------------------------------------------------*
FORM ZAHL_BESTIMMEN.

* drüber
  TABIX = G_TABIX - 1.
  READ TABLE ITAB INDEX TABIX.
  IF SY-SUBRC IS INITIAL.
    PERFORM FELD_CHECK USING -1.
    PERFORM FELD_CHECK USING SPACE.
    PERFORM FELD_CHECK USING 1.
  ENDIF.

* daneben
  READ TABLE ITAB INDEX G_TABIX.
  IF SY-SUBRC IS INITIAL.
    PERFORM FELD_CHECK USING -1.
    PERFORM FELD_CHECK USING 1.
  ENDIF.

* drunter
  TABIX = G_TABIX + 1.
  READ TABLE ITAB INDEX TABIX.
  IF SY-SUBRC IS INITIAL.
    PERFORM FELD_CHECK USING -1.
    PERFORM FELD_CHECK USING SPACE.
    PERFORM FELD_CHECK USING 1.
  ENDIF.

ENDFORM.                               " ZAHL_BESTIMMEN

*&---------------------------------------------------------------------*
*& Form FELD_CHECK
*&---------------------------------------------------------------------*
FORM FELD_CHECK USING POS.

  FELD = G_INDEX + POS.
  UNPACK FELD TO FELD.
  CONCATENATE 'ITAB-FELD' FELD INTO HLP_FELD.
  ASSIGN (HLP_FELD) TO <f>.
  IF <f> EQ 'B' AND
     SY-SUBRC IS INITIAL.
    ADD 1 TO <g>.
  ENDIF.

ENDFORM.                               " FELD_CHECK
*&---------------------------------------------------------------------*
*& Form FELD_PRUEF
*&---------------------------------------------------------------------*
FORM FELD_PRUEF.


  READ TABLE ITAB2 INDEX TABIX.
  READ TABLE BRETT INDEX TABIX.

  IF SY-SUBRC IS INITIAL.
    CONCATENATE 'ITAB2-FELD' CURFIELD+10(2) INTO HLP_FELD.
    ASSIGN (HLP_FELD) TO <f>.
    IF SY-SUBRC IS INITIAL.
      CASE <f>.
        WHEN 'B'.
          CONCATENATE 'brett-FELD' CURFIELD+10(2) INTO HLP_FELD.
          ASSIGN (HLP_FELD) TO <g>.
          IF <g> = 'B'.
          ELSE.
            DO 100 TIMES.
              CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
                   EXPORTING
                        PERCENTAGE = SY-INDEX
                        TEXT       = ' '
                   EXCEPTIONS
                        OTHERS     = 1.
            ENDDO.

* call function 'G_RW_WS_EXECUTE'
* exporting
* commandline = space
* program = 'C:\WINNT\SYSTEM32\MSPAINT.EXE T:\SAP_EXT\BAUER\BOMB.BMP'
* out_file = space
* exceptions
* others = 1.

            MESSAGE I398(00) WITH 'BOOOM!'.
            PERFORM SPIEL_ENDE.
          ENDIF.
        WHEN '0'.
          ASSIGN (CURFIELD) TO <g>.
* <g> = <f>.
          <g> = ' '.
          MODIFY BRETT INDEX TABIX.
          <f> = 'X'.
          MODIFY ITAB2 INDEX TABIX.
          INDEX = CURFIELD+10(2).
          PERFORM BENACHBARTE_NULLEN.
        WHEN OTHERS.
          IF <f> NE 'X'.
            ASSIGN (CURFIELD) TO <g>.
            <g> = <f>.
            MODIFY BRETT INDEX TABIX.
          ENDIF.
      ENDCASE.
    ENDIF.
  ENDIF.

ENDFORM.                               " FELD_PRUEF
*&---------------------------------------------------------------------*
*& Form BENACHBARTE_NULLEN
*&---------------------------------------------------------------------*
FORM BENACHBARTE_NULLEN.


  PERFORM FELD_0 USING TABIX
                       INDEX.

ENDFORM.                               " BENACHBARTE_NULLEN
*&---------------------------------------------------------------------*
*& Form FELD_0
*&---------------------------------------------------------------------*
FORM FELD_0 USING  P_TABIX
                   P_INDEX.

  DATA : TAB   LIKE SY-TABIX,
         IND   LIKE SY-INDEX.

  TAB = P_TABIX - 1.
  IND = P_INDEX - 1.
  READ TABLE BRETT INDEX TAB.
  IF SY-SUBRC IS INITIAL.
    FELD = IND.
    UNPACK FELD TO FELD.
    CONCATENATE 'BRETT-FELD' FELD INTO HLP_FELD.
    ASSIGN (HLP_FELD) TO <g>.
    PERFORM FELD_CHECK_0 USING TAB
                               IND.
  ENDIF.

  IND = P_INDEX.
  read table brett index tab.
  IF SY-SUBRC IS INITIAL.
    FELD = IND.
    UNPACK FELD TO FELD.
    CONCATENATE 'BRETT-FELD' FELD INTO HLP_FELD.
    ASSIGN (HLP_FELD) TO <g>.
    PERFORM FELD_CHECK_0 USING TAB
                               IND.
  ENDIF.
  IND = P_INDEX + 1.
  read table brett index tab.
  IF SY-SUBRC IS INITIAL.
    FELD = IND.
    UNPACK FELD TO FELD.
    CONCATENATE 'BRETT-FELD' FELD INTO HLP_FELD.
    ASSIGN (HLP_FELD) TO <g>.
    PERFORM FELD_CHECK_0 USING TAB
                               IND.
  ENDIF.

  TAB = P_TABIX.
  IND = P_INDEX - 1.
  read table brett index tab.
  IF SY-SUBRC IS INITIAL.
    FELD = IND.
    UNPACK FELD TO FELD.
    CONCATENATE 'BRETT-FELD' FELD INTO HLP_FELD.
    ASSIGN (HLP_FELD) TO <g>.
    PERFORM FELD_CHECK_0 USING TAB
                               IND.
  ENDIF.

  IND = P_INDEX + 1.
  read table brett index tab.
  IF SY-SUBRC IS INITIAL.
    FELD = IND.
    UNPACK FELD TO FELD.
    CONCATENATE 'BRETT-FELD' FELD INTO HLP_FELD.
    ASSIGN (HLP_FELD) TO <g>.
    PERFORM FELD_CHECK_0 USING TAB
                               IND.
  ENDIF.

  TAB = P_TABIX + 1.
  IND = P_INDEX - 1.
  read table brett index tab.
  IF SY-SUBRC IS INITIAL.
    FELD = IND.
    UNPACK FELD TO FELD.
    CONCATENATE 'BRETT-FELD' FELD INTO HLP_FELD.
    ASSIGN (HLP_FELD) TO <g>.
    PERFORM FELD_CHECK_0 USING TAB
                               IND.
  ENDIF.

  IND = P_INDEX.
  read table brett index tab.
  IF SY-SUBRC IS INITIAL.
    FELD = IND.
    UNPACK FELD TO FELD.
    CONCATENATE 'BRETT-FELD' FELD INTO HLP_FELD.
    ASSIGN (HLP_FELD) TO <g>.
    PERFORM FELD_CHECK_0 USING TAB
                               IND.
  ENDIF.

  IND = P_INDEX + 1.
  read table brett index tab.
  IF SY-SUBRC IS INITIAL.
    FELD = IND.
    UNPACK FELD TO FELD.
    CONCATENATE 'BRETT-FELD' FELD INTO HLP_FELD.
    ASSIGN (HLP_FELD) TO <g>.
    PERFORM FELD_CHECK_0 USING TAB
                               IND.
  ENDIF.

ENDFORM.                               " FELD_0

*&---------------------------------------------------------------------*
*& Form FELD_CHECK_0
*&---------------------------------------------------------------------*
FORM FELD_CHECK_0 USING TAB
                        IND.

  READ TABLE ITAB2 INDEX TAB.
  FELD = IND.
  UNPACK FELD TO FELD.
  CONCATENATE 'ITAB2-FELD' FELD INTO HLP_FELD.
  ASSIGN (HLP_FELD) TO <f>.
  IF SY-SUBRC IS INITIAL.
    IF <f> EQ '0'.
      <g> = ' '.
      MODIFY BRETT INDEX TAB.
      <f> = 'X'.
      MODIFY ITAB2 INDEX TAB.
      PERFORM FELD_0 USING TAB
                           IND.
    ELSE.
      IF <f> CA '12345678'.
        <g> = <f>.
        MODIFY BRETT INDEX TAB.
      ENDIF.
    ENDIF.
  ENDIF.

ENDFORM.                               " FELD_CHECK_0
*&---------------------------------------------------------------------*
*& Form MARK_BOMBE
*&---------------------------------------------------------------------*
FORM MARK_BOMBE.

  READ TABLE BRETT INDEX TABIX.
  ASSIGN (CURFIELD) TO <g>.
  CASE <g>.
    WHEN '®'.
      <g> = 'B'.
      ADD 1 TO  H_BOMBEN.
    WHEN 'B'.
      <g> = '®'.
      SUBTRACT 1 FROM  H_BOMBEN.
    WHEN OTHERS.
  ENDCASE.
  MODIFY BRETT INDEX TABIX.

ENDFORM.                               " MARK_BOMBE
*&---------------------------------------------------------------------*
*& Form SPIEL_ENDE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SPIEL_ENDE.
  CALL FUNCTION 'POPUP_TO_CONFIRM'
       EXPORTING
            TITLEBAR              = 'La partida se ha terminado'
            TEXT_QUESTION         = '&amp;iquest;Quieres jugar otra vez?'
            TEXT_BUTTON_1         = 'Si'(003)
* ICON_BUTTON_1 = ' '
            TEXT_BUTTON_2         = 'No'(004)
* ICON_BUTTON_2 = ' '
            DISPLAY_CANCEL_BUTTON = ' '
            DEFAULT_BUTTON        = '1'
            START_COLUMN          = 25
            START_ROW             = 6
       IMPORTING
            ANSWER                = H_ANTWORT
       EXCEPTIONS
            TEXT_NOT_FOUND        = 1
            OTHERS                = 2.
  IF H_ANTWORT = 1.
    SUBMIT YNIGMINE  VIA SELECTION-SCREEN.
  ELSE.
    LEAVE PROGRAM.
  ENDIF.

ENDFORM.                               " SPIEL_ENDE
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