1: #include <iostream>
2: #include <cstdlib> // Pour utiliser rand() et srand()
3: #include <ctime> // Pour utiliser time() pour générer des graines aléatoires
4: using namespace std;
5: class Object {
6: protected:
7: int posX, posY; // Coordonnées de l'objet
8: int vitesse ;
9: public:
10: Object(int x = 0, int y = 0) : posX(x), posY(y) {}
11: };
12: // Classe pour le robot AGV (hérite de Object)
13: class AGV:public Object{
14: private:
15: int posX, posY;
16: int energie; // Énergie restante
17: int grille[10][10] = {0}; // Grille (initialisée à 0)
18: public:
19: AGV(int x = 0, int y = 0, int e = 100) :Object (x,y), energie(e) {}
20:
21: // Ajouter des obstacles aléatoires
22: void ajouterObstaclesAleatoires(int nombreObstacles) {
23: srand(time(0)) ; //Pour Initialiser le générateur de nombres aléatoires
24: for (int i = 0; i < nombreObstacles; ++i) {
25: int x, y;
26: do {
27: x = rand() % 10; // Générer une position x aléatoire (0-9)
28: y = rand() % 10; // Générer une position y aléatoire (0-9)
29: } while (grille[x][y] == 1 || (x == posX && y == posY)); // Éviter les doublons et la position de l'AGV
30: if (x >= 0 && x < 10 && y >= 0 && y < 10) {
31: grille[x][y] = 1;
32: } else {
33: cout << "Position hors des limites de la grille!\n";
34: }
35: }
36: }
37:
38: // Afficher la grille
39: void afficherGrille() {
40: for (int i = 0; i < 10; ++i) {
41: for (int j = 0; j < 10; ++j) {
42: if(i!=9 || j!= 9){
43: if (i == posX && j == posY)
44: cout << "A";
45: else if (grille[i][j] == 1)
46: cout << "X";
47: else
48: cout << ". ";
49: }
50: else{
51: cout << "M";
52: }
53: }
54: cout << endl;
55: }
56: }
57:
58: // Afficher l'état du robot
59: void afficher() {
60: cout << "AGV en (" << posX << ", " << posY << "), Énergie: " << energie << "%\n";
61: }
62:
63: // Déplacer le robot sur l'axe X
64: void deplacerX(int pas) {
65: int cibleX = posX + pas;
66:
67: if (cibleX < 0 || cibleX >= 10) {
68: cout << "Position hors des limites de la grille!\n";
69: return;
70: }
71:
72: while (posX != cibleX) {
73: if (energie <= 0) {
74: cout << "Énergie insuffisante! Déplacement arrêté.\n";
75: return;
76: }
77:
78: int nextX = posX + (cibleX > posX ? 1 : -1);
79:
80: if (grille[nextX][posY] == 1) {
81: cout << "Obstacle détecté en (" << nextX << ", " << posY << "). Déplacement annulé.\n";
82: return;
83: }
84:
85: posX = nextX;
86: energie -= 5;
87:
88: cout << "AGV déplacé en (" << posX << ", " << posY << "), énergie restante: " << energie << "%\n";
89: }
90: afficherGrille();
91: }
92:
93: // Déplacer le robot sur l'axe Y
94: void deplacerY(int pas) {
95: int cibleY = posY + pas;
96:
97: if (cibleY < 0 || cibleY >= 10) {
98: cout << "Position hors des limites de la grille!\n";
99: return;
100: }
101:
102: while (posY != cibleY) {
103: if (energie <= 0) {
104: cout << "Énergie insuffisante! Déplacement arrêté.\n";
105: return;
106: }
107:
108: int nextY = posY + (cibleY > posY ? 1 : -1);
109:
110: if (grille[posX][nextY] == 1) {
111: cout << "Obstacle détecté en (" << posX << ", " << nextY << "). Déplacement annulé.\n";
112: return;
113: }
114:
115: posY = nextY;
116: energie -= 5;
117:
118: cout << "AGV déplacé en (" << posX << ", " << posY << "), énergie restante: " << energie << "%\n";
119: }
120: afficherGrille();
121: }
122:
123: // Recharger l'énergie
124: void recharger() {
125: energie = 100;
126: cout << "Énergie rechargée à 100%.\n";
127: }
128: };
129:
130: int main() {
131: AGV agv(0, 0);
132: int choix,pas;
133: // Ajouter des obstacles aléatoires
134: int nombreObstacles;
135: cout << "Combien d'obstacles voulez-vous ajouter ? : ";
136: cin >> nombreObstacles;
137: [Link](nombreObstacles);
138:
139: do {
140: cout << "\n--- Menu ---\n";
141: cout << "1. Afficher la grille\n";
142: cout << "2. Déplacer l'AGV sur l'axe Y \n";
143: cout << "3. Déplacer l'AGV sur l'axe X \n";
144: cout << "4. Recharger l'énergie\n";
145: cout << "5. Quitter\n";
146: cout << "Votre choix: ";
147: cin >> choix;
148:
149: switch (choix) {
150: case 1:
151: [Link]();
152: break;
153: case 2:
154: cout << "Entrez le nombre de pas sur l'axe Y : ";
155: cin >> pas;
156: [Link](pas);
157: break;
158: case 3:
159: cout << "Entrez le nombre de pas sur l'axe X : ";
160: cin >> pas;
161: [Link](pas);
162: break;
163: case 4:
164: [Link]();
165: break;
166: case 5:
167: cout << "Fin du programme.\n";
168: break;
169: default:
170: cout << "Choix invalide. Réessayez.\n";
171: }
172: } while (choix != 5);
173:
174: return 0;
175: }