当前位置: 首页 > 知识库问答 >
问题:

创建可用坐标的数组列表

司徒骞尧
2023-03-14

我目前正在制作一个蛇游戏,我不希望苹果在我的蛇体内产卵。我试图通过这样做来解决这个问题:


    ArrayList<Coordinate> availableCoordinates = new ArrayList<>();

    public void Coordinates() {


        for (int i = 0; i < numberOfSquaresY; i++) {
            for (int j = 0; j < numberOfSquaresX; j++) {
                availableCoordinates.add(new Coordinate(j*squareSize, i*squareSize, snake.get(0).color));
            }
        }

        for(int i = 0; i < availableCoordinates.size()-1; i++) {
            for (int j = 0; j < snake.size() - 1; j++) {
                if (availableCoordinates.get(i).xPos == snake.get(j).xPos && availableCoordinates.get(i).yPos == snake.get(j).yPos){
                    availableCoordinates.remove(i);
                }
            }
        }

    }

然而,只有1个值被删除,即使应该是3个值被删除,我也不知道为什么。

共有2个答案

陶寒
2023-03-14

使用远程如果()从列表中删除。

import java.util.ArrayList;
import java.util.List;

public class RemoveItemsFromListIfPresentInAnotherList {
    public static void main(String[] args) {
        List<Coordinate> availableCoords = new ArrayList<>();
        List<Coordinate> snakeCoords = new ArrayList<>();
        
        //..

        for (Coordinate snakeCoordinate : snakeCoords) {
            availableCoords.removeIf(availableCoord ->
                    (snakeCoordinate.getX() == availableCoord.getX() && snakeCoordinate.getY() == availableCoord.getY()));
        }
    }
}

class Coordinate {
    private int x;
    private int y;

    public Coordinate(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public int getX() {
        return x;
    }

    public int getY() {
        return y;
    }
}
濮阳浩穰
2023-03-14

您遍历可用坐标并在此循环中从中删除项目。因此,在您删除一个元素后,以下元素会获得一个新索引。无论如何,循环索引会递增,因此您在删除后跳过一个元素。

我不会将所有坐标添加到列表中,然后删除使用过的坐标。填写可用坐标时,检查此字段是否可用:

for (int i = 0; i < numberOfSquaresY; i++) {
    for (int j = 0; j < numberOfSquaresX; j++) {
        Coordinate c = new Coordinate(j*squareSize, i*squareSize, snake.get(0).color);
        if (!snake.contains(c)) {
            availableCoordinates.add(c);
        }
    }
}

假设坐标#equals只检查xPosyPos

 类似资料:
  • 我正在做一个蛇游戏,当苹果在屏幕上随机繁殖时,它不应该在蛇里面繁殖。我试着为苹果寻找一个新的地方,当它们被放在蛇里面时,我会: 这不是一个好的解决方案,所以我正在寻找一个新的解决方案,我可以创建无效的coordiantes,即蛇坐标和其余的有效坐标。所以我可以从有效坐标中随机化苹果的新位置。但我不知道该如何编码

  • 问题内容: 假设我有三个任意的一维数组,例如: 这三个数组代表3D网格中的采样间隔,我想为所有相交构造一个三维矢量的一维数组,例如 订单实际上对此并不重要。生成它们的明显方法是: 所以问题是…有没有更快的方法?我看过但没有找到(可能只是找不到正确的Google关键字)。 我目前正在使用此: 但是我感觉好像错过了一些聪明的幻想的Numpy方式吗? 问题答案: 要在上述示例中使用numpy网格,将可以

  • 问题内容: 我有一个像这样的清单: 但是更大了,所以我需要一种有效的方法来使它变成像这样的树: 我不能使用诸如嵌套集之类的东西,也不能使用诸如becoas之类的东西,因为我可以在数据库中添加左右值。有任何想法吗? 问题答案: 哦,这就是我解决的方法:

  • 问题内容: 我如何用对象填充ArrayList,而内部的每个对象都不相同? 问题答案:

  • 问题内容: 我想要创建一个arraylist数组,如下所示: 但是它没有编译。我怎样才能做到这一点? 问题答案: 根据Oracle文档: “你不能创建参数化类型的数组” 相反,你可以执行以下操作: 正如汤姆·霍廷(Tom Hawting)的建议-定位线一样,最好这样做:

  • 我有以下代码,运行时会出现错误:TypeError:无法读取未定义的属性“split” 您可以在这里运行它。 我有数组,我想将它转换为数组的数组,首先在处拆分以分离数组,然后在处拆分以创建数组中的项。因此此列表将如下所示: [[data1,data2,data3],[data4,data5,data6],[data7,data8,data9]] 执行类似的操作,但当我尝试使用访问它时,它只给我第一