Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR ha finalmente lanciato il suo nuovo flagship: Magic 8 Pro. Lo abbiamo provato a fondo in queste settimane e ve lo raccontiamo nella nostra recensione completa. HONOR rimane fedele alle linee della versione precedente, aggiungendo però un nuovo tasto dedicato all'AI. Ma è al suo interno che c'è la vera rivoluzione grazie al nuovo Snapdragon 8 Elite Gen 5 e alla nuova MagicOS 10
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Le webcam Insta360 Link 2 Pro e Link 2C Pro sono una proposta di fascia alta per chi cerca qualità 4K e tracciamento automatico del soggetto senza ricorrere a configurazioni complesse. Entrambi i modelli condividono sensore, ottiche e funzionalità audio avanzate, differenziandosi per il sistema di tracciamento: gimbal a due assi sul modello Link 2 Pro, soluzione digitale sul 2C Pro
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70 porta il concetto di smartphone ultrasottile su un terreno più concreto e accessibile: abbina uno spessore sotto i 6 mm a una batteria di capacità relativamente elevata, un display pOLED da 6,7 pollici e un comparto fotografico triplo da 50 MP. Non punta ai record di potenza, ma si configura come alternativa più pragmatica rispetto ai modelli sottili più costosi di Samsung e Apple
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 12-05-2005, 21:53   #1
3nigma666
Senior Member
 
L'Avatar di 3nigma666
 
Iscritto dal: Jan 2005
Città: A casa mia
Messaggi: 825
[JAVA] repaint();

Salve,
questo post rtiguarda sempre lo stesso progetto rierito al post:
[JAVA] gestione degli eventi
I problemi relativi agli eventi sono stati risolti grazie anke all'aiuto della com.Ora pero' ho un altro problema abb. gravoso , dal quale non riesco a districarmi.
tutto cio ke riguarda l'implementazione dei movimenti la gestione della mappa e delle palline è implementato correttamente (manca ancora una gestione urti tra palline e serpente,ma è cosa da poco)
Il problema riguarda il ridisegno del serpente ogni qualvolta incremento la posizione del serpente. Ho trovato due soluzioni:

1) la funzione enjoy() ke contiene il codice relativo allo spostamento del serpente (nella classe Panels) o la richiamo nella funzione paintcomponent (in questo caso il serpente si sposta,è vero, ma solo se metto in secondo piano la finestra o se ridimensiono la stessa.Inoltre essendo un procedimento automatico il richiamo di paintcomponent() non ho alcun tipo di controllo su di esso.

2) richiamare la funzione enjoy() nel costruttore di Panels,ma qua non capisco il motivo per il quale sembra ke nn avvenga mai il richiamo al ridisegno!

vi posto il codice per intero

Codice:
//////////////////////// DrawFrame.java /////////////////////////

import javax.swing.*;
import java.awt.*;
import java.util.*;
import java.awt.event.*;
import java.awt.geom.*;

public class DrawFrame
{
	public static void main (String[] args)
	{
	    SnakeFrame frame = new SnakeFrame();
	    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	    frame.setVisible(true);
    }    
}


class SnakeFrame extends JFrame
{
  public SnakeFrame()
  {
      Toolkit kit = Toolkit.getDefaultToolkit();
      Dimension screenSize = kit.getScreenSize();
      int screenHeight = screenSize.height;
      int screenWidth = screenSize.width;
      setSize(screenWidth / 2,screenHeight / 2);
      setLocation (screenWidth / 4, screenHeight / 4);
      setTitle("Snake Beta Vers. 0.1 By Valerio Bignardi");
      Panels panel = new Panels();
      add(panel);
    }    
}   


/////////////////////// Panels.java /////////////////////////////

import javax.swing.*;
import java.awt.*;
//import java.util.*;
import java.awt.event.*;
import java.awt.geom.*;

public class Panels extends JPanel implements KeyListener
{
  public int keyCode;
  
  private Timer t;
  int i =0;
  int j = 0;
  private Nodo temp;
  private Snake snake;
  private Mappa mappa;
  private Ball ball;
  Graphics2D g2;
  boolean init = true;
  
  boolean Init = true;
   public Panels()
   {
       addKeyListener(this);  // registrazione del listener
       setFocusable(true);
       init(); 
       enjoy();
       
        // ...  
      
   }
    /* implementazione del listener */
    public void keyPressed (KeyEvent event)  { 
        keyCode = event.getKeyCode(); 
       // System.out.println("valore"+keyCode);
    } 
    public void keyTyped(KeyEvent e) { }
    public void keyReleased(KeyEvent e) { }


