-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAnimal.cpp
More file actions
77 lines (70 loc) · 3.13 KB
/
Animal.cpp
File metadata and controls
77 lines (70 loc) · 3.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
// -------------------------------------------------------------------------------------------- //
// ----- Fichier : Animal.hpp ----- //
// ----- Type : source ----- //
// ----- Auteur : Jérémy ----- //
// ----- Description : Permet de crée un animal et de le faire bouger ----- //
// -------------------------------------------------------------------------------------------- //
#include "Animal.hpp"
#include "Simulation.hpp"
// Constructeur
Animal::Animal(Simulation * m, int x, int y, int energie, QPixmap i) : energie(energie){
this->monde = m; // On défini le monde de l'animal
this->setPos(x, y); // On initialise la position de l'image
this->setPixmap(i); // On initialise l'image
taille = i.width(); // On récupère la taille de l'image
}
// Getter energie
int Animal::getEnergie(){
return this->energie;
}
// Setter energie
void Animal::setEnergie(int energie){
this->energie = energie;
}
// -------------------------------------------------------------------------------------------- //
// Fonction bouge
// Permet de déplacer un animal
// Argument : sens pour un déplacement intelligent
// -------------------------------------------------------------------------------------------- //
void Animal::bouge(int sens) {
int speed = 1; // Vitesse des animaux
// Si le sens vaut -1 aucun déplacement intelligent n'est à faire
if(sens == -1) sens = rand() % 4; // Donc on choisi un sens aléatoire
if(this->getID() == 'L') speed = 2; // Si c'est un lion il va 2 fois plus vite
switch(sens) { // Direction
case 0:
// Ouest
if (this->x() > monde->borderLeft()) this->setX(this->x() - speed);
break;
case 1:
// Est
if (this->x() + taille < monde->borderRight()) this->setX(this->x() + speed);
break;
case 2:
// Nord
if (this->y() > monde->borderTop()) this->setY(this->y() - speed);
break;
case 3:
// Sud
if (this->y() + taille < monde->borderBottom()) this->setY(this->y() + speed);
break;
}
// L'animal perd de l'énergie après son déplacement
energie--;
// Si l'énergie atteint 0
if (energie == 0) {
// Si c'est un lion alors on décrémente le nombre de lion en vies
if(this->getID() == 'L') monde->setLion(monde->getLion() - 1);
// Si c'est une gazelle alors on décrémente le nombre de gazelle en vies
else if(this->getID() == 'G') monde->setGazelle(monde->getGazelle() - 1);
// On définie l'image "mort" à la place de l'animal
this->setPixmap(monde->getImageMort());
// On déclare son id à X
this->setID('X');
// On incrémente le nombre d'animaux morts
monde->setMort(monde->getMort() + 1);
}
}
// -------------------------------------------------------------------------------------------- //
// -------------------------------------------------------------------------------------------- //
// -------------------------------------------------------------------------------------------- //