我想要做的是找到一个人点击的棋盘游戏的位置,并在我的2D阵列中根据它更改值。它有点像tic tac toe但更大,你把石头放在十字路口。到目前为止,我能够获得我的鼠标的x和y位置,并检查用户是否点击了第一个左上角交叉点,但是我正在考虑编写某种for循环来检查所有交叉点。
这是我检查顶部交叉点的代码
if ((x >= 278 && x <= 285) && ( y >= 160 && y <= 175))
{
System.out.println("intersection 1 clicked");
}
所以我的问题是如何编写for循环来检查所有交叉点?如果您不想编写代码,即使逻辑也很好。
在此先感谢任何帮助非常感谢。
http://i.stack.imgur.com/yzPTA.png这是我运行左上角的程序是我的光标
答案 0 :(得分:2)
答案 1 :(得分:1)
我认为for循环会使事情过于复杂。您可以改为编写一些语句,以便在screen space
和board space
之间进行翻译。
按800px
说明您的屏幕空间为600px
,并且您有一个由{2}数组代表的10 x 10
游戏板:board[10][10]
。我们还要说你开始在距离10px
偏移0,0
的情况下绘制电路板,并且电路板的宽度为500px
。在这种情况下,您可以知道电路板上每个单元占用的屏幕空间:
int boardScreenWidth = 500;
int cellWidth = boardScreenWidth / boardWidth;
// = 500px / 10
// = 50px
首先忽略不接触电路板的点击:
int boardStartX = 10;
if (mouseX < boardStartX || mouseX >= boardStartX + boardScreenWidth)
return; // The user clicked somewhere to the left or right of the board
然后,如果电路板上有咔嗒声,则需要根据电路板的偏移量从0调整鼠标位置(因此,点击x=10px
就像点击x=0
一样董事会的立场)。使用此信息,可以轻松地将屏幕空间中的x坐标转换为board
中的索引:
int mouseX = 320; // user clicked at x=320
mouseX = mouseX - boardStartX; // adjust based on board's position
int boardX = mouseX / cellWidth;
// = 310 / 50
// = 6
您可以类似地找到boardY
,然后访问在board[boardX][boardY]
点击的单元格。
修改:要从board
中的索引获取屏幕坐标,请使用上面相同的逻辑但求解mouseX
:
int boardX = (mouseX - boardStartX) / cellWidth;
// ==> boardX * cellWidth = mouseX - boardStartX
// ==> (boardX * cellWidth) + boardStartX = mouseX
// or...
int screenX = boardStartX + (boardX * cellWidth);
请注意,这是单元格的边缘。整个单元格将从screenX
延伸到screenX + cellWidth
。单元格的中心位于screenX + cellWidth / 2