CIAO A TUTTI!!
Ho un problema non da poco... Sto cercando di mettere in funzione un gioco mongolo per ora ma che poi devo far diventare Snake. sono riuscito a far andare il controllo del movimento dei tasti, mi crea quella che poi sarà la parte del corpo che guida tutto il serpente ecc... ec...
L'unico problema è che mi va in errore durante l'esecuzione, probabilmente dentro il metodo run() c'è della gran roba che lo rende troppo pesante... Infatti come errore dice che è stackoverflow poi una marea di altri errori che non finisco mai.
Vi scrivo il codice il quale per il momento crea solo un quadrato e, se non desse errori, dovrebbe farlo muovere in continuazione nel senso del tasto che premo.
Mi sono posto anche un altro problema: non è che devo fare due thread diversi che fanno cose diverse (non so se si possa fare quindi non ho nemmeno cominciato a distruggere tutti il codice) , uno che controlla il tasto premuto e basta e uno che fa muovere nel senso del tasto e basta?? mi sembra che però la cos non si possa dividere...
vabbè! metto il codice e spero che voi sappiate + di me in questo campo
grazie
import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.awt.event.*;
public class Snake2 {
Movim mov;
JPanel pan;
JFrame F;
public Snake2(){
F=new JFrame("Snake");
F.setBounds(200,200,500,500);
F.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Movim mov = new Movim();
F.setBackground(Color.white);
mov.setFocusable(true);
F.add(mov);
F.setVisible(true);
Thread Runner=new Thread(mov);
Runner.start();
F.setVisible(true);
F.show();
}
public static void main(String[] arg){
Snake2 sn = new Snake2();
}
}
class Movim extends JPanel implements Runnable{
int x=100;
int y=100;
public void run(){
while(true){//pausa();
addKeyListener
(
new KeyAdapter()
{
public void keyTyped(KeyEvent ke){
while(ke.getKeyCode() == KeyEvent.VK_LEFT){
x--;
repaint();
}
while(ke.getKeyCode() == KeyEvent.VK_RIGHT){
x++;
repaint();
}
while(ke.getKeyCode() == KeyEvent.VK_UP){
y++;
repaint();
}
while(ke.getKeyCode() == KeyEvent.VK_DOWN){
y--;
repaint();
}
repaint();
}
}
);
}
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.fillRect(x,y,60,60);
}
public void pausa(){
try{Thread.sleep(50);}
catch(InterruptedException ite){System.out.println("Eccezione: " + ite.toString());}
}
}
Se copiando il codice nel compilatore vedere errori ditemelo, come lo ho io salvato non ce ne sono, magari ho fatto male il copia e incolla.
sono molto graditi suggerimenti su come farlo in modo + snello e dinamico
ciao ciao e ancora grazie

Rispondi quotando


