Skip to Content
Author's profile photo Former Member

Water Puzzle Game in SAP using Dialog Program

Introduction

Water puzzle in sap. This is developed using dialog programming with simple logical expressions

Developed a material master dashboard using dialog program for our company to automate the material master creation from different units. This dashboard will collect the request from users and create the material codes using BAPI. Once the material is created an email will be send to the requester. The status of the request also can be viewed through this dashboard.

While developing this dashboard, I just had an idea to develop this game in SAP. This development has given great interest and good confidence in dialog program. Through this we can be able to learn Screen design, Screen flows, flow logic’s, logical expressions, etc.

Pre requisite

Basic knowledge in dialog programming

Steps to be followed

  1. Create a program in SE80 with type Module Pool
  2. Create a screen with type Normal
  3. Go to screen layout and design the output according to the requirement
  4. Go to flow logic and build the query
  5. Create GUI Status, Titile and Transaction code
  6. Run the transaction
  7. How to Play
  8. How it works(Code Snippet)

STEP1

Create a program in SE80 with type Module Pool

STEP2

Create a Normal Screen

STEP3

Go to screen layout and design the output according to the requirement

Create function codes for push buttons

MO85 -> Move from 8L to 5L

MO83 -> Move from 8L to 3L

MO58 ->Move from 5L to 8L

MO53 -> Move from 5L to 3L

MO38 -> Move from 3L to 8L

MO35 -> Move from 3L to 5L

In Element list you have to define the attribute ok_code to validate the user commands

 STEP4

Go to flow logic and build the query

STEP5

Create GUI Status, Title and Transaction code

STEP6

Run the transaction

STEP7

How to Play

Assume that there are three glasses on the screen like 8, 5, and 3 oz. Last two are empty, the first one contains 8 oz. of water. By pouring water from one glass to another make at least one of them contain exactly 4 oz. of water.

Pouring water from/to, use push buttons. Clear button will reset the numbers to 0 in 5L and 3L and set to 8 in 8L.

 

Output

OR

STEP8

How it works (Code Snippet)

This logic can be written in a different way too and here I have explained it in a simplest way.

*&---------------------------------------------------------------------*
*& Module Pool       ZTH_GLASS
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

PROGRAM  zth_glass.

DATA : glass8(12) TYPE c,
       glass5(12) TYPE c,
       glass3(12) TYPE c.

DATA : ok_code TYPE sy-ucomm,
       flag TYPE c.
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'STATUS'.
  IF flag IS INITIAL.
    glass8 = '8'.
  ENDIF.
  SET TITLEBAR 'WATER'.
