Java 检查字符串2d数组中点周围的每个点
我目前正在用Java制作战舰游戏,我目前正在尝试设置游戏规则,以便玩家在靠近另一艘战舰时无法放置战舰。在本例中,一个网格 我有一个方法可以做到这一点,但它不是很好 这是我在Arraylist中添加点的第一种方法。我只想使用一个Java 检查字符串2d数组中点周围的每个点,java,oop,Java,Oop,我目前正在用Java制作战舰游戏,我目前正在尝试设置游戏规则,以便玩家在靠近另一艘战舰时无法放置战舰。在本例中,一个网格 我有一个方法可以做到这一点,但它不是很好 这是我在Arraylist中添加点的第一种方法。我只想使用一个点=新点(I,j)和一个点列表。添加(点)
点=新点(I,j)代码>和一个点列表。添加(点)然后像我在第1点到第8点中做的那样,每隔一点检查一次
public List<Point> addPoint(Point from, Point to) {
for (int i = (int) from.getX(); i <= (int) to.getX(); i++) {
for (int j = (int) from.getY(); j <= (int) to.getY(); j++) {
Point point = new Point(i, j);
Point point1 = new Point(i+1, j);
Point point2 = new Point(i, j+1);
Point point3 = new Point(i+1, j+1);
Point point4 = new Point(i-1, j);
Point point5 = new Point(i, j-1);
Point point6 = new Point(i-1, j-1);
Point point7 = new Point(i+1, j-1);
Point point8 = new Point(i-1, j+1);
pointList.add(point);
pointList.add(point1);
pointList.add(point2);
pointList.add(point3);
pointList.add(point4);
pointList.add(point5);
pointList.add(point6);
pointList.add(point7);
pointList.add(point8);
}
}
return pointList;
}
有人知道更聪明的方法吗?使用2d数组来表示战舰板,而不是点数组。查找“边界框”,很容易检查它们是否重叠
public boolean isPointFreeForPlacement(Position position) {
Point f = position.getFrom();
Point t = position.getTo();
for (Point p: pointList) {
if (p.equals(f) || p.equals(t)) {
System.out.println("Cannot place ships on top of another ship! Try again.");
return false;
}
}
return true;
}