Dans cette activité, nous allons mettre en pratique tout ce que nous avons vu sur la programmation objet, en travaillant sur des cas concrets.
Créez un programme permettant d'avoir une balle noire qui rebondit sur les bords de la fenêtre. La position de départ, la vitesse de départ ainsi que la direction de départ devront être aléatoires. La balle ne devra pas rester immobile. Vous devrez créer une classe Balle. Cette classe possédera 2 méthodes (en plus du constructeur) : "afficheBalle" (qui permettra de dessiner la balle l'écran à l'aide d'une fonction "ellipse") et "depBalle" qui gérera les déplacements de la balle.
Comme cet exemple commence à être difficile, je vous fournis une "correction" possible : cliquez ici pour voir la "correction"
En vous inspirant du programme développé dans le "À faire vous-même 5.1", créez un programme qui permettra d'afficher 2 balles (les couleurs des balles devront être aléatoires). La position de départ, la vitesse de départ ainsi que la direction de départ des 2 balles devront être aléatoires. Les balles ne devront pas rester immobiles. Vous devrez créer une classe Balle. Cette classe possédera 2 méthodes (en plus du constructeur) : "afficheBalle" (qui permettra de dessiner la balle l'écran à l'aide d'une fonction "ellipse") et "depBalle" qui gérera les déplacements de la balle.
Cliquez ici pour voir la "correction"
Dans l'exemple du "À faire vous-même 5.2" nous créons 2 objets "à la main", avec un plus grand nombre d'objets à créer (et à gérer), cette solution "manuelle" deviendrait vite ingérable. Comment faire si par exemple nous voulons créer 100 instances de "Balle" ?
Le plus simple est de "stocker" les objets dans un tableau d'objet. Ainsi, nous pourrons utiliser une boucle pour parcourir ce tableau et avoir accès aux différents objets. Voici un exemple :
Saisissez, analysez et testez le programme suivant :
Personnage[] tabPerso = new Personnage [5];
class Personnage {
int vie;
String nom;
// le constructeur
Personnage(int nbrVie, String nomPerso){
vie=nbrVie;
nom=nomPerso;
}
//méthode qui affiche l'état du personnage
void afficheEtat(){
println ("Il reste "+vie+" points de vie à "+nom);
}
// méthode qui enlève un point de vie au personnage concerné
void perdVie (){
println (nom+" subit une attaque, il perd une vie");
vie=vie-1;
}
}
void setup() {
for (int i=0; i<tabPerso.length;i=i+1){
tabPerso[i]= new Personnage(int(10+random(10)), "Perso "+i);
}
for (int i=0; i<tabPerso.length;i=i+1){
tabPerso[i].afficheEtat();
}
tabPerso[2].perdVie();
for (int i=0; i<tabPerso.length;i=i+1){
tabPerso[i].afficheEtat();
}
}
Analysons le code du "À faire vous-même 5.3" :
La ligne
Personnage[] tabPerso = new Personnage [5];
permet de créer un tableau qui pourra contenir 5 objets de type Personnage
Avec le boucle
for (int i=0; i<tabPerso.length;i=i+1){
tabPerso[i]= new Personnage(int(10+random(10)), "Perso "+i);
}
nous "remplissons" le tableau "tabPerso" avec des objets de type "Personnage" (le constructeur prend 2 paramètres : le nombre de points de vie et le nom du personnage).
Une fois le tableau rempli, il est possible de gérer un objet en particulier :
// nous appliquons la méthode "perdVie" au 3e objet du tableau "tabPerso"
tabPerso[2].perdVie();
ou d'utiliser une boucle pour appliquer la méthode "afficheEtat" à tous les objets contenus dans le tableau :
for (int i=0; i<tabPerso.length;i=i+1){
tabPerso[i].afficheEtat();
}
Réécrire l'exemple développé dans le "À faire vous-même 5.3" en utilisant un "ArrayList" à la place d'un tableau "classique".
Reprenez l'exemple du "À faire vous-même 5.2" et modifiez le code pour avoir 100 balles d'affichées au lieu de 2.
Cliquez ici pour voir la "correction"
Reprenez l'exemple du "À faire vous-même 5.4" et modifiez le code pour qu'en cas de collision entre 2 balles, les 2 balles concernées par la collision disparaissent. Afin de pouvoir mieux observer le phénomène, il faudra mettre en place un système qui activera les collisions uniquement si l'utilisateur appuie sur touche d du clavier.
Cliquez ici pour voir la "correction"