    public void init ()
    { 
      //------- ACQUISISCO INFORMAZIONI SCHERMO UTENTE ----------  
        Toolkit kit = Toolkit.getDefaultToolkit();
        Dimension screenSize = kit.getScreenSize();
        int screenHeight = screenSize.height;
        int screenWidth = screenSize.width;
      //------------- CREO LA MAPPA ----------------  
        int map_leftX  =(screenWidth  / 8) -55;
        int map_topY   =(screenHeight / 8) -50;
        int map_width  = screenWidth  / 3;
        int map_height = screenHeight / 3;
        mappa = new Mappa(map_leftX,map_topY,map_width,map_height);
       
      //------------- CREO IL SERPENTE -------------- 
        int S_width = 10;
        int S_height = 10;
        int S_leftX = screenWidth / 4 - 30;
        int S_topY = screenHeight / 4 - 40;
       
            snake = new Snake(S_width,S_height,S_leftX,S_topY);
            snake.Create_Snake(5,snake.testa(),S_leftX,S_topY);
       
      //------------- CREO LA PALLINA ----------------- 
        ball = new Ball(10,10);
        ball.Gen_Coo(snake.testa(),5,mappa,screenWidth / 3,screenHeight / 3);
             
    }    
        
    public void paintComponent(Graphics g)
    { 
        super.paintComponent(g);
    //-----------------INIZIALIZZAZIONE AREA DI GIOCO-----------------
        g2 = (Graphics2D) g;
        g2.drawString("SNAKE Beta Vers. 0.01 Valerio Bignardi",20,20);
        //--------DISEGNO LA MAPPA-----------
        
        Rectangle2D map = new Rectangle.Double(mappa.leftX(),mappa.topY(),mappa.width(),mappa.height());
        g2.draw(map);
        //--------DISEGNO IL SERPENTE-------------
        temp = snake.testa();
                    while (temp.succ() != null)
                    {
                        Rectangle2D rect = new Rectangle2D.Double(temp.leftX(),temp.topY(),temp.width(),temp.height());
                        g2.draw(rect);
                        
                        temp = temp.succ();
                    }//end while
       
        //----------DISEGNO LE PALLINE-----
        Rectangle2D bal = new Rectangle2D.Double(ball.leftX(),ball.topY(),ball.width(),ball.height());
        g2.setPaint(Color.RED);
        g2.fill(bal);
        g2.draw(bal);
        //ridisegna il tutto
        
    }		 

       
 //-------------------INIZIO IL GIOCO-------------------
    
