我有一段时间通过eclipse创建了一个tictactoe程序。它运作良好,我点击空框放置O,然后程序输入X。但是,我使用了一个非常简单的代码来放置X' s:
public int putX(){
for(int i=0; i<3;i++)
for(int j = 0;j<3;j++) {
if(position[i][j]==' ') {
position[i][j]='X';
return 0;
}
}
return -1; //some error occurred. This is odd. No cells were free.
}
因此,X只是放在每列的行中,直到下一列。有人能告诉我一个随机化这个程序的简单方法吗?
答案 0 :(得分:1)
我们想要做的是生成所有可能点的数组,并随机选择其中一个点。我们使用for循环迭代3x3数组中的所有点,并将有效的数据添加到临时数组中,然后我们选择一个随机索引,并在那里放置一个X.
String[] list = new String[9]; // maximum 9 points
int size = 0;
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
if(position[i][j] == ' ') {
list[size] = "" + i + j;
size++;
}
}
}
int index = (int) (Math.random() * (size+1));
position[Integer.parseInt(list[index].charAt(0))][Integer.parseInt(list[index].charAt(1))] = 'X';
或者,我们可以将它们存储在String
中,而不是将点的x,y坐标存储在java.awt.Point
中,而不是:
Point[] list = new Point[9]; // maximum 9 points
int size = 0;
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
if(position[i][j] == ' ') {
list[size] = new Point(i, j);
size++;
}
}
}
int index = (int) (Math.random() * (size+1));
position[list[index].getX()][list[index].getY()] = 'X';
正如您所看到的,使用Point的代码实际上是相同的,但是我们可以直接从Class中访问它们,而不是从String中解析坐标。
你还应检查以确保剩下一些元素,通过检查for循环后大小是否仍为0。如果是这样,你应该返回-1(你现有的代码所做的)。否则,在整个代码结束时返回0。