我一直在尝试创建一个简单的西蒙记忆游戏,我完成了但代码不专业,我正在重做它并希望学习如何正确地做。我唯一不知道的是如何正确使用处理程序,经过一周的尝试,我需要一些帮助。所以我有一个充满数字的数组,现在有 20 个数字,每个数字在 1 到 4 之间随机。一些代码根据数组中的数字调用某个方法,为了测试我想运行游戏来玩前 20 个关卡自动,这是游戏循环代码:
// First time pass 1 to Level method
public void Level(int lvl) {
// for 20 times, once for each number in the array index
for (int j = 0; j < 20; j++) {
// lvl is initialsed to 1 so the first time it does this once
for (int i = 0; i <= lvl; i++) {
// Call checknumber method and pass arrayindex value
checknumber(array[i]);
}
lvl++;
}
}
所以上面的代码会点亮一种颜色并快速播放声音,我尝试在我的第二个 for 循环中执行此操作,但它要求将 i 变量设置为 final,这不起作用,我再次尝试了解它的原因需要是最终的,无法理解:
for (int i = 0; i <= lvl; i++) {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
// Call checknumber method and pass arrayindex value
checknumber(array[i]);
}
}, amount);
}
所以在我的 checknumber 方法中,我有这个:
public void checknumber(int a) {
//if number passed is 1 then play green button
if (a == 1) {
green();
}
//if number passed is 2 then play green button
if (a == 2) {
red();
}
//if number passed is 3 then play green button
if (a == 3) {
yellow();
}
//if number passed is 4 then play green button
if (a == 4) {
blue();
}
}
调用这些方法:
public void green() {
s1();
b1.setBackgroundResource(R.drawable.b1tlchanged);
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
b1.setBackgroundResource(R.drawable.b1tl);
}
}, amount);
}
public void red() {
s2();
b2.setBackgroundResource(R.drawable.b2trchanged);
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
b2.setBackgroundResource(R.drawable.b2tr);
}
}, amount);
}
public void yellow() {
s3();
b3.setBackgroundResource(R.drawable.b3blchanged);
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
b3.setBackgroundResource(R.drawable.b3bl);
}
}, amount);
}
public void blue() {
s4();
b4.setBackgroundResource(R.drawable.b4brchanged);
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
b4.setBackgroundResource(R.drawable.b4br);
}
}, amount);
}
您可以看到我拥有的当前处理程序并且它们不起作用,因为我认为它们位于错误的位置,它们应该在我的 for 循环中是我的想法,但我不知道这里最好的解决方案是什么以及如何去做. 如果我有多个处理程序,或者只有一个,我觉得一个处理程序是最好的。
我需要播放一种颜色和声音,然后在半秒后播放下一个声音和颜色,所以在每个方法调用之间有半秒,我应该尝试在每个方法调用后暂停活动吗?任何关于这方面的建议都会很棒,因为我需要在编程方面做得更好。谢谢你。