     public void enjoy(){
         temp = snake.testa();
       switch (keyCode){
            case KeyEvent.VK_UP    :   //verifico se sono fuori dalla mappa
                                      
                                       if ( temp.leftX() <= mappa.leftX() || temp.leftX() >= (mappa.leftX() + mappa.width()) || temp.topY() <= mappa.topY() || temp.topY() >= (mappa.topY() + mappa.height()))
                                        {
                                         //devo implementare la comunicazione di GAME OVER
                                        }
                                        else
                                        {
                                            temp = snake.moveto(1,snake);
                                            snake.C_testa(temp);
                                         }
                                        while (temp.succ() != null)
                                        {
                                           /* Rectangle2D rect = new Rectangle2D.Double(temp.leftX(),temp.topY(),temp.width(),temp.height());
                                            g2.setPaint(Color.BLACK);
                                            g2.draw(rect);
                                            repaint(0,0,800,600);*/
                                            j++;
                                            //Informazioni di Debug da eliminare
                                            System.out.println("coordinata Nodo "+j+" leftX :"+temp.leftX());
                                            System.out.println("coordinata Nodo "+j+" topY :"+temp.topY());
                                            
                                            temp = temp.succ();
                                            //contatore per Debug interno: da eliminare
                                            if (temp.succ() == null)
                                            j = 0;
                                        } 
                                  
                                  
                                        
                                     break;
                                     
            case KeyEvent.VK_DOWN  : //System.out.println("Coordinate prima del movimento");
                                     while (temp.succ() != null)
                                     {
                                       //  System.out.println("coordinata Nodo "+i+" leftX :"+temp.leftX());
                                       //  System.out.println("coordinata Nodo "+i+" topY :"+temp.topY());
                                         temp = temp.succ();
                                     }    
                                         
                                     
                                        temp = snake.moveto(2,snake);
                                        snake.C_testa(temp);
                                        i++;
                                       // System.out.println("Coordinate dopo il movimento numero "+i);
                                        while (temp.succ() != null)
                                        {
                                            Rectangle2D rect = new Rectangle2D.Double(temp.leftX(),temp.topY(),temp.width(),temp.height());
                                            g2.setPaint(Color.BLACK);
                                            g2.draw(rect);
                                            repaint(0,0,800,600);
                                            j++;
                                            //Informazioni di Debug da eliminare
                                         //   System.out.println("coordinata Nodo "+j+" leftX :"+temp.leftX());
                                         //   System.out.println("coordinata Nodo "+j+" topY :"+temp.topY());
                                           
                                            temp = temp.succ();
                                            //contatore per Debug interno: da eliminare
                                            if (temp.succ() == null)
                                            j = 0;
                                        } 
                                  
                                        
                                     break;
                                     
            case KeyEvent.VK_LEFT  : //System.out.println("Coordinate prima del movimento");
                                     while (temp.succ() != null)
                                     {
                                       //  System.out.println("coordinata Nodo "+i+" leftX :"+temp.leftX());
                                       //  System.out.println("coordinata Nodo "+i+" topY :"+temp.topY());
                                         temp = temp.succ();
                                     }    
                                         
                                     
                                        temp = snake.moveto(3,snake);
                                        snake.C_testa(temp);
                                        i++;
                                       // System.out.println("Coordinate dopo il movimento numero "+i);
                                        while (temp.succ() != null)
                                        {
                                            Rectangle2D rect = new Rectangle2D.Double(temp.leftX(),temp.topY(),temp.width(),temp.height());
                                            g2.setPaint(Color.BLACK);
                                            g2.draw(rect);
                                            repaint();
                                            j++;
                                            //Informazioni di Debug da eliminare
                                         //   System.out.println("coordinata Nodo "+j+" leftX :"+temp.leftX());
                                         //   System.out.println("coordinata Nodo "+j+" topY :"+temp.topY());
                                           
                                            temp = temp.succ();
                                            //contatore per Debug interno: da eliminare
                                            if (temp.succ() == null)
                                            j = 0;
                                        } 
                                  
                                        
                                     break;
                                     
            case KeyEvent.VK_RIGHT : //System.out.println("Coordinate prima del movimento");
                                     while (temp.succ() != null)
                                     {
                                       //  System.out.println("coordinata Nodo "+i+" leftX :"+temp.leftX());
                                       //  System.out.println("coordinata Nodo "+i+" topY :"+temp.topY());
                                         temp = temp.succ();
                                     }    
                                         
                                     
                                        temp = snake.moveto(4,snake);
                                        snake.C_testa(temp);
                                        i++;
                                       // System.out.println("Coordinate dopo il movimento numero "+i);
                                        while (temp.succ() != null)
                                        {
                                            Rectangle2D rect = new Rectangle2D.Double(temp.leftX(),temp.topY(),temp.width(),temp.height());
                                            g2.setPaint(Color.BLACK);
                                            g2.draw(rect);
                                            repaint(0,0,800,600);
                                            j++;
                                            //Informazioni di Debug da eliminare
                                       //     System.out.println("coordinata Nodo "+j+" leftX :"+temp.leftX());
                                        //    System.out.println("coordinata Nodo "+j+" topY :"+temp.topY());
                                           
                                            temp = temp.succ();
                                            //contatore per Debug interno: da eliminare
                                            if (temp.succ() == null)
                                            j = 0;
                                        } 
                                  
                                        
                                     break;
        }//End switch
     
        
    }//End Enjoy
    
      
}


