[英]Tic Tac Toe X and Y inversion
我正在制作一个井字游戏小程序。 当我绘制x时,x和y坐标被翻转。
private byte[][] board = new byte[][] {{0, -1, -1},
{-1, -1, -1},
{0, 0, -1}};
其中0是x,1是o,在屏幕上是-1的空白
我的代码是
private int boardSize = getWidth() < getHeight() ? getWidth():getHeight();
@Override
public void paint(Graphics gr) {
Graphics2D g = (Graphics2D)gr;
g.setColor(Color.BLACK);
boardSize = getWidth() < getHeight() ? getWidth():getHeight();
g.setStroke(new BasicStroke(boardSize/72));
g.drawLine(boardSize/3, 0, boardSize/3, boardSize);
g.drawLine(2*boardSize/3, 0, 2*boardSize/3, boardSize);
g.drawLine(0, boardSize/3, boardSize, boardSize/3);
g.drawLine(0, 2*boardSize/3, boardSize, 2*boardSize/3);
g.setStroke(new BasicStroke(boardSize/144));
for(byte x = 0; x < 3; x++) for(byte y = 0; y < 3; y++) if(board[x][y] == 0) drawX(g, x, y);
else if(board[x][y] == 1) drawO(g, x, y);
}
private void drawX(Graphics2D g, byte x, byte y) {
Stroke s = g.getStroke();
g.setStroke(new BasicStroke(boardSize/72));
g.drawLine(x*boardSize/3+boardSize/36, y*boardSize/3+boardSize/36, (x+1)*boardSize/3-boardSize/36, (y+1)*boardSize/3-boardSize/36);
g.setStroke(s);
}
drawO
尚未实现。 我不明白为什么coordiantes被翻转。
你应该用board[y][x]
替换board[x][y]
,因为第一个索引代表块,所以当x=0
时,从矩阵出来的向量是{0,-1,-1}
如果你不想用y
改变x
,
您可以切换for
循环
首先循环y
,然后循环x
第一个解决方案看起来像这样:
for(byte x = 0; x < 3; x++) for(byte y = 0; y < 3; y++) if(board[y][x] == 0) drawX(g, x, y);
else if(board[y][x] == 1) drawO(g, x, y);
第二个解决方案看起来像这样
for(byte y = 0; y < 3; y++) for(byte x = 0; x < 3; x++) if(board[x][y] == 0) drawX(g, x, y);
else if(board[x][y] == 1) drawO(g, x, y);
正如其他人指出的那样,你需要翻转x
和y
。 但我不觉得他们解释为什么这个解决方案非常好。 让我告诉你使用一些图形。
您知道Java Graphics
中的坐标系统如下所示:
X
------------->
Y |
|
|
v
但这不是您的2D阵列坐标系所代表的。 我可以告诉你编写数组以便以图形方式表示电路板,但是如果你以图形方式表示2D迭代,它for (each row) for (each column)
比另一种方式更像。
既然你让y
您的内部循环的变量,它成为你的“列”的坐标,这通常会一直X坐标。
y
------------->
x | {{0, -1, -1},
| {-1, -1, -1},
| {0, 0, -1}};
v
因此,您可以通过切换它们来了解为什么需要以不同方式处理循环变量。
如果你看看如何定义你的板
private byte[][] board = new byte[][] {{0, -1, -1},
{-1, -1, -1},
{0, 0, -1}};
以及如何从中获取价值
board[x][y]
当你执行board[x]
你会得到board的xth
元素,所以如果x是0那么{0, -1, -1}
,因为board是一个数组数组。 然后, board[x][y]
获取该数组的yth
元素,因此如果y为1,则结果为-1。
您应该使用board[y][x]
交换从板上检索元素的方式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.