Я пытаюсь сделать игру змеи, но у меня есть несколько проблем. У меня есть этот поток, который содержит игровой цикл, но он не работает. Это простая форма моего цикла, я упростил его, потому что сначала он не работал, но он еще не работает. Что происходит, так это то, что моя переменная state
сбрасывается до 0 после первого цикла, и я действительно не знаю, почему. Я пытаюсь так много способов исправить это, но я не могу найти проблему.Почему мой массив сбрасывается до 0 после каждого цикла?
О да, также не смотрите на небрежное начало моего метода запуска, я пытаюсь исправить вещи, и это становится довольно уродливым.
public void run() {
alive = true;
keyPressed = 2; // Right
keyPressedBefore = 2;
field = Gui.getPanelArray();
state = new int[20][20];
newstate = new int[20][20];
previous = new int[20][20];
coordw = new int[20*20];
coordh = new int[20*20];
length = 2;
width = height = 20;
for (int w = 0; w < 20; w++) {
for (int h = 0; h < 20; h++) {
state[w][h] = 0;
}
}
state[0][0] = 1;
render(state,field);
previous = state;
newstate = state;
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
loop();
}
private void loop() {
while (alive) {
for (int w = 0; w < 20; w++) {
for (int h = 0; h < 20; h++) {
newstate[w][h] = 0;
}
}
if (keyPressed == 0) {
for (int w = 0; w < 20; w++) {
for (int h = 0; h < 20; h++) {
if (state[w][h] == 1) {
newstate[w][h-1] = 1;
}
}
}
} else if (keyPressed == 1) {
for (int w = 0; w < 20; w++) {
for (int h = 0; h < 20; h++) {
if (state[w][h] == 1) {
newstate[w-1][h] = 1;
}
}
}
} else if (keyPressed == 2) {
for (int w = 0; w < 20; w++) {
for (int h = 0; h < 20; h++) {
if (state[w][h] == 1) {
newstate[w][h+1] = 1;
}
}
}
} else if (keyPressed == 3) {
for (int w = 0; w < 20; w++) {
for (int h = 0; h < 20; h++) {
if (state[w][h] == 1) {
newstate[w+1][h] = 1;
}
}
}
}
render(newstate, field);
state = newstate;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//keyPressedBefore = keyPressed;
}
}
Это устанавливает 'newstate' 0, я говорю о' state'. Я перезагружаю newstate, так что это проще в использовании, но состояние должно содержать записи, отличные от нулей. – tomishomo
@BorisVerwoerd Не после назначения 'newstate'' state'. –
Жаль, что я потерял тебя здесь. Если я правильно прочитал, 'newstate' будет установлен в 0, то заданные значения будут' state'. Тогда 'state' устанавливается равным' newstate', теперь у них все еще есть записи, отличные от нуля. Но теперь, когда я снова сказал «newstate» в 0, «состояние» также отличается, но почему? Я не равнялся им, когда 'newstate' все еще 0. – tomishomo