///////////////////////// Snake.java //////////////////////////////

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Snake extends Nodo
{
  private Nodo testa; //inizializzo un oggetto testa di tipo Nodo
  private Nodo temp;
  
  public Snake(int width,int height,int leftX,int topY)
    {
     super(width,height,leftX,topY); //richiamo il costruttore della superclasse
     
     Nodo nodo = new Nodo(width,height,leftX,topY); //Creo un nuovo nodo
     nodo.C_leftX(leftX);
     nodo.C_topY(topY);
     testa = nodo; //assegno a testa lo stesso reference di nodo cosi entrambi puntano allo stesso indiz. d memoria
     
    }     
//-------------------------------------------------
//  Idea della struttura del serpente
//  |------------ |    | ----------- |
//  |testa | succ | -> | nodo | succ | -> null
//  |-------------|    | ----------- |
//
//-------------------------------------------------    

//------------------------------------------
// Name : Create_Snake
// Desc : Crea un serpente iniziale di 5 elementi
// ToDo : Nulla
//--------------------------------------------------

public void Create_Snake(int max,Nodo temp,int leftX,int topY){
    for (int i = 1;i<=max;i++){
    temp.C_leftX(leftX + temp.width()*i);//imposto il nodo successivo adiacente al nodo precedente
    temp.C_succ(new Nodo(10,10,leftX,topY));//assegno al puntatore del nodo successivo un nuovo Nodo
    temp = temp.succ();//faccio diventare temp il nuovo nodo
    }
}//End Create_Snake   
//-----------------------------------------
// Name : moveto
// Desc : Funzione ke muove il serpente tramite lo switch sull variabile direction
// Legenda : direction : 1 = SU
//                       2 = GIU
//                       3 = SX
//                       4 = DX
// ToDo : terminare di implementare il movimento
//----------------------------------------------------------------


public Nodo moveto(int direction,Snake snake)
{
  temp = snake.testa();
  Nodo temp1 = temp.succ();
  
  {
               if ((temp. topY() - 10)  != temp1.topY()) //se il NON serpente si sviluppa verso l'alto
               {
                   snake.testa = new Nodo(10,10,temp.leftX(),temp.topY() - 10); //Alla testa assegno un nuovo nodo
                   snake.testa.C_succ(temp);//faccio puntare alla nuova testa la vecchia testa  
                   temp = snake.testa;//assegno a temp la nuova testa
                   temp1 = temp.succ();//assegno a temp1 il successivo a temp
                   while (temp1.succ() != null)
                   {
                       temp = temp.succ(); //passa all'elenmento i-esimo + 1
                       temp1 = temp1.succ();//passa all'elemento i-esimo + 2
                       //cancellazione nodo coda
                       if (temp1.succ() == null)
                        temp.C_succ(null); 
                   }  
                }
  }            
  if (direction == 2)
  {
              if ((temp.topY() + 10)  != temp1.topY()) //se il NON serpente si sviluppa verso l'alto
               {
                   snake.testa = new Nodo(10,10,temp.leftX(),temp.topY()+ 10); //Alla testa assegno un nuovo nodo
                   snake.testa.C_succ(temp);//faccio puntare alla nuova testa la vecchia testa  
                   temp = snake.testa;//assegno a temp la nuova testa
                   temp1 = temp.succ();//assegno a temp1 il successivo a temp
                   while (temp1.succ() != null)
                   {
                       temp = temp.succ();
                       temp1 = temp1.succ();
                       if (temp1.succ() == null)
                        temp.C_succ(null);
                   }  
                }
  }             
  if (direction == 3)
  {
                if ((temp.leftX() - 10)  != temp1.leftX()) //se il NON serpente si sviluppa verso l'alto
               {
                   snake.testa = new Nodo(10,10,temp.leftX() - 10,temp.topY()); //Alla testa assegno un nuovo nodo
                   snake.testa.C_succ(temp);//faccio puntare alla nuova testa la vecchia testa  
                   temp = snake.testa;//assegno a temp la nuova testa
                   temp1 = temp.succ();//assegno a temp1 il successivo a temp
                   while (temp1.succ() != null)
                   {
                       temp = temp.succ();
                       temp1 = temp1.succ();
                       if (temp1.succ() == null)
                       temp.C_succ(null);
                   }  
                }
   }
   if (direction == 4)
   {
                if ((temp.leftX() + 10)  != temp1.leftX()) //se il NON serpente si sviluppa verso l'alto
               {
                   snake.testa = new Nodo(10,10,temp.leftX() + 10,temp.topY()); //Alla testa assegno un nuovo nodo
                   snake.testa.C_succ(temp);//faccio puntare alla nuova testa la vecchia testa  
                   temp = snake.testa;//assegno a temp la nuova testa
                   temp1 = temp.succ();//assegno a temp1 il successivo a temp
                   while (temp1.succ() != null)
                   {
                       temp = temp.succ();
                       temp1 = temp1.succ();
                       if (temp1.succ() == null)
                        temp.C_succ(null);
                   }  
                }           
   } 
   return snake.testa;
}   

public void C_testa(Nodo nodo)
{
 this.testa = nodo;
}
public Nodo testa()
{
    return testa;
}

}


/////////////////////////// Nodo.java ///////////////////////////

public class Nodo{
    private int height;//ALtezza
	private int width;//larghezza
	private int leftX;//Coordinata X angolo sx superiore
	private int topY;//Coordinata angolo SX superiore
	private Nodo succ; // Puntatore a Nodo successivo

