TP 3: Test

Si{...}Alors{...}Sinon{...}

Nous allons faire un programme "réactif" à un évènement qui est un clic effectué avec la souris dans la fenêtre. Si on clique dans la partie supérieure de la fenêtre alors la couleur du fonds devient vert, sinon elle devient rouge.

Voilà le programme


void setup(){
	size(400,400);
	
}

void draw(){
	if(mouseY > height/2){
		background(0,200,0);
	}
	else{
		background(255,0,0);
	}
	line(0,height/2,width,height/2);
}

Tester le programme

Mettre l'instruction line() avant le bloc if(). Que se passe -t-il ?

la fonction random()

Nous aurons besoin de la fonction random() pour simuler le hasard dans nos programmes (aller voir la référence pour plus de précisions).

Attention! la fonction random() retourne un nombre à virgule dont le type dans le langage Processing est soit float soit double (voir reférence)


float a;
double b;
void setup(){
	a = random(2);
	b = random(2);
	println(a);
	println(b);
}


Executez le programme ci-dessus qu'observez vous ?

Un des intérêts de la fonction random() sera de nous aider à construire des ensembles de valeurs aléatoires pour tester nos programmes

Imaginons que l'on veuille faire un programme qui simule le jeu du Chevalier de Méré : On lance 4 dés si on a au moins un six on a gagné sinon on a perdu

PROBLEME : random() retourne un float ou un double or le résultat d'un dé est un entier (int). Comment faire ?

Le Casting!!!


Tester le programme suivant

float a; void setup(){ a = random(5); println(a); println((int)a); println(int(a)); }

On observe que faire (int)a ou int(a) transforme le contenu de a qui est de type float en type int. On dit que l'on a fait un cast

Exercices

  1. Faire un programme qui engendre quatre entiers au hasard compris entre 1 et 6 inclus
  2. Simuler le jeu du Chevalier de Méré
  3. Faire un programme qui affiche si l'équation ax^2+bx+c = 0 a au moins une solution, avec a, b et c entiers aléatoires entre 1 et 10 inclus

if(condition1){...} else if(condition 2){...}

Revenons sur la discussion au sujet de l'existence des solutions de l'équation générale du second degré

Si Delta > 0 alors {deux solutions} sinon{ si delta = 0 alors {une solution }sinon {pas de solution} }

Première Traduction


void setup(){
.....
if(delta > 0){
	println("Deux solutions");
}
else{
	if(delta = 0){
		println("Une solution");
	}
	else{
		println("Pas de solution");
	}
}
}

Deuxième Traduction


void setup(){
.....
if(delta > 0){
	println("Deux solutions");
}
else if(delta = 0){
		println("Une solution");
}
else{
		println("Pas de solution");
}
}

}

les deux traductions sont correctes mais la deuxième est plus concise grâce au else if (voir Référence)

Exercice

Si la moyenne du bac est supérieure ou égale à 16 alors on a la mention très bien, si elle est entre 14 et 16 on a la mention bien , si elle est entre 12 et 14 on a la mention assez bien si elle est entre 10 et 12 mention passable, si elle est entre 8 et 10 on passe à l'oral sinon on est refusé. En utilisant la fonction random() pour générer aléatoirement une note entière entre 0 et 20 , faire un programme qui affiche en fonction de la note, la mention au bac

switch ...case

Losqu'une variable de type primitif (char ou int) peut prendre un petit nombre de valeurs, par exemple le résultat d'un lancer de dé, alors au lieu d'utiliser plusieurs if(...) else if(...) à la suite, on utilise switch(...)case. Regardons cela sur un exemple.

On lance un dé. En fonction du résultat on veut dessiner au centre d'une fenêtre 600x400 la face d'un dé correspondant au résultat

Voici le début du code . A compléter

int de;
void setup(){
	size(600,400);
	mode(CENTER);
	de = (int)random(0,6)+1;
	switch(de){
		case 1:
			fill(255,0,0);
			rect(width/2,height/2,100,100);
			ellipse(width/2,height/2,10,10);
			break;
		case 2:
			fill(255,0,0);
			rect(width/2,height/2,100,100);
			ellipse(width/2-50,height/2+50,10,10);
			ellipse(width/2+50,height/2-50,10,10);
			break;
		case 3:
			...à compléter...
}

Bien comprendre le rôle de break (voir Référence)

Mini-projet personnel ( à rendre avant J+7)

  1. (Ours polaire) (/5 points) On interprète la face d'un dé blanc de la manière suivante:

    S'il y a un point central c'est un trou dans la glace et les autres points sont des ours polaires.

    Par exemple lorsqu'il y a 3 points, il y a 1 trou et deux ours

    De l'autre côté de la glace (les points de la face opposée) il y a des poissons

    Donc dans l'exemple précédent il y a 4 poissons

    Faire un programme qui génère au hasard un nombre entier entre 1 et 6 et qui affiche à l'écran le message suivant (sur deux lignes)

    Le résultat du dé est (de)

    Il y a (nombreTrous) trous, (nombreOurs) ours et (nombrePoissons) poissons

    Vous aurez quatre variables globales de, nombreTrous,nombreOurs et nombrePoissons

  2. Rock paper scissors lizard Spock(/5 points)

    Il s'agit de faire un programme qui simule une partie de ce jeu entre deux joueurs Joueur1 et Joueur2

    Voir les règles ici

    Chaque élément gagne contre deux autres éléments et perd contre deux autres. En disposant judicieusement les 5 éléments sur un cercle et en les ordonnant on constate que chaque élément gagne contre les deux éléments qui le précédent et perd contre les deux qui le suivent

    Ainsi PAPER (2) bat ses deux prédécesseurs SPOCK(1) et ROCK(0) et perd contre ses deux successeurs LIZARD(3) et SCISSORS(4)

    Vérifier que pour savoir qui de Joueur1 ou Joueur2 a gagné il suffit de calculer :

    Joueur1 - Joueur2

    Puis si ce nombre est négatif lui rajouter 5

    Le nombre obtenu nous renseigne sur la position de Joueur2 par rapport à Joueur1 sur le cercle

    Télécharger le squelette de code à compléter entre les commentaires ici C'est un fichier texte que vous copierez et collerez dans l'environnement processing