ENDMODULE.                 " STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  flag = 'X'.
  CASE ok_code.
    WHEN 'MO85'.
      IF glass8 EQ 8.
        IF glass5 EQ 5.
        ELSEIF glass5 EQ 4.
          glass5 = glass5 + 1.
          glass8 = glass8 - 1.
        ELSEIF glass5 EQ 3.
          glass5 = glass5 + 2.
          glass8 = glass8 - 2.
        ELSEIF glass5 EQ 2.
          glass5 = glass5 + 3.
          glass8 = glass8 - 3.
        ELSEIF glass5 EQ 1.
          glass5 = glass5 + 4.
          glass8 = glass8 - 4.
        ELSEIF glass5 EQ 0.
          glass5 = glass5 + 5.
          glass8 = glass8 - 5.
        ENDIF.
      ELSEIF glass8 EQ 7.
        IF glass5 EQ 5.
        ELSEIF glass5 EQ 4.
          glass5 = glass5 + 1.
          glass8 = glass8 - 1.
        ELSEIF glass5 EQ 3.
          glass5 = glass5 + 2.
          glass8 = glass8 - 2.
        ELSEIF glass5 EQ 2.
          glass5 = glass5 + 3.
          glass8 = glass8 - 3.
        ELSEIF glass5 EQ 1.
          glass5 = glass5 + 4.
          glass8 = glass8 - 4.
        ELSEIF glass5 EQ 0.
          glass5 = glass5 + 5.
          glass8 = glass8 - 5.
        ENDIF.
      ELSEIF glass8 EQ 6.
        IF glass5 EQ 5.
        ELSEIF glass5 EQ 4.
          glass5 = glass5 + 1.
          glass8 = glass8 - 1.
        ELSEIF glass5 EQ 3.
          glass5 = glass5 + 2.
          glass8 = glass8 - 2.
        ELSEIF glass5 EQ 2.
          glass5 = glass5 + 3.
          glass8 = glass8 - 3.
        ELSEIF glass5 EQ 1.
          glass5 = glass5 + 4.
          glass8 = glass8 - 4.
        ELSEIF glass5 EQ 0.
          glass5 = glass5 + 5.
          glass8 = glass8 - 5.
        ENDIF.
      ELSEIF glass8 EQ 5.
        IF glass5 EQ 5.
        ELSEIF glass5 EQ 4.
          glass5 = glass5 + 1.
          glass8 = glass8 - 1.
        ELSEIF glass5 EQ 3.
          glass5 = glass5 + 2.
          glass8 = glass8 - 2.
        ELSEIF glass5 EQ 2.
          glass5 = glass5 + 3.
          glass8 = glass8 - 3.
        ELSEIF glass5 EQ 1.
          glass5 = glass5 + 4.
          glass8 = glass8 - 4.
        ELSEIF glass5 EQ 0.
          glass5 = glass5 + 5.
          glass8 = glass8 - 5.
        ENDIF.
      ELSEIF glass8 EQ 4.
        IF glass5 EQ 5.
        ELSEIF glass5 EQ 4.
          glass5 = glass5 + 1.
          glass8 = glass8 - 1.
        ELSEIF glass5 EQ 3.
          glass5 = glass5 + 2.
          glass8 = glass8 - 2.
        ELSEIF glass5 EQ 2.
          glass5 = glass5 + 3.
          glass8 = glass8 - 3.
        ELSEIF glass5 EQ 1.
          glass5 = glass5 + 4.
          glass8 = glass8 - 4.
        ENDIF.
      ELSEIF glass8 EQ 3.
        IF glass5 EQ 5.
        ELSEIF glass5 EQ 4.
          glass5 = glass5 + 1.
          glass8 = glass8 - 1.
        ELSEIF glass5 EQ 3.
          glass5 = glass5 + 2.
          glass8 = glass8 - 2.
        ELSEIF glass5 EQ 2.
          glass5 = glass5 + 3.
          glass8 = glass8 - 3.
        ENDIF.
      ELSEIF glass8 EQ 2.
        IF glass5 EQ 5.
        ELSEIF glass5 EQ 4.
          glass5 = glass5 + 1.
          glass8 = glass8 - 1.
        ELSEIF glass5 EQ 3.
          glass5 = glass5 + 2.
          glass8 = glass8 - 2.
        ENDIF.
      ELSEIF glass8 EQ 1.
        IF glass5 EQ 5.
        ELSEIF glass5 EQ 4.
          glass5 = glass5 + 1.
          glass8 = glass8 - 1.
        ENDIF.
      ENDIF.
    WHEN 'MO83'.
      IF glass8 EQ 8.
        IF glass3 EQ 3.
        ELSEIF glass3 EQ 2.
          glass3 = glass3 + 1.
          glass8 = glass8 - 1.
        ELSEIF glass3 EQ 1.
          glass3 = glass3 + 2.
          glass8 = glass8 - 2.
        ELSEIF glass3 EQ 0.
          glass3 = glass3 + 3.
          glass8 = glass8 - 3.
        ENDIF.
      ELSEIF glass8 EQ 7.
        IF glass3 EQ 3.
        ELSEIF glass3 EQ 2.
          glass3 = glass3 + 1.
          glass8 = glass8 - 1.
        ELSEIF glass3 EQ 1.
          glass3 = glass3 + 2.
          glass8 = glass8 - 2.
        ELSEIF glass3 EQ 0.
          glass3 = glass3 + 3.
          glass8 = glass8 - 3.
        ENDIF.
      ELSEIF glass8 EQ 6.
        IF glass3 EQ 3.
        ELSEIF glass3 EQ 2.
          glass3 = glass3 + 1.
          glass8 = glass8 - 1.
        ELSEIF glass3 EQ 1.
          glass3 = glass3 + 2.
          glass8 = glass8 - 2.
        ELSEIF glass3 EQ 0.
          glass3 = glass3 + 3.
          glass8 = glass8 - 3.
        ENDIF.
      ELSEIF glass8 EQ 5.
        IF glass3 EQ 3.
        ELSEIF glass3 EQ 2.
          glass3 = glass3 + 1.
          glass8 = glass8 - 1.
        ELSEIF glass3 EQ 1.
          glass3 = glass3 + 2.
          glass8 = glass8 - 2.
        ELSEIF glass3 EQ 0.
          glass3 = glass3 + 3.
          glass8 = glass8 - 3.
        ENDIF.
      ELSEIF glass8 EQ 4.
        IF glass3 EQ 3.
        ELSEIF glass3 EQ 2.
          glass3 = glass3 + 1.
          glass8 = glass8 - 1.
        ELSEIF glass3 EQ 1.
          glass3 = glass3 + 2.
          glass8 = glass8 - 2.
        ELSEIF glass3 EQ 0.
          glass3 = glass3 + 3.
          glass8 = glass8 - 3.
        ENDIF.
      ELSEIF glass8 EQ 3.
        IF glass3 EQ 3.
        ELSEIF glass3 EQ 2.
          glass3 = glass3 + 1.
          glass8 = glass8 - 1.
        ELSEIF glass3 EQ 1.
          glass3 = glass3 + 2.
          glass8 = glass8 - 2.
        ELSEIF glass3 EQ 0.
          glass3 = glass3 + 3.
          glass8 = glass8 - 3.
        ENDIF.
      ELSEIF glass8 EQ 2.
        IF glass3 EQ 3.
        ELSEIF glass3 EQ 2.
          glass3 = glass3 + 1.
          glass8 = glass8 - 1.
        ENDIF.
      ELSEIF glass8 EQ 1.
        IF glass3 EQ 3.
        ELSEIF glass3 EQ 2.
          glass3 = glass3 + 1.
          glass8 = glass8 - 1.
        ENDIF.
      ENDIF.
    WHEN 'MO53'.
      IF glass5 EQ 5.
        IF glass3 GE 3.
        ELSEIF glass3 EQ 2.
          glass3 = glass3 + 1.
          glass5 = glass5 - 1.
        ELSEIF glass3 EQ 1.
          glass3 = glass3 + 2.
          glass5 = glass5 - 2.
        ELSEIF glass3 EQ 0.
          glass3 = glass3 + 3.
          glass5 = glass5 - 3.
        ENDIF.
      ELSEIF glass5 EQ 4.
        IF glass3 GE 3.
        ELSEIF glass3 EQ 2.
          glass3 = glass3 + 1.
          glass5 = glass5 - 1.
        ELSEIF glass3 EQ 1.
          glass3 = glass3 + 2.
          glass5 = glass5 - 2.
        ENDIF.
      ELSEIF glass5 EQ 3.
        IF glass3 GE 3.
        ELSEIF glass3 EQ 2.
          glass3 = glass3 + 1.
          glass5 = glass5 - 1.
        ELSEIF glass3 EQ 1.
          glass3 = glass3 + 2.
          glass5 = glass5 - 2.
        ENDIF.
      ELSEIF glass5 EQ 2.
      ELSEIF glass5 EQ 1.
      ENDIF.
    WHEN 'MO58'.
      IF glass5 EQ 5.
        IF glass8 EQ 8.
        ELSEIF glass8 EQ 7.
          glass8 = glass8 + 1.
          glass5 = glass5 - 1.
        ELSEIF glass8 EQ 6.
          glass8 = glass8 + 2.
          glass5 = glass5 - 2.
        ELSEIF glass8 EQ 5.
          glass8 = glass8 + 3.
          glass5 = glass5 - 3.
        ELSEIF glass8 EQ 4.
          glass8 = glass8 + 4.
          glass5 = glass5 - 4.
        ELSEIF glass8 EQ 3.
          glass8 = glass8 + 5.
          glass5 = glass5 - 5.
        ELSEIF glass8 EQ 2.
          glass8 = glass8 + 5.
          glass5 = glass5 - 5.
        ELSEIF glass8 EQ 1.
          glass8 = glass8 + 5.
          glass5 = glass5 - 5.
        ELSEIF glass8 EQ 0.
          glass8 = glass8 + 5.
          glass5 = glass5 - 5.
        ENDIF.
      ELSEIF glass5 EQ 4.
        IF glass8 EQ 8.
        ELSEIF glass8 EQ 7.
          glass8 = glass8 + 1.
          glass5 = glass5 - 1.
        ELSEIF glass8 EQ 6.
          glass8 = glass8 + 2.
          glass5 = glass5 - 2.
        ELSEIF glass8 EQ 5.
          glass8 = glass8 + 3.
          glass5 = glass5 - 3.
        ELSEIF glass8 EQ 4.
          glass8 = glass8 + 4.
          glass5 = glass5 - 4.
        ELSEIF glass8 EQ 3.
          glass8 = glass8 + 4.
          glass5 = glass5 - 4.
        ELSEIF glass8 EQ 2.
          glass8 = glass8 + 4.
          glass5 = glass5 - 4.
        ELSEIF glass8 EQ 1.
          glass8 = glass8 + 4.
          glass5 = glass5 - 4.
        ELSEIF glass8 EQ 0.
          glass8 = glass8 + 4.
          glass5 = glass5 - 4.
        ENDIF.
      ELSEIF glass5 EQ 3.
        IF glass8 EQ 8.
        ELSEIF glass8 EQ 7.
          glass8 = glass8 + 1.
          glass5 = glass5 - 1.
        ELSEIF glass8 EQ 6.
          glass8 = glass8 + 2.
          glass5 = glass5 - 2.
        ELSEIF glass8 EQ 5.
          glass8 = glass8 + 3.
          glass5 = glass5 - 3.
        ELSEIF glass8 EQ 4.
          glass8 = glass8 + 3.
          glass5 = glass5 - 3.
        ELSEIF glass8 EQ 3.
          glass8 = glass8 + 3.
          glass5 = glass5 - 3.
        ELSEIF glass8 EQ 2.
          glass8 = glass8 + 3.
          glass5 = glass5 - 3.
        ELSEIF glass8 EQ 1.
          glass8 = glass8 + 3.
          glass5 = glass5 - 3.
        ELSEIF glass8 EQ 0.
          glass8 = glass8 + 3.
          glass5 = glass5 - 3.
        ENDIF.
      ELSEIF glass5 EQ 2.
        IF glass8 EQ 8.
        ELSEIF glass8 EQ 7.
          glass8 = glass8 + 1.
          glass5 = glass5 - 1.
        ELSEIF glass8 EQ 6.
          glass8 = glass8 + 2.
          glass5 = glass5 - 2.
        ELSEIF glass8 EQ 5.
          glass8 = glass8 + 2.
          glass5 = glass5 - 2.
        ELSEIF glass8 EQ 4.
          glass8 = glass8 + 2.
          glass5 = glass5 - 2.
        ELSEIF glass8 EQ 3.
          glass8 = glass8 + 2.
          glass5 = glass5 - 2.
        ELSEIF glass8 EQ 2.
          glass8 = glass8 + 2.
          glass5 = glass5 - 2.
        ELSEIF glass8 EQ 1.
          glass8 = glass8 + 2.
          glass5 = glass5 - 2.
        ELSEIF glass8 EQ 0.
          glass8 = glass8 + 2.
          glass5 = glass5 - 2.
        ENDIF.
      ELSEIF glass5 EQ 1.
        IF glass8 EQ 8.
        ELSEIF glass8 EQ 7.
          glass8 = glass8 + 1.
          glass5 = glass5 - 1.
        ELSEIF glass8 EQ 6.
          glass8 = glass8 + 1.
          glass5 = glass5 - 1.
        ELSEIF glass8 EQ 5.
          glass8 = glass8 + 1.
          glass5 = glass5 - 1.
        ELSEIF glass8 EQ 4.
          glass8 = glass8 + 1.
          glass5 = glass5 - 1.
        ELSEIF glass8 EQ 3.
          glass8 = glass8 + 1.
          glass5 = glass5 - 1.
        ELSEIF glass8 EQ 2.
          glass8 = glass8 + 1.
          glass5 = glass5 - 1.
        ELSEIF glass8 EQ 1.
          glass8 = glass8 + 1.
          glass5 = glass5 - 1.
        ELSEIF glass8 EQ 0.
          glass8 = glass8 + 1.
          glass5 = glass5 - 1.
        ENDIF.
      ENDIF.
    WHEN 'MO35'.
      IF glass3 EQ 3.
        IF glass5 EQ 5.
        ELSEIF glass5 EQ 4.
          glass5 = glass5 + 1.
          glass3 = glass3 - 1.
        ELSEIF glass5 EQ 3.
          glass5 = glass5 + 2.
          glass3 = glass3 - 2.
        ELSEIF glass5 EQ 2.
          glass5 = glass5 + 3.
          glass3 = glass3 - 3.
        ELSEIF glass5 EQ 1.
          glass5 = glass5 + 3.
          glass3 = glass3 - 3.
        ELSEIF glass5 EQ 0.
          glass5 = glass5 + 3.
          glass3 = glass3 - 3.
        ENDIF.
      ELSEIF glass3 EQ 2.
        IF glass5 EQ 5.
        ELSEIF glass5 EQ 4.
          glass5 = glass5 + 1.
          glass3 = glass3 - 1.
        ELSEIF glass5 EQ 3.
          glass5 = glass5 + 2.
          glass3 = glass3 - 2.
        ELSEIF glass5 EQ 2.
          glass5 = glass5 + 2.
          glass3 = glass3 - 2.
        ELSEIF glass5 EQ 1.
          glass5 = glass5 + 2.
          glass3 = glass3 - 2.
        ELSEIF glass5 EQ 0.
          glass5 = glass5 + 2.
          glass3 = glass3 - 2.
        ENDIF.
      ELSEIF glass3 EQ 1.
        IF glass5 EQ 5.
        ELSEIF glass5 EQ 4.
          glass5 = glass5 + 1.
          glass3 = glass3 - 1.
        ELSEIF glass5 EQ 3.
          glass5 = glass5 + 1.
          glass3 = glass3 - 1.
        ELSEIF glass5 EQ 2.
          glass5 = glass5 + 1.
          glass3 = glass3 - 1.
        ELSEIF glass5 EQ 1.
          glass5 = glass5 + 1.
          glass3 = glass3 - 1.
        ELSEIF glass5 EQ 0.
          glass5 = glass5 + 1.
          glass3 = glass3 - 1.
        ENDIF.
      ENDIF.
    WHEN 'MO38'.
      IF glass3 EQ 3.
        IF glass8 EQ 8.
        ELSEIF glass8 EQ 7.
          glass8 = glass8 + 1.
          glass3 = glass3 - 1.
        ELSEIF glass8 EQ 6.
          glass8 = glass8 + 2.
          glass3 = glass3 - 2.
        ELSEIF glass8 EQ 5.
          glass8 = glass8 + 3.
          glass3 = glass3 - 3.
        ELSEIF glass8 EQ 4.
          glass8 = glass8 + 3.
          glass3 = glass3 - 3.
        ELSEIF glass8 EQ 3.
          glass8 = glass8 + 3.
          glass3 = glass3 - 3.
        ELSEIF glass8 EQ 2.
          glass8 = glass8 + 3.
          glass3 = glass3 - 3.
        ELSEIF glass8 EQ 1.
          glass8 = glass8 + 3.
          glass3 = glass3 - 3.
        ELSEIF glass8 EQ 0.
          glass8 = glass8 + 3.
          glass3 = glass3 - 3.
        ENDIF.
      ELSEIF glass3 EQ 2.
        IF glass8 EQ 8.
        ELSEIF glass8 EQ 7.
          glass8 = glass8 + 1.
          glass3 = glass3 - 1.
        ELSEIF glass8 EQ 6.
          glass8 = glass8 + 2.
          glass3 = glass3 - 2.
        ELSEIF glass8 EQ 5.
          glass8 = glass8 + 2.
          glass3 = glass3 - 2.
        ELSEIF glass8 EQ 4.
          glass8 = glass8 + 2.
          glass3 = glass3 - 2.
        ELSEIF glass8 EQ 3.
          glass8 = glass8 + 2.
          glass3 = glass3 - 2.
        ELSEIF glass8 EQ 2.
          glass8 = glass8 + 2.
          glass3 = glass3 - 2.
        ELSEIF glass8 EQ 1.
          glass8 = glass8 + 2.
          glass3 = glass3 - 2.
        ELSEIF glass8 EQ 0.
          glass8 = glass8 + 2.
          glass3 = glass3 - 2.
        ENDIF.
      ELSEIF glass3 EQ 1.
        IF glass8 EQ 8.
        ELSEIF glass8 EQ 7.
          glass8 = glass8 + 1.
          glass3 = glass3 - 1.
        ELSEIF glass8 EQ 6.
          glass8 = glass8 + 1.
          glass3 = glass3 - 1.
        ELSEIF glass8 EQ 5.
          glass8 = glass8 + 1.
          glass3 = glass3 - 1.
        ELSEIF glass8 EQ 4.
          glass8 = glass8 + 1.
          glass3 = glass3 - 1.
        ELSEIF glass8 EQ 3.
          glass8 = glass8 + 1.
          glass3 = glass3 - 1.
        ELSEIF glass8 EQ 2.
          glass8 = glass8 + 1.
          glass3 = glass3 - 1.
        ELSEIF glass8 EQ 1.
          glass8 = glass8 + 1.
          glass3 = glass3 - 1.
        ELSEIF glass8 EQ 0.
          glass8 = glass8 + 1.
          glass3 = glass3 - 1.
        ENDIF.
      ENDIF.
    WHEN 'MO35'.
      IF glass3 EQ 3.
        IF glass5 EQ 5.
        ELSEIF glass5 EQ 4.
          glass5 = glass5 + 1.
          glass3 = glass3 - 1.
        ELSEIF glass5 EQ 3.
          glass5 = glass5 + 2.
          glass3 = glass3 - 2.
        ELSEIF glass5 EQ 2.
          glass5 = glass5 + 3.
          glass3 = glass3 - 3.
        ELSEIF glass5 EQ 1.
          glass5 = glass5 + 3.
          glass3 = glass3 - 3.
        ELSEIF glass5 EQ 0.
          glass5 = glass5 + 3.
          glass3 = glass3 - 3.
        ENDIF.
      ELSEIF glass3 EQ 2.
        IF glass5 EQ 5.
        ELSEIF glass5 EQ 4.
          glass5 = glass5 + 1.
          glass3 = glass3 - 1.
        ELSEIF glass5 EQ 3.
          glass5 = glass5 + 2.
          glass3 = glass3 - 2.
        ELSEIF glass5 EQ 2.
          glass5 = glass5 + 2.
          glass3 = glass3 - 2.
        ELSEIF glass5 EQ 1.
          glass5 = glass5 + 2.
          glass3 = glass3 - 2.
        ELSEIF glass5 EQ 0.
          glass5 = glass5 + 2.
          glass3 = glass3 - 2.
        ENDIF.
      ELSEIF glass3 EQ 1.
        IF glass5 EQ 5.
        ELSEIF glass5 EQ 4.
          glass5 = glass5 + 1.
          glass3 = glass3 - 1.
        ELSEIF glass5 EQ 3.
          glass5 = glass5 + 1.
          glass3 = glass3 - 1.
        ELSEIF glass5 EQ 2.
          glass5 = glass5 + 1.
          glass3 = glass3 - 1.
        ELSEIF glass5 EQ 1.
          glass5 = glass5 + 1.
          glass3 = glass3 - 1.
        ELSEIF glass5 EQ 0.
          glass5 = glass5 + 1.
          glass3 = glass3 - 1.
        ENDIF.
      ENDIF.
    WHEN 'CLER'.
      glass5 = 0.
      glass3 = 0.
      glass8 = 8.
    WHEN 'BACK'.
      SET SCREEN 0.
      LEAVE TO SCREEN 0.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_0100  INPUT

 

 

 

 

 

 

 

 

 

 

 