	public Nodo(int width,int height,int leftX,int topY)
	{
	    this.leftX  = leftX;
	    this.topY   = topY;
	    this.height = height;
		this.width  = width;
		this.succ   = null; //inizializzo a null il puntatore all'oggetto successivo
	}//End void Nodo()

	//------------------------------
	// Name : C_Height
	// Desc : cambia il valore della variabile height
	// ToDo : Nulla ;)
	//------------------------------------------------
	
	   public void C_height(int height){ 
       this.height = height;
    }
    
    //------------------------------
	// Name : C_width
	// Desc : cambia il valore della variabile width
	// ToDo : Nulla ;)
	//------------------------------------------------
    public void C_width(int width){
        this.width = width;
    }
    
    //------------------------------
	// Name : C_left
	// Desc : cambia il valore della variabile leftX
	// ToDo : Nulla ;)
	//------------------------------------------------
    
    public void C_leftX(int leftX){
        this.leftX = leftX;
    }
    
    //------------------------------
	// Name : C_topY
	// Desc : cambia il valore della variabile topY
	// ToDo : Nulla ;)
	//------------------------------------------------
    
    public void C_topY(int topY){
        this.topY = topY;
    }

    //------------------------------
	// Name : C_succ
	// Desc : Cambia l'indirizzo di memoria al quale punta succ
	// ToDo : Nulla ;)
	//------------------------------------------------
    
    public void C_succ(Nodo succ){
        this.succ = succ;
    }
    
//FUNZIONI KE RITORNATO I VALORI DELLE VARIABILI PRIVATE

    public int height(){
        return height;
    }
    
    public int width(){
        return width;
    }
    
    public int leftX(){
        return leftX;
    }
    
    public int topY(){
        return topY;
    }
     
    public Nodo succ(){
        return succ;
    }
    
}//End class Nodo

/////////////////////////////// Mappa.java ///////////////////////////////

public class Mappa
{
    private int height;//ALtezza
	private int width;//larghezza
	private int leftX;//Coordinata X angolo sx superiore
	private int topY;
	public Mappa(int leftX,int topY,int width,int height)
	{
	    this.leftX = leftX;
	    this.topY = topY;
	    this.width = width;
	    this.height = height;
	}
	
	public int leftX()
	{
		// put your code here
		return leftX;
	}
	public int topY()
	{
		// put your code here
		return topY;
	}
	public int width()
	{
		// put your code here
		return width;
	}
	public int height()
	{
		// put your code here
		return height;
	}
	
	
	
}


///////////////////////// Ball.java /////////////////////////////////

import javax.swing.*;
import java.awt.*;
import java.util.*;
import java.awt.event.*;
import java.awt.geom.*;

public class Ball
{
  private long leftX;
  private long topY;
  private long width;
  private long height;
  RandomGenerator r = new RandomGenerator(123456789);
  
  public Ball(int width,int height)
  {
     
      this.width = width;
      this.height = height;
      leftX = 0;
      topY = 0;
   }
   //--------------------------------------------------------
   // Name : Gen_Coo
   // Desc : Genera delle Coordinate Random per le palline
   //        Inoltre ad ogni generazione viene controllato ke le coordinate non corrispondano con un nodo
   //        dello snake e ke le coordinate non siano fuori dall'area della Mappa
   // ToDo : Nulla ;)
   // Vers : 1.0
   // Bugs : Per Ora nulla :D
   //-------------------------------------------------------------------------------------------
   public void Gen_Coo(Nodo nodo,int max,Mappa mappa,int screenWidth,int screenHeight)
   {
       Nodo temp = nodo; // Nodo temp necessario per scorrere la lista dei nodi del serpente
       boolean Coo_ok = true; //inzializzo a true la variabile
       leftX = Math.round(r.get() * screenHeight);//Genero le coordinate con la funzione random
       topY  = Math.round(r.get() * screenWidth );
       while (temp.succ() != null) //fino a quando non arrivo alla fine della lista cicla
           {
               do
               {     // se le coordinate corrispondono a quelle del serpente o se sono fuori dalla mappa
                if (((temp.leftX() == leftX) && (temp.topY() == topY)) || leftX <= mappa.leftX() || leftX >= (mappa.leftX() + mappa.width()) || topY <= mappa.topY() || topY >= (mappa.topY() + mappa.height()) )
                {
                    Coo_ok = false; // assegna condizione di falsita
                    leftX = Math.round(r.get() * screenHeight); // rogenera le coordinate
                    topY  = Math.round(r.get() * screenWidth); //rigenera le coordinate
                }//End if
                else//altrimenti dai il nulla hosta per uscire dal ciclo
                    Coo_ok = true;
             } while (Coo_ok != true /*|| i <= 50*/); //continua fino a quando le coordinate non sono corrette
             temp = temp.succ();//Passo all'elemento successivo del serpente
            }
     }//End Gen_Coo
    
    
    public double height(){
        return height;
    }
    
