Текстовый квест, проскакивает ситуацию

131
27 января 2022, 07:50

составляю текстовый квест, возник вопрос. В квесте такая иерархия:

                 1) дружиться   1)следствие
      1) мальчик 2) дать жвачку 2)следствие
                 3)забить       3)следствие
       2)девочка

      3)препод

Девочку и препода пока не делал, возникла проблема именно на мальчике. При запуске моего приложения жмем 1 (мальчик). Минуя пункты с выбором дружиться или нет, приходит к пункту следствия от дружиться. Просьба помочь разобраться.

АКТИВНОСТЬ

package com.example.samsunghomework;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    int qq = 0;
    int checkmazahaka = 0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView txt = findViewById(R.id.txt);
        txt.setText("Тебе удалось успешно сдать экзамен и вот ты пришел на свою первую пару. \n" +
                "Ты поздоровался с преподавателем и он предложил тебе присесть на место. \n" +
                "В аудитории было три свободных места, и ты начал думать: \n" +
                "① У окна, рядом с парнем, с которым, кажется можно подружиться. \n" +
                "② У стены, рядом с красивой девушкой. \n" +
                "③ На ближайщем месте к преподавателю, будет хорошо слышно материал."); //вступление
    }

    public void onClick(View view) {
        Button but1 = findViewById(R.id.bt1);
        Button but2 = findViewById(R.id.bt2);
        Button but3 = findViewById(R.id.bt3);
        TextView txt = findViewById(R.id.txt);

        if (checkmazahaka == 0) {
            switch (view.getId()) { // 1 стадия ответ на вступление
                case R.id.bt1:
                    if (checkmazahaka == 0) {
                        qq = 1;
                        checkmazahaka = 1;
                        break;
                    }
                case R.id.bt2:
                    if (checkmazahaka == 0) {
                        qq = 2;
                        checkmazahaka = 2;
                        break;
                    }
                case R.id.bt3:
                    if (checkmazahaka == 0) {
                        qq = 3;
                        checkmazahaka = 3;
                        break;
                    }
            }//1 стадия

            if (qq == 1) { //2.1
                txt.setText("Ты подошел к парню и присел на место. \n"
                        + "Кажется, ему было все равно на твое появление. \n" +
                        "Твои действия? \n" +
                        "① Развернуться к нему и предложить познакомиться. \n" +
                        "② Предложить ему жевательную резинку. \n" +
                        "③ Продолжить осматриваться по сторонам.");
            }
            if (qq == 2) {//2.2
                txt.setText("Ты подошел к девушке и присел на место. \n" +
                        "Кажется, она тобой заинтересовалась... \n" +
                        "Твои действия? \n" +
                        "① Развернуться и предложить познакомиться. \n" +
                        "② Не обращать на ее внимания, стараясь приглядеться к ней. \n" +
                        "③ Посмотреть на нее и улыбнуться.");
            }
            if (qq == 3) {//2.3
                txt.setText("Ты подошел к VIP месту на первой парте и сел перед учителем \n" +
                        "Он заметил твою тягу к знаниям но ничего не сказал \n" +
                        "Твои действия?  \n" +
                        "① Достать телефон и начать в него залипать \n" +
                        "② Преданным взглядом смотреть на преподавателя \n" +
                        "③ Обернуться назад и оглядеть аудиторию");
            /*
           //////////////////////////////РАБОТАЕТ/////////////////////////////
            */
            }
        }
        if (qq == 1) { //развернулся познакомился

            switch (view.getId()) {
                case R.id.bt1:
                    qq = 4;
                    checkmazahaka = 5;
                    break;

                case R.id.bt2:
                    qq = 5;
                    checkmazahaka = 6;
                    break;
                case R.id.bt3:
                    qq = 6;
                    checkmazahaka = 7;
                    break;

            }
            if (qq == 4) { //3.1
                txt.setText("Парень оказался не против и с удовольствием с тобой познакомился.\n" +
                        "Он предложил тебе после занятия сходить в KFC.\n" +
                        "Что скажешь?\n" +
                        "① Согласишься и будешь с нетерпением ждать конца пары \n" +
                        "② Откажешься, сославшись на неотложныые дела\n" +
                        "③ Промямлишь что - то непонятное");
            }
            if (qq == 5) {
                txt.setText("Парень не смог отказаться и с удовольствием взял твой Orbit. \n" +
                        "Он предложил тебе после занятия сходить в KFC.\n" +
                        "Что скажешь?\n" +
                        "① Согласишься и будешь с нетерпением ждать конца пары \n" +
                        "② Откажешься, сославшись на неотложныые дела\n" +
                        "③ Промямлишь что - то непонятное");
            }
            if (qq == 6) {
                txt.setText("Ты просто сидел и никого не трогал, когда парень сам подошел к тебе. \n" +
                        "Он предложил тебе после занятия сходить в KFC.\n" +
                        "Что скажешь?\n" +
                        "① Согласишься и будешь с нетерпением ждать конца пары \n" +
                        "② Откажешься, сославшись на неотложныые дела\n" +
                        "③ Промямлишь что - то непонятное");
            }
        }
        if (qq == 2) {
            switch (view.getId()) { // 1 стадия
                case R.id.bt1:
                    qq = 7;
                    checkmazahaka = 3;
                    break;
                case R.id.bt2:
                    qq = 8;
                    checkmazahaka = 3;
                    break;
                case R.id.bt3:
                    qq = 9;
                    checkmazahaka = 3;
                    break;
            /// if (qq==7) ....
            }
        }
        if (qq == 3) {
            switch (view.getId()) { // 1 стадия
                case R.id.bt1:
                    qq = 10;
                    checkmazahaka = 4;
                    break;
                case R.id.bt2:
                    qq = 11;
                    checkmazahaka = 4;
                    break;
                case R.id.bt3:
                    qq = 12;
                    checkmazahaka = 4;
                    break;
          //  if (qq == 10) .....
            }
        }
////////////////////////////////////////////////////////

    }

}

XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#bbbbbb"
    android:orientation="vertical">
    <TextView
        android:id="@+id/txt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="" />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#bbbbbb"
        android:gravity="top"
        android:orientation="horizontal">

        <Button
            android:id="@+id/bt1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="onClick"
            android:text="①" />
        <Button
            android:id="@+id/bt2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="onClick"
            android:text="②" />
        <Button
            android:id="@+id/bt3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="onClick"
            android:text="③" />
    </LinearLayout>
</LinearLayout>

Ну и манифест на всякий МАНИФЕСТ

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.samsunghomework">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

Подшаманил через switch-case, однако все же программа проскакивает ситуацию

package com.example.samsunghomework;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    int qq = 0;
    int checkmazahaka = 0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView txt = findViewById(R.id.txt);
        txt.setText("Тебе удалось успешно сдать экзамен и вот ты пришел на свою первую пару. \n" +
                "Ты поздоровался с преподавателем и он предложил тебе присесть на место. \n" +
                "В аудитории было три свободных места, и ты начал думать: \n" +
                "① У окна, рядом с парнем, с которым, кажется можно подружиться. \n" +
                "② У стены, рядом с красивой девушкой. \n" +
                "③ На ближайщем месте к преподавателю, будет хорошо слышно материал."); //вступление
    }
    /////////////////////////////////////////////////////////////
    public void onClick(View view) {
        Button but1 = findViewById(R.id.bt1);
        Button but2 = findViewById(R.id.bt2);
        Button but3 = findViewById(R.id.bt3);
        TextView txt = findViewById(R.id.txt);
        if (checkmazahaka == 0) {
            switch (view.getId()) { // 1 стадия ответ на вступление
                case R.id.bt1:
                    qq = 1;
                    break;
                case R.id.bt2:
                    qq = 2;
                    break;
                case R.id.bt3:
                    qq = 3;
                    break;
            }//1 стадия
            checkmazahaka = 1;
            VIVOD(qq);
        }
        if ((qq == 1) && (checkmazahaka == 1)) { //развернулся познакомился

            switch (view.getId()) {
                case R.id.bt1:
                    qq = 4;
                    break;

                case R.id.bt2:
                    qq = 5;
                    break;
                case R.id.bt3:
                    qq = 6;
                    break;

            }
            checkmazahaka = 2;
            VIVOD1(qq);
        }

        if ((qq == 2) && (checkmazahaka == 1)) {
            switch (view.getId()) { // 1 стадия
                case R.id.bt1:
                    qq = 7;
                    break;
                case R.id.bt2:
                    qq = 8;
                    break;
                case R.id.bt3:
                    qq = 9;
                    break;
            }
            checkmazahaka = 2;
            VIVOD2(qq);
        }
        if (qq == 3) {
            switch (view.getId()) { // 1 стадия
                case R.id.bt1:
                    qq = 10;
                    break;
                case R.id.bt2:
                    qq = 11;
                    break;
                case R.id.bt3:
                    qq = 12;
                    break;
                //  if (qq == 10) .....
            }
        }
////////////////////////////////////////////////////////

    }

    public void VIVOD(int qq) {
        TextView txt = findViewById(R.id.txt);
        switch (qq) {
            case 1:
                txt.setText("Ты подошел к парню и присел на место. \n"
                        + "Кажется, ему было все равно на твое появление. \n" +
                        "Твои действия? \n" +
                        "① Развернуться к нему и предложить познакомиться. \n" +
                        "② Предложить ему жевательную резинку. \n" +
                        "③ Продолжить осматриваться по сторонам.");
            case 2:
                txt.setText("Ты подошел к девушке и присел на место. \n" +
                        "Кажется, она тобой заинтересовалась... \n" +
                        "Твои действия? \n" +
                        "① Развернуться и предложить познакомиться. \n" +
                        "② Не обращать на ее внимания, стараясь приглядеться к ней. \n" +
                        "③ Посмотреть на нее и улыбнуться.");
            case 3:
                txt.setText("Ты подошел к VIP месту на первой парте и сел перед учителем \n" +
                        "Он заметил твою тягу к знаниям но ничего не сказал \n" +
                        "Твои действия?  \n" +
                        "① Достать телефон и начать в него залипать \n" +
                        "② Преданным взглядом смотреть на преподавателя \n" +
                        "③ Обернуться назад и оглядеть аудиторию");

        }
    }
    public void VIVOD1(int qq) {
        TextView txt = findViewById(R.id.txt);
        switch (qq) {
            case 4:
                txt.setText("Парень оказался не против и с удовольствием с тобой познакомился.\n" +
                        "Он предложил тебе после занятия сходить в KFC.\n" +
                        "Что скажешь?\n" +
                        "① Согласишься и будешь с нетерпением ждать конца пары \n" +
                        "② Откажешься, сославшись на неотложныые дела\n" +
                        "③ Промямлишь что - то непонятное");
            case 5:
                txt.setText("Парень не смог отказаться и с удовольствием взял твой Orbit. \n" +
                        "Он предложил тебе после занятия сходить в KFC.\n" +
                        "Что скажешь?\n" +
                        "① Согласишься и будешь с нетерпением ждать конца пары \n" +
                        "② Откажешься, сославшись на неотложныые дела\n" +
                        "③ Промямлишь что - то непонятное");
            case 6:
                txt.setText("Ты просто сидел и никого не трогал, когда парень сам подошел к тебе. \n" +
                        "Он предложил тебе после занятия сходить в KFC.\n" +
                        "Что скажешь?\n" +
                        "① Согласишься и будешь с нетерпением ждать конца пары \n" +
                        "② Откажешься, сославшись на неотложныые дела\n" +
                        "③ Промямлишь что - то непонятное");
        }
    }
    public void VIVOD2(int qq) {
        TextView txt = findViewById(R.id.txt);
        switch (qq) {
            case 7:
                txt.setText("йй");
            case 8:
                txt.setText("цц");
            case 9:
                txt.setText("уу");
        }
    }
}
Answer 1

