Java Android游戏3用户试用版

Java Android游戏3用户试用版,java,android,Java,Android,你好,这是我第一次开发android彩色游戏。然而,我想在每个问题中进行3次试验。我有点困惑如何或在代码中放置while循环。请看一下我迄今为止所做的尝试: int trial = 0; private void getCorrectObject() { List<Integer> objects = new ArrayList<Integer>(); objects.add(1); objects.add(2); object

你好,这是我第一次开发android彩色游戏。然而,我想在每个问题中进行3次试验。我有点困惑如何或在代码中放置while循环。请看一下我迄今为止所做的尝试:

  int trial = 0;

  private void getCorrectObject() {

    List<Integer> objects = new ArrayList<Integer>();
    objects.add(1);
    objects.add(2);
    objects.add(3);
    objects.add(4);
    objects.add(5);
    objects.add(6);
    objects.add(7);
    objects.add(8);
    objects.add(9);

    Collections.shuffle(objects);
    int correctObject =  objects.get(0);
    Log.d("test", String.valueOf(correctObject));



    while(trial <=3){
        trial++;


    switch(correctObject)
    {
    case 1:
        bObjectCorrect.setImageResource(R.drawable.stage1_1_object1);
        bObjectCorrect.setOnClickListener(new View.OnClickListener() {

            public void onClick(View view) {
                Intent i = new Intent(getApplicationContext(), Stage1_2.class);
                startActivity(i);
                new Thread(){
                    public void run(){
                        MediaPlayer mp = MediaPlayer.create(Stage1_2.this, R.raw.brown);
                        mp.start();
                    }
                }.start();
                finish();
            }
        });
        break;
    case 2:
        bObject1.setImageResource(R.drawable.stage1_1_object1);
        bObject1.setOnClickListener(new View.OnClickListener() {

            public void onClick(View view) {
                Intent i = new Intent(getApplicationContext(), Stage1_2.class);
                startActivity(i);
                new Thread(){
                    public void run(){
                        MediaPlayer mp = MediaPlayer.create(Stage1_2.this, R.raw.brown);
                        mp.start();
                    }
                }.start();
                finish();
            }
        });
        break;
    case 3:
        bObject2.setImageResource(R.drawable.stage1_1_object1);
        bObject2.setOnClickListener(new View.OnClickListener() {

            public void onClick(View view) {
                Intent i = new Intent(getApplicationContext(), Stage1_2.class);
                startActivity(i);
                new Thread(){
                    public void run(){
                        MediaPlayer mp = MediaPlayer.create(Stage1_2.this, R.raw.brown);
                        mp.start();
                    }
                }.start();
                finish();
            }
        });
        break;
    case 4:
        bObject3.setImageResource(R.drawable.stage1_1_object1);
        bObject3.setOnClickListener(new View.OnClickListener() {

            public void onClick(View view) {
                Intent i = new Intent(getApplicationContext(), Stage1_2.class);
                startActivity(i);
                new Thread(){
                    public void run(){
                        MediaPlayer mp = MediaPlayer.create(Stage1_2.this, R.raw.brown);
                        mp.start();
                    }
                }.start();
                finish();
            }
        });
        break;
    case 5:
        bObject4.setImageResource(R.drawable.stage1_1_object1);
        bObject4.setOnClickListener(new View.OnClickListener() {

            public void onClick(View view) {
                Intent i = new Intent(getApplicationContext(), Stage1_2.class);
                startActivity(i);
                new Thread(){
                    public void run(){
                        MediaPlayer mp = MediaPlayer.create(Stage1_2.this, R.raw.brown);
                        mp.start();
                    }
                }.start();
                finish();
            }
        });
        break;
    case 6:
        bObject5.setImageResource(R.drawable.stage1_1_object1);
        bObject5.setOnClickListener(new View.OnClickListener() {

            public void onClick(View view) {
                Intent i = new Intent(getApplicationContext(), Stage1_2.class);
                startActivity(i);
                new Thread(){
                    public void run(){
                        MediaPlayer mp = MediaPlayer.create(Stage1_2.this, R.raw.brown);
                        mp.start();
                    }
                }.start();
                finish();
            }
        });
        break;
    case 7:
        bObject6.setImageResource(R.drawable.stage1_1_object1);
        bObject6.setOnClickListener(new View.OnClickListener() {

            public void onClick(View view) {
                Intent i = new Intent(getApplicationContext(), Stage1_2.class);
                startActivity(i);
                new Thread(){
                    public void run(){
                        MediaPlayer mp = MediaPlayer.create(Stage1_2.this, R.raw.brown);
                        mp.start();
                    }
                }.start();
                finish();
            }
        });
        break;
    case 8:
        bObject7.setImageResource(R.drawable.stage1_1_object1);
        bObject7.setOnClickListener(new View.OnClickListener() {

            public void onClick(View view) {
                Intent i = new Intent(getApplicationContext(), Stage1_2.class);
                startActivity(i);
                new Thread(){
                    public void run(){
                        MediaPlayer mp = MediaPlayer.create(Stage1_2.this, R.raw.brown);
                        mp.start();
                    }
                }.start();
                finish();
            }
        });
        break;
    case 9:
        bObject8.setImageResource(R.drawable.stage1_1_object1);
        bObject8.setOnClickListener(new View.OnClickListener() {

            public void onClick(View view) {
                Intent i = new Intent(getApplicationContext(), Stage1_2.class);
                startActivity(i);
                new Thread(){
                    public void run(){
                        MediaPlayer mp = MediaPlayer.create(Stage1_2.this, R.raw.brown);
                        mp.start();
                    }
                }.start();
                finish();
            }
        });
        break;
    } // Last of switch statement


    if(trial == 3){
        new AlertDialog.Builder(this)
        .setTitle("Game Over")
        .setMessage("Sorry you reached your 3rd trial")
        .setPositiveButton("Try Again?", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) { 
                Intent i = new Intent(Stage1_2.this, Stage1_1.class);
                startActivity(i);
            }
         })
        .setNegativeButton("Back to Menu", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) { 
                Intent i = new Intent(Stage1_2.this, ShapingColors.class);
                startActivity(i);
            }
         })
         .show();
    }

    } // end of while loop