    public double width(){
        return width;
    }
    
    public double leftX(){
        return leftX;
    }
    
    public double topY(){
        return topY;
    }     
     
}   

////////////////////// RandomGenerato.java ////////////////////////////

//
// Classe che genera numeri casuali,
// migliore del random di sistema
//
public class RandomGenerator {
   //
   // get(): restituisce un numero compreso tra 0 e 1
   //
   public double get()
   {
      //
      // Costanti
      //
      final int a = 16087;
      final int m = 2147483647;
      final int q = 127773;
      final int r = 2836;

      //
      // Variabili
      //
      double lo, hi, test;

      hi = Math.ceil(seed / q);
      lo = seed - q * hi;
      test = a * lo - r * hi;
      if (test < 0.0) {
         seed = test + m;
      } else {
         seed = test;
      } /* endif */
      return seed / m;
   }

   //
   // getSeed(): restituisce il valore corrente del seme
   //
   public double getSeed()
   {
      return seed;
   }

   //
   // setSeed(s): imposta il valore del seme a s
   //
   public void setSeed(double s)
   {
      seed = s;
   }

   //
   // costruttore della classe, genera un'istanza di RandomGenerator,
   // fissando il seme iniziale a s.
   //
   public RandomGenerator(double s)
   {
      seed = s;
   }

   private double seed;
}
Ecco questo è il codice...se qualcuno puo illuminare ne sarei eternamente grato

Ultima modifica di 3nigma666 : 12-05-2005 alle 21:57.
3nigma666 è offline   Rispondi citando il messaggio o parte di esso
Old 13-05-2005, 01:04   #2
3nigma666
Senior Member
 
L'Avatar di 3nigma666
 
Iscritto dal: Jan 2005
Città: A casa mia
Messaggi: 825
HO implementato la classe panel in maniera differente introducento i thread,in maniera tale da rallentare il ciclo while ke all'interno contiene il movimento del serpente....solo ke nn capisco perke ora non mi venga piu richiamato il metodo paintComponent!!! perke!! nn capisco il perke visto ke cmq il thread ke ho creato si occupa solo di far partire il metodo enjoy() ke si occupa d muovere il serpente,e nn va minimamente ad intaccare il metodo paintComponent!
vi posto il codice della classe Panels

Codice:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;

public class Panels extends JPanel implements KeyListener
{
  public int keyCode = 1;
  private Timer t;
  int i =0;
  int j = 0;
  private Nodo temp;
  private Snake snake;
  private Mappa mappa;
  private Ball ball;
  Graphics2D g2;
  boolean init = true;
  boolean exit = false; 
  boolean Init = true;
  
  public Panels()
   {
       addKeyListener(this);  // registrazione del listener
       setFocusable(true);
      // ThreadsMove T1 = new ThreadsMove();
       init();
       ThreadsMove T = new ThreadsMove();
       //new Thread(T1).run();
       new Thread(T).run();
      
       
      // enjoy();
        // ...  
   }
    
    /* implementazione del listener */
    public void keyPressed (KeyEvent event)  { 
        keyCode = event.getKeyCode(); 
       // System.out.println("valore"+keyCode);
    } 
    
    public void keyTyped(KeyEvent e) { }
    
    public void keyReleased(KeyEvent e) { }


    public void init ()
    { 
      //------- ACQUISISCO INFORMAZIONI SCHERMO UTENTE ----------  
        Toolkit kit = Toolkit.getDefaultToolkit();
        Dimension screenSize = kit.getScreenSize();
        int screenHeight = screenSize.height;
        int screenWidth = screenSize.width;
      //------------- CREO LA MAPPA ----------------  
        int map_leftX  =(screenWidth  / 8) -55;
        int map_topY   =(screenHeight / 8) -50;
        int map_width  = screenWidth  / 3;
        int map_height = screenHeight / 3;
        mappa = new Mappa(map_leftX,map_topY,map_width,map_height);
       
      //------------- CREO IL SERPENTE -------------- 
        int S_width = 10;
        int S_height = 10;
        int S_leftX = screenWidth / 4 - 30;
        int S_topY = screenHeight / 4 - 40;
       
            snake = new Snake(S_width,S_height,S_leftX,S_topY);
            snake.Create_Snake(5,snake.testa(),S_leftX,S_topY);
       
      //------------- CREO LA PALLINA ----------------- 
        ball = new Ball(10,10);
        ball.Gen_Coo(snake.testa(),5,mappa,screenWidth / 3,screenHeight / 3);
             
    } //End init    
        
