我需要创建一个平铺的地图nxn列/线。首先,程序询问用户他想要多少个图块,然后它会创建一个图块化地图。之后,用户单击一个图块,图块会更改颜色。然后他点击另一个瓷砖,颜色也随之改变。之后,程序将找到从所选图块到另一个图块的解决方案。
现在,我使用Graphics2D组件创建了平铺的地图,但是当我单击平铺时,是整个图形改变了颜色,而不仅仅是一个平铺...
你能告诉我怎么了吗?绘制平铺地图的好方法是什么?谢谢 !
迷宫应如下所示:
我仍然需要输入隔离墙的代码并找到解决方案。
这是我创建地图的JPanel的代码。
public LabyrintheInteractif (){
addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
click=true;
repaint();
xClick=e.getX();
yClick=e.getY();
}
});
tiles=Integer.parseInt(JOptionPane.showInputDialog("How many tiles ?"));
Quadrilage", JOptionPane.YES_NO_OPTION);
setPreferredSize(new Dimension(734, 567));
setVisible(true);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.white);
rect = new Rectangle2D.Double(0, 0,getWidth(), getWidth());
g2d.fill(rect);
g2d.setColor(Color.black);
for (row = 0; row <tuiles; row++) {
for (column = 0; column < tuiles; column++) {
g2d.setStroke(new BasicStroke(3));
g2d.draw( square=new Rectangle2D.Double(column*100 , row*100,100,100));
}
if(click){
g2d.setColor(Color.green);
g2d.fill(square);
repaint();
}
}
最佳答案
这里的问题是您没有检查用户单击了哪个磁贴。取而代之的是,您只是检查用户是否完全单击过。
您需要做的是找到磁贴的width
和height
。
然后,您需要检查用户在嵌套的for循环中单击了哪个图块,就像这样。
for (row = 0; row <tuiles; row++) {
for (column= 0; column<tuiles; column++) {
if(clicked){
//check if the click x position is within the bounds of this tile
if(column * tileWidth + tileWidth > xClick && column * tileWidth < xClick){
//check if the click y position is within the bounds of this tile
if(row * tileHeight + tileHeight > yClick && row * tileHeight < yClick){
//mark this tile as being clicked on.
clicked = false;
}
}
}
}
}
然后,您将需要存储布尔值,该值将说明是否已单击特定的图块。这样,当您绘制图块时,可以使用如下所示的内容:
if(thisTileHasBeenClicked){
//if the tile has been clicked on
g2d.setColor(Color.green);
g2d.fill(square);
}else{
//if the tile has not been clicked on
g2d.setColor(Color.gray);
g2d.fill(square);
}
关于java - 为迷宫创建平铺 map n * n,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26540237/