apatriarca ha scritto:Il tuo serpente si deve muovere indipendentemente dall'input da tastiera e in effetti è quello che succede per la maggior parte del tempo. Avrai quindi bisogno di una variabile da qualche parte che memorizza la direzione in cui devi spostare il serpente e nella gestione dell'input devi andare a cambiare, direttamente o indirettamente, il valore di questa variabile.
Ieri ho ragionato e ho modificato il programma. Ho creato dei valori boolean che mi indicano le 4 direzioni che sono inizializzati in false. Nel momento in cui premo un pulsante, a seconda della freccia premuta, una delle quattro direzioni diventa true. Questo metodo gestisce l'input.
Ho poi creato un altro metodo per il movimento che legge il valore true e a seconda di quale è, controlla il movimento del serpente che è salvato in un ArrayList(credo sia la cosa più conveniente). Il problema è che tutt'ora non riesco a far iniziare il movimento. Nonostante io premo una delle frecce, il serpente resta fermo. Allego codice.
protected void processKey(KeyEvent e){
switch(e.getKeyCode()) {
case (KeyEvent.VK_UP):
if(!basso) {
alto = true;
} else {
alto = false;
basso = true;
}
basso = false;
destra = false;
sinistra = false;
break;
case (KeyEvent.VK_DOWN):
if(!alto) {
basso = true;
}else {
basso = false;
alto = true;
}
alto = false;
destra = false;
sinistra = false;
break;
case (KeyEvent.VK_LEFT):
if(!destra) {
sinistra = true;
}else {
sinistra = false;
destra = true;
}
basso = false;
destra = false;
alto = false;
break;
case (KeyEvent.VK_RIGHT):
if(!sinistra) {
destra = true;
}else {
destra = false;
sinistra = true;
}
basso = false;
alto = false;
sinistra = false;
break;
}
}
protected void animateNext() {
int lunghezza = coordinatax.size();
if(alto) {
coordinatax.remove(lunghezza - 1);
coordinatay.remove(lunghezza - 1);
coordinatax.add(0, coordinatax.get(0)-1);
coordinatay.add(0, coordinatay.get(0));
}
if(basso) {
coordinatax.remove(lunghezza - 1);
coordinatay.remove(lunghezza - 1);
coordinatax.add(0, coordinatax.get(0)+1);
coordinatay.add(0, coordinatay.get(0));
}
if(destra) {
coordinatax.remove(lunghezza - 1);
coordinatay.remove(lunghezza - 1);
coordinatax.add(0, coordinatax.get(0));
coordinatay.add(0, coordinatay.get(0)+1);
}
if(sinistra) {
coordinatax.remove(lunghezza - 1);
coordinatay.remove(lunghezza - 1);
coordinatax.add(0, coordinatax.get(0));
coordinatay.add(0, coordinatay.get(0)-1);
}
}