    public void paintComponent(Graphics g)
    { 
        super.paintComponent(g);
    //-----------------INIZIALIZZAZIONE AREA DI GIOCO-----------------
        System.out.println("sno dentro al paint");
        g2 = (Graphics2D) g;
        g2.drawString("SNAKE Beta Vers. 0.01 Valerio Bignardi",20,20);
        //--------DISEGNO LA MAPPA-----------
        
        Rectangle2D map = new Rectangle.Double(mappa.leftX(),mappa.topY(),mappa.width(),mappa.height());
        g2.draw(map);
        //--------DISEGNO IL SERPENTE-------------
        temp = snake.testa();
                    while (temp.succ() != null)
                    {
                        Rectangle2D rect = new Rectangle2D.Double(temp.leftX(),temp.topY(),temp.width(),temp.height());
                        g2.draw(rect);
                        temp = temp.succ();
                    }//end while
       
        //----------DISEGNO LE PALLINE-----
        Rectangle2D bal = new Rectangle2D.Double(ball.leftX(),ball.topY(),ball.width(),ball.height());
        g2.setPaint(Color.RED);
        g2.fill(bal);
        g2.draw(bal);
        //ridisegna il tutto
        
        
    }        

       
        //-------------------INIZIO IL GIOCO-------------------
    
public void enjoy(){
    repaint();
    temp = snake.testa();
    do
    {
       // System.out.println("sono dentro il while. Exit vale: "+exit);
     System.out.println("sono dentro al do");
     switch (keyCode){
        case KeyEvent.VK_UP :
                            if ( temp.leftX() <= mappa.leftX() || temp.leftX() >= (mappa.leftX() + mappa.width()) || temp.topY() <= mappa.topY() || temp.topY() >= (mappa.topY() + mappa.height()))
                            {
                               exit = true;//usci dal programma per ora
                               System.out.println("Game Over... PIRLA");
                               //devo implementare la comunicazione di GAME OVER
                            }
                            else
                            {
                                temp = snake.moveto(1,snake);
                                snake.C_testa(temp);
                            }
                            while (temp.succ() != null)
                            {
                             /* Rectangle2D rect = new Rectangle2D.Double(temp.leftX(),temp.topY(),temp.width(),temp.height());
                              g2.setPaint(Color.BLACK);
                              g2.draw(rect);
                              */
                             // repaint(0,0,800,600);
                                            j++;
                             //Informazioni di Debug da eliminare
                              try {
                                   System.out.println("sono nel prima del Thread");
                                  Thread.currentThread().sleep(100);
                                  System.out.println("sono dopo il Thread");
                                  
                                }
                                catch (InterruptedException e) {}
                             System.out.println("coordinata Nodo "+j+" leftX :"+temp.leftX());
                             System.out.println("coordinata Nodo "+j+" topY :"+temp.topY());
                                            
                             temp = temp.succ();
                             //contatore per Debug interno: da eliminare
                             if (temp.succ() == null)
                                     j = 0;
                                        } 
                                  
                                  
                                        
                                     break;
                                     
            case KeyEvent.VK_DOWN  : //System.out.println("Coordinate prima del movimento");
                                     while (temp.succ() != null)
                                     {
                                       //  System.out.println("coordinata Nodo "+i+" leftX :"+temp.leftX());
                                       //  System.out.println("coordinata Nodo "+i+" topY :"+temp.topY());
                                         temp = temp.succ();
                                     }    
                                         
                                     
                                        temp = snake.moveto(2,snake);
                                        snake.C_testa(temp);
                                        i++;
                                       // System.out.println("Coordinate dopo il movimento numero "+i);
                                        while (temp.succ() != null)
                                        {
                                            Rectangle2D rect = new Rectangle2D.Double(temp.leftX(),temp.topY(),temp.width(),temp.height());
                                            g2.setPaint(Color.BLACK);
                                            g2.draw(rect);
                                            repaint(0,0,800,600);
                                            j++;
                                            //Informazioni di Debug da eliminare
                                         //   System.out.println("coordinata Nodo "+j+" leftX :"+temp.leftX());
                                         //   System.out.println("coordinata Nodo "+j+" topY :"+temp.topY());
                                           
                                            temp = temp.succ();
                                            //contatore per Debug interno: da eliminare
                                            if (temp.succ() == null)
                                            j = 0;
                                        } 
                                  
                                        
                                     break;
                                     
            case KeyEvent.VK_LEFT  : //System.out.println("Coordinate prima del movimento");
                                     while (temp.succ() != null)
                                     {
                                       //  System.out.println("coordinata Nodo "+i+" leftX :"+temp.leftX());
                                       //  System.out.println("coordinata Nodo "+i+" topY :"+temp.topY());
                                         temp = temp.succ();
                                     }    
                                         
                                     
                                        temp = snake.moveto(3,snake);
                                        snake.C_testa(temp);
                                        i++;
                                       // System.out.println("Coordinate dopo il movimento numero "+i);
                                        while (temp.succ() != null)
                                        {
                                            Rectangle2D rect = new Rectangle2D.Double(temp.leftX(),temp.topY(),temp.width(),temp.height());
                                            g2.setPaint(Color.BLACK);
                                            g2.draw(rect);
                                            repaint();
                                            j++;
                                            //Informazioni di Debug da eliminare
                                         //   System.out.println("coordinata Nodo "+j+" leftX :"+temp.leftX());
                                         //   System.out.println("coordinata Nodo "+j+" topY :"+temp.topY());
                                           
                                            temp = temp.succ();
                                            //contatore per Debug interno: da eliminare
                                            if (temp.succ() == null)
                                            j = 0;
                                        } 
                                  
                                        
                                     break;
                                     
            case KeyEvent.VK_RIGHT : //System.out.println("Coordinate prima del movimento");
                                     while (temp.succ() != null)
                                     {
                                       //  System.out.println("coordinata Nodo "+i+" leftX :"+temp.leftX());
                                       //  System.out.println("coordinata Nodo "+i+" topY :"+temp.topY());
                                         temp = temp.succ();
                                     }    
                                         
                                     
                                        temp = snake.moveto(4,snake);
                                        snake.C_testa(temp);
                                        i++;
                                       // System.out.println("Coordinate dopo il movimento numero "+i);
                                        while (temp.succ() != null)
                                        {
                                            Rectangle2D rect = new Rectangle2D.Double(temp.leftX(),temp.topY(),temp.width(),temp.height());
                                            g2.setPaint(Color.BLACK);
                                            g2.draw(rect);
                                            repaint(0,0,800,600);
                                            j++;
                                            //Informazioni di Debug da eliminare
                                       //     System.out.println("coordinata Nodo "+j+" leftX :"+temp.leftX());
                                        //    System.out.println("coordinata Nodo "+j+" topY :"+temp.topY());
                                           
                                            temp = temp.succ();
                                            //contatore per Debug interno: da eliminare
                                            if (temp.succ() == null)
                                            j = 0;
                                        } 
                                  
                                        
                                     break;
        }//End switch
            try {
                    Thread.currentThread().sleep(1000);
                }
                catch (InterruptedException e) {}
    }while (exit != true);      
    }//End Enjoy
    
