gpt4 book ai didi

Java免费现货件

转载 作者:行者123 更新时间:2023-12-01 10:07:20 24 4
gpt4 key购买 nike

如果不使用该 block 周围的坐标,我有一个 block 需要被其他灰色 block 包围。

我尝试执行以下操作:

public List<Piece> boardPiece(){
List<Piece> boardPieces = new ArrayList<>();
for (Piece pieces : listToPiece) {
if (pieces.getCoordinate() != null){
boardPieces.add(pieces);
}
}
return boardPieces;
}

public List<Coordinate> getSurroundings() {
List<Coordinate> surroundings = new ArrayList<>();
for (Piece boardpieces : boardPiece()) {
for (Coordinate coordinate : makeDirections()) {
surroundings.add(new Coordinate(boardpieces.getCoordinate().getRow() + coordinate.getRow(), boardpieces.getCoordinate().getColumn() + coordinate.getColumn()));
}
}
return surroundings;
}

public List<Coordinate> makeDirections(){
directions.add(new Coordinate(1,-1));
directions.add(new Coordinate(-1,1));
directions.add(new Coordinate(-1,0));
directions.add(new Coordinate(1,0));
directions.add(new Coordinate(0,-1));
directions.add(new Coordinate(0,1));
return directions;
}

棋盘是棋盘上具有坐标的棋子。没有坐标的棋盘不应被其他灰色棋子包围。在我的抽屉里,我编写了以下代码:

public void drawEmptyPieces() {
for (Coordinate emptyPiece : emptyPieces) {
EmptyPiece emptyPiece1 = new EmptyPiece(new Coordinate(emptyPiece.getRow(), emptyPiece.getColumn()));
emptyPiece1.setFill(Color.LIGHTGRAY);
emptyPiece1.setStroke(Color.BLACK);
gameField.getChildren().add(emptyPiece1);
}
}

我试图避免在棋盘上绘制灰色碎片:

public void drawEmptyPieces() {
for (Coordinate emptyPiece : emptyPieces) {
for (Piece pieceObjects : pieces){
if (pieceObjects.getCoordinate().getRow() != emptyPiece.getRow() && pieceObjects.getCoordinate().getColumn() != emptyPiece.getRow()){
EmptyPiece emptyPiece1 = new EmptyPiece(emptyPiece);
emptyPiece1.setFill(Color.LIGHTGRAY);
emptyPiece1.setStroke(Color.BLACK);
gameField.getChildren().add(emptyPiece1);
}
}
}
}

但是这段代码不起作用。

最佳答案

我不知道您是否提供了足够的信息来回答您的问题。但这里有一些想法。

<小时/>

makeDirections() 要么损坏(缺少 directions 局部变量的声明),要么损坏,因为它不断添加 6 个新的 Cooperative 对象每次调用时都会有一个 directions 字段。无论哪种情况,它所做的工作都超出了需要。考虑一下:

private final static List<Coordinate> directions;

static {
List<Coordinate> dirs = new ArrayList<>();
dirs.add(new Coordinate(1,-1));
dirs.add(new Coordinate(-1,1));
dirs.add(new Coordinate(-1,0));
dirs.add(new Coordinate(1,0));
dirs.add(new Coordinate(0,-1));
dirs.add(new Coordinate(0,1));
directions = Collections.immutableList(dirs);
}

public static List<Coordinate> makeDirections() { // or getDirections()
return directions;
}
<小时/>

getSurroundings() 看起来它可以(会吗?)多次向周围环境添加相同的 坐标。如果一 block 位于[5,5],另一 block 位于[7,5],您将添加[5,5]+[1 ,0][7,5]+[-1,0] 到周围环境。甚至可能在 [6,5] 处有一 block 也会将 [5,5][7,5] 添加到周围环境中也是如此。

相反...

确保 Cooperative 实现 equalshashCode,因此具有相同行和列的两个 Cooperative 对象相等,并且两者都哈希为相同的值。然后,在 getSurroundings() 中使用:

Set<Coordinate> surroundings = new HashSet<>();

因此surroundings仅包含每个坐标一次。返回之前,您可以删除周围所有“占用”的坐标。

for (Piece piece : pieces) {
surroundings.remove(piece.getCoordinate());
}

您可以返回集合而不是列表,或者如果您想将其保留为列表:

return new ArrayList<>(surroundings);

如果没有包含现有棋子所在位置的重复项和坐标的“环境”,您可能会发现绘制棋盘变得非常非常容易。

<小时/>

除非您的游戏板的范围是无限的,否则您将创建超出板边缘的坐标对象。考虑将方法 getNeighbours() 添加到 Cooperative 类中:

class Coordinate { 
public Collection<Coordinate> getNeighbours() {
List<Coordinate> neighbours = new ArrayList<>(6);
for (Coordinate dir: getDirections()) {
Coordinate n = new Coordinate(getRow() + dir.getRow(), getColumn() + dir.getColumn());
if (n.isValid()) {
neighbours.add(n);
}
}
return neighbours;
}
}

然后 getSurroundings 变得更简单一点:

for (Piece boardpieces : boardPiece()) {
surroundings.addAll(boardpieces.getCoordinate().getNeighbours());
}

没有任何“环境”离开棋盘。

<小时/>

“方向”不是坐标。它们用于不同的事情。 坐标是棋盘上的一个位置,其中“方向”是相对偏移。该板可能有行和列值必须介于(例如)0 和 20 之间的约束;您的“方向”对象具有负行和列值;这将违反这些限制。这意味着如果给定的值错误,您无法在 Cooperative 的构造函数中添加适当的检查并抛出 new IllegalArgumentException("Invalid cocolumn")

我会为 Direction 对象创建一个新类。实际上,我会使用enum Direction { ... }。然后 Direction.values() 将返回所有方向的集合 - 您不需要自己创建该集合。这是一个比其他更改大得多的更改,并且可能会产生超出您提供的一小部分代码的影响。这是一个很好的改变,但可能需要做很多工作。

<小时/>

希望有帮助。

关于Java免费现货件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36361859/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com