我创建了一个有6个按钮的游戏,当你点击button2时按钮应该改变它们的位置,这是我做的脚本:
if (id == R.id.button2) {
action1();
action2();
action3();
action4();
action5();
action6();
}
以下是行动:
private void action1() {
// TODO Auto-generated method stub
Button button1 = (Button)findViewById(R.id.button1);
button1.setX(50);
int min = 0;
int max = 200;
Random r = new Random();
int i1 = r.nextInt(max - min + 1) + min;
button1.setY(i1);
}
private void action2() {
// TODO Auto-generated method stub
Button button2 = (Button)findViewById(R.id.button2);
button2.setX(50);
int min = 0;
int max = 1200;
Random r = new Random();
int i1 = r.nextInt(max - min + 1) + min;
button2.setY(i1); }
private void action3() {
// TODO Auto-generated method stub
Button button3 = (Button)findViewById(R.id.button3);
button3.setX(50);
int min = 400;
int max = 600;
Random r = new Random();
int i1 = r.nextInt(max - min + 1) + min;
button3.setY(i1); }
private void action4() {
// TODO Auto-generated method stub
Button button4 = (Button)findViewById(R.id.button4);
button4.setX(50);
int min = 600;
int max = 800;
Random r = new Random();
int i1 = r.nextInt(max - min + 1) + min;
button4.setY(i1); }
private void action5() {
// TODO Auto-generated method stub
Button button5 = (Button)findViewById(R.id.button5);
button5.setX(50);
int min = 800;
int max = 1000;
Random r = new Random();
int i1 = r.nextInt(max - min + 1) + min;
button5.setY(i1); }
private void action6() {
// TODO Auto-generated method stub
Button button6 = (Button)findViewById(R.id.button6);
button6.setX(50);
int min = 1000;
int max = 1200;
Random r = new Random();
int i1 = r.nextInt(max - min + 1) + min;
button6.setY(i1);
}
我的问题是:按钮会将其位置更改为另一个按钮,因此您无法按下按钮,我该怎么做才能解决此问题?
我想到了这个选项:
得到按钮和顶部的Y坐标,除以6,然后我知道每个按钮应该给出的Y坐标范围是什么,我该怎么办?或者你能告诉我一个更好的方法吗?
答案 0 :(得分:1)
您的代码中存在几个问题。首先,您应该重用可以重用的任何资源。在这种情况下,您应该存储对按钮和随机的引用。您的数字始终相同,因此您可以将它们声明为类变量。最后,你可以通过记住"被占用的"来解决你的问题。位置。
P.S。不要忘记不同的屏幕有不同的分辨率。
工作代码!=好代码。此外,还有一个名为DRY的节目指南 - 不要重复自己。你的代码远没有DRY。通常,如果您多次复制代码 - 将其包装在方法中,而不是复制正文。你的6种动作方法可以少写5行:
private void action(Button b, int min, int max){
b.setX(50);
b.setY(r.nextInt(range));
}
将Buttons和Random定义为类变量,以便重用它们:
public class MyClass extends Activity{
Random rl
Button button1;
...
Button button6;
//List<Button> buttons = new ArrayList<Button>(); might be even better
的onCreate:
r = new Random();
button1 = (Button)findViewById(R.id.button1);
...
button6 = (Button)findViewById(R.id.button6);
当你点击它们时:
if(id==R.id.button2){
action(button1,0,200);
...
}
要保持按钮分开,请检查随机值是否与所有按钮都不重叠:
int getRandom(int min,int max){
int val = r.nextInt(range);
if(button1.getY()>val&&button1.getY()+width<val){
//buttons overlap, try another random value
} else {
//check other buttons
}
}