Eines de l'usuari

Eines del lloc


tutorials:processing:15_if_else

If - else condicional

El if es la sentencia mès simple per al control del flux del programa. Seguint amb el nostre programa el if l'utilitzarem per fer rebotar la pilota a les parets, per moure les raquetes i que reboti a les raquetes.

la sintaxis bàsica es:

if (condicio){
  instruccio_1;
  instruccio_2;
    }

Les instruccions instruccio_1 i instruccio_2 s'executaran si la condició es verdadera. Les concions soles ser una comparació, per exemple i x e i son sensers(int x,y)

(condicio)
(x == y) Serà TRUE quan x y siguin iguals, son dos “==”, per diferenciar-los de l'assignació “=
(x != y) Serà TRUE quan x sigui diferent de y
(x >= y) Serà TRUE quan x sigui major o igual que y
(x =< y) Serà TRUE quan x sigui menor o igual que y
(x > y) Serà TRUE quan x sigui major y
(x < y) Serà TRUE quan x sigui menor y

Poden posar-se diverses condicions, amb AND(&&), OR(||), NOT(!)

if (x > y) && (x==z) {
  instruccions;
  }

Les instruccions s'executen quan es compleix al mateix temps que x es major que y, i que x es igual a z.

else

El else (si no), executa les instruccions si no es compleix la condició.

El programa quan arriba al if veirifica si es condico es TRUE o FALSE, si es TRUE executa les instruccions a dintre del primer {…} si no es compleix executa el {…} que hi ha després del if. Aquesta es la sintaxis:

if (expression) { 
  statements 
} else { 
  statements 
} 

if (expression) { 
  statements 
} else if (expression) { 
  statements 
} else { 
  statements 
}

al else li podem afegir altre if, així executarem el else si es compleix el if.

Rebot de la pilota

Per fer el rebot de la pilota quan sobrepassi un limit de la pantalla cal canviar la direcció del moviment.

// Algoritme rebot pilota amb les parets

//variables necessaries per fer el moviment
int posicioPilota_x=300;
int posicioPilota_y=300;
int velocitatPilota_x=5;
int veloctatPilota_y=5;

//moviment pilota
    posicioPilota_x = posicioPilota_x + velocitatPilota_x; 
    posicioPilota_y = posicioPilota_y + velocitatPilota_y; 
    
    
// Rebot a les y
        if (posicioPilota_y < 0)  velocitatPilota_y = -velocitatPilota_y;
           else if (posicioPilota_y > 600) velocitatPilota_y = -velocitatPilota_y;

//rebot a les x
        if (posicioPilota_x < 0)  velocitatPilota_x = -velocitatPilota_x;
           else if (posicioPilota_x > 800)  velocitatPilota_x = -velocitatPilota_x; 
 

Moviment de les raquetes

Per moure les raquetes utilitzarem el teclat:

if (keyPressed == true) {
 //if (key=='o') raq_drt_y=raq_drt_y-5;
 //if (key=='l') raq_drt_y=raq_drt_y+5;
 if (key == 'a') raq_esq_y=raq_esq_y-10;
 if (key == 'z') raq_esq_y=raq_esq_y+10;
 if (keyCode == UP) raq_drt_y=raq_drt_y-10;
 if (keyCode == DOWN) raq_drt_y=raq_drt_y+10;
}

El problema d'aquest codi es que el teclat te un filtre, només una tecla a al vegada s'envia al sistema operatiu, encara que pitjem dos a la vegada, només arriba l'ultima pitjada. Per exemple polsem la “o” la raqueta dreta es mou, si mentre tinguem pitjada la tecla “o” i pitjem la “a”, la raqueta esquera es comença a moure, però la dreta es deixa de moure, perquè el teclat deixa de emetre la “o”.

Una solució fàcil es moure una raqueta amb el teclat, i altra raqueta amb el ratolí.

Solució - lectura dues tecles al mateix temps

Per poder llegir dues tecles a la vegada hem de fer servir les funcions keyPressed() i keyRelased(), que s'executen independentment del draw().

boolean[] keys;

void setup()
{
  size(200, 200);
  frameRate(5);
  keys=new boolean[2];
  keys[0]=false;
  keys[1]=false;
}
void draw() 
{
  if( keys[0]) 
  {  
    print("1");
  }
  if( keys[1]) 
  {
    print("2");
  }
}

void keyPressed()
{
  if(key=='a')
    keys[0]=true;
  if(key=='s')
    keys[1]=true;
}

void keyReleased()
{
  if(key=='a')
    keys[0]=false;
  if(key=='s')
    keys[1]=false;
} 
tutorials/processing/15_if_else.txt · Darrera modificació: 2018/10/28 18:17 per crevert