我将尽力解释这个问题。因此,基本上我已经谈到了我最担心的蛇游戏-阵列。所以我要做的是一个充满矩形的ArrayList。
然后我每次吃食物时都会添加一个矩形,现在我处于“循环”部分,在这里我必须循环不同的矩形。
我成功地在蛇上添加了一个矩形-我只是将原来的head.x
位置和head.y
位置取而代之,但它取到了snakeParts.get(0).setLocation
中。
我遇到的问题是绘制数组的其余部分(将nr 1索引为无穷大)。
我似乎无法获得ArrayLists的其余旧职位。例如:我希望snakeParts.get(1)
获得snakeParts.get(0)
的旧位置,但是我似乎无法弄清楚该如何做。我想知道你们中有人可以帮我吗?
这里是受影响的代码部分:
repaint();
//Test
for(int z = 0; z < snakeParts.size(); z++) {
System.out.println(z); //Test printing
if(z == 0) {
snakeParts.get(z).setLocation(head.x, head.y); //Printing index 0
}
else {
snakeParts.get(z).setLocation(snakeParts.get(z - 1).getLocation());
//Takes all the indexes and puts them where the snakeParts.get(0) is. I want them to get longer - like the Snake game
}
//Loop different might solve the issue?
}
head.x += speedx;
head.y += speedy;
我正在JPanel中执行此操作,而我的ArrayList
是Rectangle类的数组,可以在这里找到:Rectangle Class
如果您想要完整的代码,请询问!我认为向您展示此代码示例会更容易,因为它是影响我要实现的目标的唯一部分。
提前感谢!
从头开始,朝头部前进,获得最后一部分,将其位置设置为last-1所在的位置。然后将last-1的位置设置为last-2所在的位置。重复该步骤,直到到达第二部分,将其位置设置为头部,然后移动头部。
编辑。这是前进与后退循环的样子:
for(int z = 0; z < snakeParts.size(); z++) {}
for(int z = snakeParts.size() - 1; z >= 0; z--){}
[第一个从0开始,到蛇形部分的大小增加1。第二个从蛇形部分的大小开始-1(由于蛇形部分从0开始计数,而不是从1开始计数,所以我们减小1),只要z等于0即可工作,并且在每一步将z减小1。希望有帮助:)在代码中,应确保您不尝试访问小于或大于数组的索引。