Equazione retta

di il
1 risposte

Equazione retta

Ciao a tutti, sono nuovo sul sito.
Faccio una scuola di informatica e sono in 4 superiore.
Stiamo facendo in classe un giochino chiamato Pong (credo): è quello dove due giocatori si passano la pallina usando delle barrette, finchè uno dei due sbaglia e lascia passare la pallina oltre la sua barretta, dando punto all'avversario.
Ho un problema nel calcolare la direzione della pallina, non so da dove cominciare.
Ovviamente serve calcolare l'equazione della retta, intendo partire con un coefficente angolare casuale, ma non so come proseguire. Devo calcolare ogni volta le coordinate di x e di y della pallina.
Qualcuno mi può aiutare? La classe pallina è la seguente, credo che serva mostrarvi solo questa:
(P.s.: int dir è una variabile che per ora mi fa muovere la pallina solo in orizzontale in un campo largo 632).
 public class Pallina extends OggettoGrafico {
	
	Pallina(JLabel imm, int x, int y, int[]comandi){
		super(imm, x, y, comandi);
		dir=1;
	}
	
	public void run(){
		
		//se è abilitata, la pallina inizia a muoversi...
		while(abilita){
					immagine.setLocation(x+=dir,y);
					
			                //finchè raggiunge il bordo, dove cambia direzione
					if(x==632)
						dir=-1;
					else
						if(x==0)
							dir=1;
					try{
						Thread.sleep(3);
					}catch(Exception e){}
		}	
	}

1 Risposte

  • Re: Equazione retta

    Ciao mirko.bertani,

    Il moto della pallina può essere individuato da un vettore posizione ovvero da una coppia di valori P(Px, Py) e da un vettore velocità V(Vx, Vy). Suppongo che avrai un timer dove controlli periodicamante lo stato del gioco, e in cui puoi calcolare lo spostamento della pallina facendo 'Spostamento = Velocità * TempoTrascorso'.

    Dato che l' intervallo di tempo del timer è costante puoi considerare questo intervallo come unitario quindi 'Spostamento = Velocità * 1', in pratica tutto diventa molto semplice,

    Ad ogni intervallo di tempo puoi scrivere.
    
      Px = Px + Vx;
      Py = Py + Vy;
    
    Se usi questo sistema il controllo del rimbalzo è sbagliato non devi scrivere 'if (px == 0) ...' ma usare il maggiore/minore:
    
      if ((px <= 0) || (px >= 632))
      {
         Vx = -Vx;
         Vy = -Vy;
      }
    
    In questo modo già puoi realizzare una pallina che gira per lo schermo rimbalzando lungo le pareti. Inizia a farlo, poi introdurrai il rimbalzo contro le barrette.

    Per verificare le la pallina stà urtando la barretta puoi vedere se il rettangolo che definisce la barretta contiene le coordinate della pallina.

    P.S. Per una simulazione migliore la posizione e la velocità dovrebbero essere dei double e non degli interi, alla classe pallina aggiungerei due variabili double Px e Px, che mantengono la posizione reale e poi vengono convertite in interi quando fai la SetLocation. In questo modo se la velocità è bassa la pallina può fare mezzo pixel per ogni intervallo di tempo ed anche tenere angoli che con gli interi non sarebbe possibile.
Devi accedere o registrarti per scrivere nel forum
1 risposte