Как получить старое положение частей тела змеи в Java - PullRequest
0 голосов
/ 09 октября 2019

Я сделаю все возможное, чтобы объяснить проблему. Так что в своей игре со змеями я пришел к тому, чего больше всего боялся - массиву. Итак, я сделал ArrayList, полный прямоугольников.

Затем я добавляю прямоугольник каждый раз, когда ем еду, и теперь я нахожусь в «зацикливающейся» части, где я должен зациклить разные прямоугольники.

Мне удалось добавить один прямоугольник к змее - я просто выбрал старое местоположение head.x и местоположение head.y, но оно оказалось в snakeParts.get(0).setLocation.

Проблема, с которой я столкнулсярисует остальную часть массива (который будет индексом от 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

Если вам нужен весь код - пожалуйста, спросите! Я подумал, что вам будет проще показать вам этот пример кода, потому что это единственная часть, которая влияет на то, чего я пытаюсь достичь.

Заранее спасибо!

1 Ответ

0 голосов
/ 09 октября 2019

Начните с конца и идите к голове, возьмите последнюю часть, установите ее положение там, где находится последний -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 (мы уменьшаемся на1, потому что snakeParts отсчитывается от 0, а не от 1), работает до тех пор, пока z больше-равно 0, и на каждом шаге уменьшает z на 1. Надеюсь, это помогает :) В вашем коде вы должны убедиться, что вы непытаясь получить доступ к индексам, меньшим или большим, чем массив.

...