您感到困惑的原因是您不能使用循环来完成此任务。使用Java Android框架时,每个回调函数(例如,
onClick
侦听器,或
活动的
onResume
)必须在应用程序的一个框架内运行并完成。只有在函数返回后,应用程序才会更新屏幕。这意味着,如果你在做一些类似于响应一系列点击的事情,你不能在循环中完成。您必须在对回调的单独调用中处理每次单击<如果您想迭代项目列表以决定现在应该发生什么(例如,如果您正在将项目添加到<代码>列表视图
),则可以使用code>for和<代码>while循环,但不能迭代在不同时间发生的事情(例如用户的猜测)

你必须像状态机一样思考你的
活动。将
trial
设置为
活动的成员变量(字段),该变量从
0
开始。您可能有一个函数
GuessedError()
,它递增
trial
,如果大于2,则转到“游戏结束”屏幕。错误答案的
onClick
侦听器将调用此函数。转到新问题时,将
trial
重置为
0


如果重新启动
活动
,您还需要确保保留试用次数(您所处的状态)。Google提供的中的课程向您展示了如何执行此任务。

您感到困惑的原因是无法使用循环执行此任务。使用Java Android框架时,每个回调函数(例如,
onClick
侦听器,或
活动的
onResume
)必须在应用程序的一个框架内运行并完成。只有在函数返回后,应用程序才会更新屏幕。这意味着,如果你在做一些类似于响应一系列点击的事情,你不能在循环中完成。您必须在对回调的单独调用中处理每次单击<如果您想迭代项目列表以决定现在应该发生什么(例如,如果您正在将项目添加到<代码>列表视图
),则可以使用code>for
和<代码>while
循环,但不能迭代在不同时间发生的事情(例如用户的猜测)

你必须像状态机一样思考你的
活动。将
trial
设置为
活动的成员变量(字段),该变量从
0
开始。您可能有一个函数
GuessedError()
,它递增
trial
,如果大于2,则转到“游戏结束”屏幕。错误答案的
onClick
侦听器将调用此函数。转到新问题时,将
trial
重置为
0



如果重新启动
活动
,您还需要确保保留试用次数(您所处的状态)。谷歌提供的课程向您展示了如何做到这一点。

试用版设置为一个字段。很抱歉,我的代码中有一个错误。我已经将其设置为字段。我不完全理解您的问题,因为在我看来,“while”语句在该位置是正确的,但就我看来,您应该在循环中读取“correctObject”的值(否则它将始终具有相同的值),并且条件应该是(trial<3),否则它将迭代四次(试用=0,试用=1,试用=2,试用=3)根据我之前的评论编辑:放置“Collections.shuffle(objects);”和“correctObject=objects.get(0);”在while循环中,如果你解释用户应该做什么,那么我们可以帮助你,每次试验之间发生了什么还不是很清楚。你得到的结果是什么,为什么错了?将
试验设置为字段我很抱歉我的代码中有一个错误。我已经将其设置为字段。我不完全理解你的问题,贝卡使用在我看来,“while”语句在那个位置是正确的,但就我看来,您应该在循环中读取“correctObject”的值(否则它将始终具有相同的值),并且条件应该是(trial<3),否则它将重复四次(trial=0,trial=1,trial=2,trial=3)根据我之前的评论进行编辑:放置“Collections.shuffle(objects);”和“correctObject=objects.get(0);”在while循环中,如果你解释用户应该做什么,那么我们可以帮助你,现在还不清楚每次试验之间发生了什么。你得到的结果是什么,为什么是错的?谢谢你,在创建了我自己的猜测错误()之后方法,我如何知道我洗牌后的错误答案?选择正确答案后,也将其保存在一个字段中,以便您稍后可以获取。或者,您可以调用右侧按钮上的
setTag
,稍后您可以检查单击的按钮是否具有您设置的标记。很抱歉,我没有理解您在这里的意思,所以您正在尝试say将执行以下操作:bObject6.setTag();我将在其中放入什么?correctObject变量?您可以在其中放入任何您喜欢的内容。感谢您,在创建了我自己的猜测错误()之后方法,我如何知道我洗牌后的错误答案?选择正确答案后,也将其保存在一个字段中,以便您稍后可以获取。或者,您可以调用右侧按钮上的
setTag
,稍后您可以检查单击的按钮是否具有您设置的标记。很抱歉,我没有理解您在这里的意思,所以您正在尝试假设我要这样做:bObject6.setTag();我要在里面放什么?correctObject变量?你可以放一个
 private void guessedWrong(){
    trial++;

    if(trial == 3){
        new AlertDialog.Builder(this)
        .setTitle("Game Over")
        .setMessage("Sorry you reached your 3rd trial")
        .setPositiveButton("Try Again?", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) { 
                Intent i = new Intent(Stage1_1.this, Stage1_1.class);
                startActivity(i);
            }
         })
        .setNegativeButton("Back to Menu", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) { 
                Intent i = new Intent(Stage1_1.this, ShapingColors.class);
                startActivity(i);
            }
         })
         .show();
    }


}