[Java] Movimento oggetto con input da tastiera

Messaggioda Zstar » 27/12/2020, 09:58

Salve a tutti, mi sto cimentando nella programmazione del videogioco Snake. Ho creato un pannello per la visualizzazione degli elementi e ora devo creare una classe che mi controlli il movimento. Il serpente ha lunghezza 5 inizialmente. Premendo la freccia in alto, ad esempio, l'ultima pallina deve essere eliminata e deve essere disegnata di un quadratino più in alto. Ho scritto questo codice per tradurre l'informazione da "input da tastiera" in "movimento per il serpente".

protected void processKey(KeyEvent e){
switch(e.getKeyCode()) {
case (KeyEvent.VK_UP):
muoviAlto(frame);
case (KeyEvent.VK_DOWN):
muoviBasso(frame);
case (KeyEvent.VK_LEFT):
muoviSinistra(frame);
case (KeyEvent.VK_RIGHT):
muoviDestra(frame);
}
}

Ora però dovrei scrivere qualcosa che effettivamente faccia iniziare l'animazione e quindi faccia muovere il serpente in una direzione finchè io non premo un'altra freccia...
Zstar
New Member
New Member
 
Messaggio: 26 di 92
Iscritto il: 28/01/2020, 09:40

Re: [Java] Movimento oggetto con input da tastiera

Messaggioda apatriarca » 27/12/2020, 22:20

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.
apatriarca
Moderatore
Moderatore
 
Messaggio: 5524 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: [Java] Movimento oggetto con input da tastiera

Messaggioda Zstar » 28/12/2020, 09:56

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);
}
}
Zstar
New Member
New Member
 
Messaggio: 27 di 92
Iscritto il: 28/01/2020, 09:40

Re: [Java] Movimento oggetto con input da tastiera

Messaggioda DeltaEpsilon » 29/12/2020, 15:54

Per favore, racchiudi il tuo codice all'interno dei tag code...

Immagine
É così dichiarato che è celato! Non c'è nulla di più sfuggente dell'ovvio. (Sherlock Holmes)
Avatar utente
DeltaEpsilon
Average Member
Average Member
 
Messaggio: 289 di 648
Iscritto il: 08/04/2019, 18:58


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite