java - 按钮上的数字不同

标签 java android random

我是一名 Android 初学者程序员,我创建了自己的游戏,该游戏是根据随机生成的数字进行添加的。玩家的任务是通过相加来猜测结果,选择 3 个给定的数字,其中的数字才是真正的结果。一切正常,但我希望每轮的正确结果都在另一个按钮上,这样玩家就不会意识到正确的结果在按钮 1 上,而按钮 2 和 3 是 false 。有问题的代码:

private void startTimerThread() {
    final Handler handler = new Handler();
    los();
    proba.setText("dodawanie");
    c = Dodawanie(a, b);
    Random liczba = new Random();
    h = liczba.nextInt(5);
    Toast.makeText(getApplicationContext(), String.valueOf(c), Toast.LENGTH_LONG).show();
    Runnable runnable = new Runnable() {
        public void run() {
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            handler.post(new Runnable() {
                public void run() {
                    W1.setText(String.valueOf(c));
                    Wyb1.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            p++;
                            l.setText(String.valueOf(p));
                            startTimerThread();

                        }
                    });
                    W2.setText(String.valueOf(l1));
                    Wyb2.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            Toast.makeText(getApplicationContext(), "Zle", Toast.LENGTH_LONG).show();
                        }
                    });
                    W3.setText(String.valueOf(l2));
                    Wyb3.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            Toast.makeText(getApplicationContext(), "Zle", Toast.LENGTH_LONG).show();
                        }
                    });
                }
            });

        }
    };
    new Thread(runnable).start();
}

enter image description here

如果这有帮助,那么整个 Activity 代码如下。请,,,

public class GameSingleActivity extends AppCompatActivity {

    TextView proba,Dz,W1,W2,W3,l;
    private int a,b,c,l1,l2,p=0,h;
    ImageButton Wyb1,Wyb2,Wyb3;
    ProgressBar mProgressBar;
    boolean running = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_game_single);

        proba = findViewById(R.id.textView12);
        Dz = findViewById(R.id.Dzialanie);
        W1 = findViewById(R.id.Wpozycja1);
        W2 = findViewById(R.id.Wpozycja2);
        W3 = findViewById(R.id.Wpozycja3);
        l = findViewById(R.id.Level);
        Wyb1 = findViewById(R.id.imageButton11);
        Wyb2 = findViewById(R.id.imageButton12);
        Wyb3 = findViewById(R.id.imageButton13);
        mProgressBar=findViewById(R.id.progressBar);
        l.setText("0");



        if (getIntent().getExtras()!=null) {
            int buttonPressed = getIntent().getExtras().getInt(MenuGameActivity.INTENT_KEY);

            if (buttonPressed == MenuGameActivity.FIRST_OPTION) {
                // first button is clicked
                proba.setText("dodawanie");
                startTimerThread();

            } else if (buttonPressed == MenuGameActivity.SECOND_OPTION) {
                //second button is clicked
                proba.setText("odejmowanie");
            } else if (buttonPressed == MenuGameActivity.THIRD_OPTION) {
                //second button is clicked
                proba.setText("odejmowanie");
            }else if (buttonPressed == MenuGameActivity.FOURTH_OPTION) {
                //second button is clicked
                proba.setText("odejmowanie");
            }else if (buttonPressed == MenuGameActivity.FIFTH_OPTION) {
                //second button is clicked
                proba.setText("odejmowanie");
            }else if (buttonPressed == MenuGameActivity.SIXTH_OPTION) {
                //second button is clicked
                proba.setText("odejmowanie");
            }

        }
    }



        ///////////////////////////////////////////

        private void startTimerThread() {
            final Handler handler = new Handler();
            los();
            proba.setText("dodawanie");
            c = Dodawanie(a, b);
            Random liczba = new Random();
            h = liczba.nextInt(5);
            Toast.makeText(getApplicationContext(), String.valueOf(c), Toast.LENGTH_LONG).show();
            Runnable runnable = new Runnable() {
                public void run() {
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    handler.post(new Runnable() {
                        public void run() {
                            W1.setText(String.valueOf(c));
                            Wyb1.setOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View v) {
                                    p++;
                                    l.setText(String.valueOf(p));
                                    startTimerThread();

                                }
                            });
                            W2.setText(String.valueOf(l1));
                            Wyb2.setOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View v) {
                                    Toast.makeText(getApplicationContext(), "Zle", Toast.LENGTH_LONG).show();
                                }
                            });
                            W3.setText(String.valueOf(l2));
                            Wyb3.setOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View v) {
                                    Toast.makeText(getApplicationContext(), "Zle", Toast.LENGTH_LONG).show();
                                }
                            });
                        }
                    });

                }
            };
            new Thread(runnable).start();
        }


    public int Dodawanie(int a,int b)
    {
        String A = String.valueOf(a);
        String B = String.valueOf(b);
        Dz.setText(A+" + "+B);
        return a + b;
    }
    public void los()
    {
        Random liczba = new Random();
        a = liczba.nextInt(101);
        b = liczba.nextInt(101);
        l1= liczba.nextInt(101)+30;
        l2= liczba.nextInt(101)+30;

    }



}

最佳答案

我认为最简单、最快的方法是每次提出新问题时对 W1/Wyb1 成员进行洗牌。

目前,您在 OnCreate 开始时设置它们一次。只需编写另一个函数,该函数将在 run() 中的第一行之前以Random 方式重新分配这些字段,或者更准确地说 - 在 W1.setText 之前(String.valueOf(c));

下面是一个伪代码(我将其写在编辑框中),它应该证明(或不证明)这种方法是否适合您的需要。

void Shuffle() {
    switch(new Random().nextInt(3)) {
    case 0:
        W1 = findViewById(R.id.Wpozycja1);
        W2 = findViewById(R.id.Wpozycja2);
        W3 = findViewById(R.id.Wpozycja3);

        Wyb1 = findViewById(R.id.imageButton11);
        Wyb2 = findViewById(R.id.imageButton12);
        Wyb3 = findViewById(R.id.imageButton13);
        break;
    case 1:
        W2 = findViewById(R.id.Wpozycja1);
        W1 = findViewById(R.id.Wpozycja2);
        W3 = findViewById(R.id.Wpozycja3);

        Wyb2 = findViewById(R.id.imageButton11);
        Wyb1 = findViewById(R.id.imageButton12);
        Wyb3 = findViewById(R.id.imageButton13);
        break;
    case 2:
        W3 = findViewById(R.id.Wpozycja1);
        W2 = findViewById(R.id.Wpozycja2);
        W1 = findViewById(R.id.Wpozycja3);

        Wyb3 = findViewById(R.id.imageButton11);
        Wyb2 = findViewById(R.id.imageButton12);
        Wyb1 = findViewById(R.id.imageButton13);
        break;
    }
}

关于java - 按钮上的数字不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60464780/

相关文章:

java - 为什么我的随机数生成器返回负值

c++ - msvcrt.dll 是否为其 rand() 函数使用线性同余生成器?

java - 在android中使用JSON将字符串编码为UTF-8

java - 轴 IllegalArgumentException 但 SOAP 消息是正确的

android - 使用 Dagger 2 发送数组列表

Android如何根据第一个标签输入更新第二个标签?

android - 取消 ListArrayAdapter 内的 AsyncTask 并关闭通知

swift - 使用 while 函数快速掷骰子并打印结果,直到结果为 1

java - 错误: cannot find symbol class Base64

java - 如何处理此响应案例