    private class ThreadsMove implements Runnable
    {
        public void run()
        {
            
            enjoy();
           
        }    
    }
 /*   
    private class ThreadsInit implements Runnable
    {
        public void run()
        {
            init();
           
        }    
    }*/
    
    
    
}
GRazie a tutti

3NiGm@666
3nigma666 è offline   Rispondi citando il messaggio o parte di esso
Old 14-05-2005, 13:45   #3
3nigma666
Senior Member
 
L'Avatar di 3nigma666
 
Iscritto dal: Jan 2005
Città: A casa mia
Messaggi: 825
nessunop puo aiutarmi pleasE?
3nigma666 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026 Display, mini PC, periferiche e networking: le n...
Le novità ASUS per il 2026 nel settore dei PC desktop Le novità ASUS per il 2026 nel settore de...
Bentornati nel 2007: le memorie DDR3 rin...
Stellantis aderisce ad AI4I e Fondazione...
Google Pixel 10a: prime conferme sul pre...
ISRO potrebbe lanciare la capsula Gagany...
Un nuovo leak conferma dimensioni e novi...
Steam Machine: requisiti Verified piu' s...
NVIDIA GeForce RTX 5070 Ti fuori produzi...
Sony ha annunciato i nuovi giochi che en...
IBM Sovereign Core: la sovranità ...
Cerchi un'asciugatrice conveniente su Am...
Ayaneo Pocket Play arriverà in ri...
iPad Pro 11'' con chip M4 scende a 949€ ...
The Sims entra in una nuova era, ma l'ac...
Netflix, Disney o Prime Video: qual &egr...
Perplexity blocca la generazione di imma...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 06:51.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v