В методе OnClick, после присваивания нового значения, алгоритм продолжает работу уже с ним. В вашем случае, за один проход значению qq сначала присваивается 1, затем 4, 7, 10.

Нужно либо выходить из метода сразу после изменения текста, либо писать все условия через if-else, либо сделать общий switch-case для qq.

public void onClick(View view) {
        Button but1 = findViewById(R.id.bt1);
        Button but2 = findViewById(R.id.bt2);
        Button but3 = findViewById(R.id.bt3);
        TextView txt = findViewById(R.id.txt);
        if (checkmazahaka == 0) {
            switch (view.getId()) { // 1 стадия ответ на вступление
                case R.id.bt1:
                    qq = 1;
                    break;
                case R.id.bt2:
                    qq = 2;
                    break;
                case R.id.bt3:
                    qq = 3;
                    break;
            }//1 стадия
            checkmazahaka = 1;
            VIVOD(qq);
            return;   // нужно либо выйти из метода, после любого изменения текста
        } else        // либо прописывать все условия через else
        if ((qq == 1) && (checkmazahaka == 1)) { //развернулся познакомился

        ...
    }
READ ALSO
Как в JAVA создать динамическую таблицу для ввода матрицы, используя JTable

Как в JAVA создать динамическую таблицу для ввода матрицы, используя JTable

Как в JAVA создать динамическую таблицу для ввода матрицы, используя JTable

206
Ошибка java.lang.NullPointerException, при чтении пустого списка

Ошибка java.lang.NullPointerException, при чтении пустого списка

почему возникает ошибка? CollectionsEMPTY_LIST; это же должно ее предотвратить

203
Сделать текст шириной с родительский элемент динамического размера

Сделать текст шириной с родительский элемент динамического размера

У меня есть элемент динамического размера (inline)В нём есть несколько элементов, одним из которых является текст

189
Проблема с компиляцией в среде Code Blocks

Проблема с компиляцией в среде Code Blocks

Code Blocks не компилирует файл, в пути к которому содержатся русские символыВыдаёт ошибку:

148