conditiontutorial de programmation |
|
Jusqu'à présent, notre programme est exécuté ligne par ligne, sans qu'on peut l'influencer. Pour contrôler le flux du programme ( on se souvient que l'origine des ordinateur a été la cybernétique, le contrôle des flux dans les systèmes), les langages de programmation distinguent les contrôles conditionnels, qui permet d'imposer une condition pour décider si le programme exécute une partie du programme ou pas.
La condition est l'ingrédient essentiel dans la conception de jeu. C’est en 1972 qu’une nouvelle société nommée Atari, se composant à l’époque du fondateur Nolan Bushnell et de son ami Ted Dabney, dévoila pour la première fois leurs jeune titre, PONG, qui s’annoncera par la suite comme un succès retentissant.D'une manière simple est efficase il exploit cette possibilité de l'ordinateur est debut l'aventure du jeu vidéo.
Ian Bogost: procedural literacy
Dans le langage naturel on pourrait dire: Si il pleut, je prend mon parapluie, sinon je prend les lunettes de soleil.
Traduit en algorithme, on dirait:
if (il pleut){
parapluie
}
else{
lunette de soleil
}
On écrit
boolean ilPleut = true;
void setup(){
size(100,100);
}
void draw(){
background(125);
if (ilPleut){
rect ( width/2-1,height/2,2, 40);// ok, ce parapluie est légèrement schématisé
rect (width/2-15,height/2, 30,2);
}
else{
ellipse( width/2-10,height/2, 20,20);
ellipse( width/2+10,height/2, 20,20);
}
if (mousePressed){
ilPleut=false;
}
}
avec un simple clic de la souris, le temps change! Comme on a dit dans le cours passé, le mousePressed est un variable boolean prédéfinit, qui est faux quand le souris est relâché et true quand elle est appuyé.
On peut évidement utiliser aussi des chiffres pour la condition, dans ce cas, on se sert des opérateurs relationnels.
< | plus petit que |
=< | plus petit ou égal |
> | plus grand que |
=< | plus grand que ou égal |
== | égale |
!= | n'est pas égale |
attention, = signifie qu'on affecte une valeur à une variable x=5 veut dire à x vaut actuellement 5, si on écrit x==6, x n'a pas changé son valeur, mais on peut répondre true ou false.
Pour faire bouger un objet, on va définir sa position comme une variable (parce qu'elle va varier ;-) et une valeur de sa vélocité, c'est à dire la valeur par laquelle l'objet de déplace par lecture de boucle de draw.(cf la lection précédente).
int positionX=0;
int positionY= height/2;
int velocite = 2;
void setup(){
size(100,100);
}
void draw(){
background(0);
rect(positionX, positionY, 10,10);
positionX=positionX+velocite;
if (positionX>width){
positionX=0;
}
}
Pourquoi j'utilise une variable pour la velocité au lieu d'ecrire velocite = velocite +2?
D'un part, le programme est plus lisible en nommant la velocité mais surtout on peut changer sa valeur au cours du programme. On verra ça dans l'excercise à la fin.
Le programme va lire le draw en boucle. Au premier lecture, la variable positionX dans le rect est 0. Dans la ligne suivante, elle devient 2 (0+2), donc quand elle revient au deuxième boucle au rect elle est 2, le rectangle saute alors sur l'axe X à la position deux.Processsing exécute +/-30 boucle par seconde, l'oeil perçoit ces petites sautes comme du mouvement - comme au cinéma. On appelle ce phénomène persistance rétinienne ou bien l'effet phi . La valeur de positionX augmente au fur et à mesure et chaque fois le if verife sa condition que reste false jusque au moment que positionX devient plus grand que 100 (width), à ce moment la condition sera exécuté et le rectangle saute à 0.
Parfois il ne suffit pas de mettre un operateur relationnel (p.ex 3<x) comme condition dans if ( ). Dans ce cas, on peut combiner plusieurs operateurs relationnels avec les operateurs logiques. Dans Processing on utilise principalement
&& qui veut dire et
|| qui veut dire ou
Ainsi
3>2 && 3<4 // est true
3>2 && 3>4 // est false
si un des deux conditions est false toute la condition est false
3>2 || 3<4 // est true
3>2 || 3>4 // est true
si un de deux conditions est true, toute est true
Pour pouvoir rentrer des décisions dans le programme, Processing a prévu quelques variables qui permettent de modifier le programme pendant son execution. Voici les essentielles
mousePressed | boolean, true quand la souris est appuyé |
keyPressed | boolean, true quand une touche est appuyé |
mouseX | la position x de la souris |
mouseY | la position x de la souris |
Ce qu'il faut connaître: |