0

我正在为安卓开发一个井字游戏。用户将与计算机对战。我对游戏的大部分时间都完成了,但只是停留在最后一个问题上。我尝试了很多,但找不到合适的随机方法来选择一个空的随机方块。这就是我声明我的 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);

请帮帮我。提前致谢!

4

3 回答 3

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;
}
于 2013-10-15T11:10:56.230 回答
1

将您的按钮放入列表中,生成一个随机数,然后从列表中获取所选数字的按钮。

于 2013-10-15T10:48:49.187 回答
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;
}
}

编辑:我忘了提:把你所有的按钮放在一个数组中。这样生成的数字就是数组单元格

`

于 2013-10-15T10:54:49.207 回答