Java Android游戏3用户试用版
你好,这是我第一次开发android彩色游戏。然而,我想在每个问题中进行3次试验。我有点困惑如何或在代码中放置while循环。请看一下我迄今为止所做的尝试: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
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();
}
}