匹配图形网格到2d阵列网格

时间:2013-06-01 16:52:55

标签: java arrays swing for-loop 2d

我想要做的是找到一个人点击的棋盘游戏的位置,并在我的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这是我运行左上角的程序是我的光标

http://i.stack.imgur.com/l6UrW.png这是我的代码

2 个答案:

答案 0 :(得分:2)

如图here所示,您可以根据所需的网格坐标计算屏幕坐标。单击并拖动以捕获屏幕的SIZE方块,然后将鼠标悬停在其上以查看mouseMoved()的工作原理。此MapPanel中使用了类似的方法。

image

答案 1 :(得分:1)

我认为for循环会使事情过于复杂。您可以改为编写一些语句,以便在screen spaceboard 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