有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java随机方法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) 个答案

  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. # 2 楼答案

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

  3. # 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;
    }