如何在Java中获得蛇形身体的旧位置

问题描述 投票:0回答:1

我将尽力解释这个问题。因此,基本上我已经谈到了我最担心的蛇游戏-阵列。所以我要做的是一个充满矩形的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

如果您想要完整的代码,请询问!我认为向您展示此代码示例会更容易,因为它是影响我要实现的目标的唯一部分。

提前感谢!

java jpanel
1个回答
0
投票

从头开始,朝头部前进,获得最后一部分,将其位置设置为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。希望有帮助:)在代码中,应确保您不尝试访问小于或大于数组的索引。

© www.soinside.com 2019 - 2024. All rights reserved.