【问题标题】:Random method tic tac toe android随机方法tic tac toe android
【发布时间】:2013-10-15 19:10:56
【问题描述】:

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

请帮帮我。提前致谢!

【问题讨论】:

  • 你不想让电脑玩家按照游戏逻辑来玩,而不是随意选择一个空方格吗?
  • @Dr.Avalanche 我只是一个 14 岁的孩子。我已经对逻辑进行了编程,但第一步我希望计算机选择一个随机方。请帮帮我!

标签: java android tic-tac-toe


【解决方案1】:

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

【讨论】:

  • 您只需从列表中删除该按钮 - 也要注意随机生成器以避免 IndexOutOfBounds 异常!
【解决方案2】:

为了避免选择一个已经被选中的按钮,你可以形成一个大小为 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;
}
}

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

`

【讨论】:

  • 谢谢!我一定会尝试的。
【解决方案3】:

我建议将视图与状态分开。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    相关资源
    最近更新 更多