随机方法tic tac toe android

时间:2013-10-15 10:46:59

标签: java android tic-tac-toe

我正在为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);

请帮帮我。提前谢谢!

3 个答案:

答案 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;
}