condition

tutorial de programmation
en processing

pong
   

 

 

Pouvoir décisionnel & condition et jeu

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.

Référence et litterature

Ian Bogost: procedural literacy

Condition

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 if , ensuite la condition dans les parenthèses, d'une manière qu'on peut répondre par true (=vrai) ou false (faux). Si la condition est vrai (...il pleut) le programme exécute le premier 'statement'. Si la condition est faux (disons il y a du soleil, on néglige qu'il y a du temps intermédiaire ;-) on exécute le bloc du programme, le statement dans else. Essayons d'écrire un vraie programme:

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;
}
}

l'exemple est ici

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é.

 

Opérateur relationnel

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.

Mouvement

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;
}
}

voici le sketch

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.

Operateur logique

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

Input

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:
 

 

Exercice