Advertisement
anthonimes

TP1---POO

Nov 10th, 2020 (edited)
530
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.18 KB | None | 0 0
  1. /* Initialisation des ennemis */
  2. void Plateau::init_ennemis() {
  3.     srand(time(NULL));
  4.     int type = rand() % 2;
  5.     if (type == 0)
  6.         E[0].generation(E1, L, H);
  7.     else
  8.         E[0].generation(E2, L, H);
  9.     for (int i = 1; i < nb_ennemis; i++) {
  10.         bool exist = true;
  11.         type = rand() % 2;
  12.         if (type == 0)
  13.             E[i].generation(E1, L, H);
  14.         else
  15.             E[i].generation(E2, L, H);
  16.         while (exist) {
  17.             exist = false;
  18.             for (int j = 0; j <= i - 1; j++)
  19.                 if (E[i].get_x() == E[j].get_x())
  20.                     exist = true;
  21.             if (exist)
  22.                 E[i].generation(L, H);
  23.         }
  24.     }
  25. }
  26.  
  27. void Plateau::grille_avec_ennemis() {
  28.     for (int i=0; i<nb_ennemis; i++)
  29.         if (E[i].est_vivant()) {
  30.             int x = E[i].get_x();
  31.             int y = E[i].get_y();
  32.             for (int j=1; j<y; j++)
  33.                 grille[j*L+x]=TOUR;
  34.             grille[y*L+x] = E[i].get_symbole();
  35.         }      
  36. }
  37.  
  38.  
  39. /* Construction de la grille avec trajectoire de l'oiseau */
  40. void Plateau::grille_avec_traj() {
  41.     for (int i=1; i<L; i++) {
  42.         int y = o.get_y(i);
  43.         if ((y > 0) && (y < H))
  44.             grille[y * L + i] = TRAJ;
  45.     }
  46. }
  47.  
  48. /* Méthode d'affichage de la grille */
  49. void Plateau::affichage() {
  50.     for (int i=H-1; i>=0; i--) {
  51.         for (int j = 0; j < L; j++)
  52.             cout << grille[i * L + j] << " ";
  53.         cout << endl;
  54.     }
  55. }
  56.  
  57.  
  58. /* Méthode toucher_par_oiseau */
  59. bool Ennemi::toucher_par_oiseau(oiseau &o) {
  60.     bool touche = false;
  61.     int o_y = o.get_y(this->get_x());
  62.     if (o_y > 0) {
  63.         if (o_y <= get_y()) {
  64.             if (type == E1) {
  65.                 set_mort();
  66.                 score = SCORE1;
  67.                 touche = true;
  68.             } else {
  69.                 score += SCORE1;
  70.                 pos_y = o_y;
  71.                 if (pos_y <= SEUIL) {
  72.                     score += SCORE2;
  73.                     set_mort();
  74.                     touche = true;
  75.                 }
  76.  
  77.             }
  78.         }
  79.     }
  80.     return touche;
  81. }
  82.  
  83.  
  84. /* Traitement des ennemis */
  85. void Plateau::traitement_ennemi() {
  86.     for (int i = 0; i < nb_ennemis; i++) {
  87.         if (E[i].est_vivant()) {
  88.             bool touche = E[i].toucher_par_oiseau(o);
  89.             if (touche) {
  90.                 nb_vivants--;
  91.                 score += E[i].get_score();
  92.             }
  93.         }
  94.     }
  95. }
  96.  
  97.  
  98. /* Trajectoire de Red */
  99. void Oiseau::set_trajectoire(float angle, float vitesse) {
  100.  
  101.     for (int i=0; i<L; i++) {
  102.         float abscisse = (float) i;
  103.         float vo_x = vitesse * cos(angle * (M_PI / 180));
  104.         float vo_y = vitesse * sin(angle * (M_PI / 180));
  105.         float y = (-g / (2 * vo_x * vo_x)) * abscisse * abscisse + (vo_y / vo_x) * abscisse;
  106.         traj[i] = round(y);
  107.     }
  108. }
  109.  
  110. /* Constructeur de la classe Plateau */
  111. Plateau::Plateau(int _L, int _H, int _nb_lances, int _nb_e) {
  112.     L = _L;
  113.     H = _H;
  114.     nb_lances = _nb_lances;
  115.     nb_ennemis = _nb_e;
  116.     nb_vivants = _nb_e;
  117.     score = 0;
  118.     E = new ennemi[nb_ennemis];
  119.     // Permet une création statique de l'objet
  120.     o.set_grille(_L);
  121.     grille = new char[L*H];
  122.     init_ennemis();
  123.     init_grille();
  124. }
  125.  
  126. /* Traitement de l'oiseau */
  127. void Plateau::traitement_oiseau() {
  128.     int n_o;
  129.     cout << "choix de l'oiseau : " << endl;
  130.     cout << "1: Red trajectoire parabolique (aucun malus)" << endl;
  131.     cout << "2: Jay trajectoire oblique avec rebond (malus à 10)" << endl;
  132.     cout << "3: Chuck trajectoire horizontale (malus à 20)" << endl;
  133.     cin >> n_o;
  134.     float angle;
  135.     float vitesse;
  136.     int y_init;
  137.     srand(time(NULL));
  138.     switch (n_o) {
  139.         case 1:
  140.             cout << "Donnez l'angle et la vitesse : " << endl;
  141.             cout << "angle :";
  142.             cin >> angle;
  143.             cout << "vitesse :";
  144.             cin >> vitesse;
  145.             o.set_trajectoire(angle,vitesse);
  146.             break;
  147.         case 2:
  148.             y_init = rand()%(H/2);
  149.             cout << "Donnez l'angle : "<< endl;
  150.             cin >> angle;
  151.             o.set_trajectoire(y_init,H,angle);
  152.             score = score - 10;
  153.             break;
  154.         case 3:
  155.             y_init = rand()%(H-2);
  156.             o.set_trajectoire(y_init);
  157.             score = score - 20;
  158.             break;
  159.         default:
  160.             cout << "mauvais choix du type de l'oiseau" << endl;
  161.             exit(1);
  162.     }
  163. }
  164.  
  165. void Plateau::jeu() {
  166.     cout << "début du jeu" << endl;
  167.     bool encore = true;
  168.     int lances = 0;
  169.     while (encore) {
  170.         lances++;
  171.         affichage();
  172.         traitement_oiseau();
  173.         grille_avec_traj();
  174.         affichage();
  175.         traitement_ennemi();
  176.         if (nb_vivants==0) {
  177.             encore = false;
  178.             cout << "vous avez gagné avec " << lances << " oiseaux et un score final de " << score << endl;
  179.         }
  180.         else {
  181.             if (lances==nb_lances) {
  182.                 encore=false;
  183.                 cout << "vous avez perdu avec " << nb_vivants << " ennemi(s) restant" << endl;
  184.             }
  185.             else {
  186.                 init_grille();
  187.                 grille_avec_ennemis();
  188.             }
  189.         }
  190.     }
  191. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement