我正在为Android开发一个tic tac toe游戏。用户将与计算机对战。我最完成游戏,但只是坚持这最后一个问题。我尝试了很多,但找不到合适的随机方法来选择一个空的随机方格。 这就是我宣布我的9个按钮的方式。
btn00 = (Button) findViewById(R.id.button);
btn01 = (Button) findViewById(R.id.button2);
btn01 = (Button) findViewById(R.id.button3);
btn10 = (Button) findViewById(R.id.button4);
btn11 = (Button) findViewById(R.id.button5);
btn12 = (Button) findViewById(R.id.button6);
btn20 = (Button) findViewById(R.id.button7);
btn21 = (Button) findViewById(R.id.button8);
btn22 = (Button) findViewById(R.id.button9);
请帮帮我。提前谢谢!
答案 0 :(得分:1)
将按钮放入列表,生成一个随机数,然后从列表中获取所选数字的按钮。
答案 1 :(得分:1)
为了避免选择已经选择的按钮,你可以形成一个9号的数组,选择一个随机数并将其删除。这是一个例子:`
/**
* RandomArray is a data structure similiar to a set, which removes a random number one at a time and decreases the size of the set by one.
*/
public class RandomArray {
int size;
int[] array;
/**
* The only constructor for this class. assigns numbers from 1 to m in the 0 to m-1 cells respectively.
* @param size holds the value of m - meaning, the method will generate a number for each movie.
*/
public RandomArray(int size) {
this.size = size;
array = new int[size];
for (int i = 0; i<size; i++) {
array[i] = i+1;
}
}
/**
* remove removes a number randomly and returns it.
* with each removal the number in the last cell replaces the removed number and size is decreased by one.
* @return a random number represents a movie that hasn't been played yet.
*/
public int remove() {
int ans = -1;
if (size > 0) {
// generating a random number from 0 to the last cell.
int randomNum = (int)(Math.random()*size);
ans = array[randomNum];
// last number replaces the number to be removed.
array[randomNum] = array[size-1];
size--;
}
return ans;
}
}
编辑:我忘了提及:把所有按钮放在一个数组中。这样生成的数字是数组单元格
`
答案 2 :(得分:1)
我建议将视图与州分开。
int[] state = new int[] {0, 0, 0, 0, 0, 0, 0, 0, 0 }; // int[9]
Button[] buttons = new Button[] {
(Button) findViewById(R.id.button),
(Button) findViewById(R.id.button2),
(Button) findViewById(R.id.button3),
...
}
然后尝试使用状态找到一个空单元格:
Random rnd = new Random();
int index = rnd.nextInt(state.length);
while(state[index] != 0) {
index = rnd.nextInt(state.length);
}
设置状态:
state[index] = 1;
然后更新你的按钮:
Button b = buttons[index];
b.set....();
...
当用户点击它们时,同样适用于您的按钮,在onClick()中使用此功能来确定索引:
int getIndex(Button b) {
for(int i = 0; i < buttons.length; i++) {
if(buttons[i].equals(b)) {
return i;
}
}
return -1;
}