Assigned Tags

      5 Comments
      You must be Logged on to comment or reply to a post.
      Author's profile photo Florian Henninger
      Florian Henninger

      Charming blog, nice to see such a way to introduce people to dialog programming. The PAI-Module is not the best place to put such a coding. Would suggest that there should be space to improve the code. But that isn't the main-goal of the program so pretty who cares:-)

      Nice one, keep up blogging..

      ~Florian

       

      Author's profile photo Former Member
      Former Member
      Blog Post Author

      Thanks Florian

      Author's profile photo Enno Wulff
      Enno Wulff

      Phew... There's a lot of glasses... 😉

      Although I understand that the game is mainly for dialog programming practice, you should try to find a better way to fill and flush the glasses. E. g. Internal tables where each line is one glass.

      My first thought was that - when solved in a dynamic programmed way - you could easily define different water glass riddles. But on the web I didn't find any similar tasks, so this riddle might best work wirh 3, 5, and 8 litres/ gallons.

      Games are perfect for practising and learning, because it makes fun to test the "application"... 🙂

      Author's profile photo Jacques Nomssi Nzali
      Jacques Nomssi Nzali

      nice documentation of a dialog program, but I won't try it until published via abapGit e.g. on github. 

      But you had your fun with dialog programming, I want to rewrite the logic. As Enno said...

      Phew… There’s a lot of glasses…

      So my approach:

      • a glass entity has two attributes: size (volume) and level (content)
      • in an OO model, would need a message pour( ) as in glass->pour( other_glass ) 
      • in a functional model, a pour( glassX, glassY ) function will be enough.

      The quantity to be moved from glass1 to glass2 is the minimum of 

      • the maximum volume that will fit in glass2 (= size of glass2 minus current content of glass2)
      • the maximum volume we can get from glass1 (= current content of glass1)

      This can be expressed in ABAP macros like this

      DATA: glass8 TYPE i VALUE 8,
            glass5 TYPE i VALUE 0,
            glass3 TYPE i VALUE 0.
      DATA qty TYPE i.   " helper variable
      
      DEFINE pour.
        qty = nmin( val1 = &2 - glass&2 val2 = glass&1 ).
        glass&1 = glass&1 - qty.
        glass&2 = glass&2 + qty.
      END-OF-DEFINITION.
      
      DEFINE print.
        WRITE:/ glass8, glass5, glass3.
      END-OF-DEFINITION.
      
      START-OF-SELECTION.
        print.          " 8 0 0
        pour 8 5.
        print.          " 3 5 0
        pour 5 3.
        print.          " 3 2 3

      I did not create (ABAP unit) tests to verify your logic and mine return the same values.

      Have fun..

      JNN

       

      Author's profile photo Patricia Wilkins
      Patricia Wilkins

      Today is a very good day and therefore I want to recommend to all fans of video games a cool site https://askboosters.com/destiny-2/anarchy/ which is very popular, as it is engaged in increasing ratings in video games.