我是Android的初级程序员,我创建了自己的游戏,并从随机生成的数字中添加了游戏。玩家的任务是通过选择3个给定的数字相加来猜测结果,其中的数字是真实结果。一切正常,但我希望每轮都在另一个按钮上获得正确的结果,以便玩家不会意识到正确的结果在1号按钮上,而2和3按钮为假。有问题的代码:

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

如果这有帮助,那么整个活动代码都在下面。请 ,,,

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开头设置一次。只需编写另一个函数,该函数将以Random的方式在run()的第一行之前重新分配这些字段,或者更准确地说-在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;
    }
}

10-06 09:10
查看更多