Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Initialisation des ennemis */
- void Plateau::init_ennemis() {
- srand(time(NULL));
- int type = rand() % 2;
- if (type == 0)
- E[0].generation(E1, L, H);
- else
- E[0].generation(E2, L, H);
- for (int i = 1; i < nb_ennemis; i++) {
- bool exist = true;
- type = rand() % 2;
- if (type == 0)
- E[i].generation(E1, L, H);
- else
- E[i].generation(E2, L, H);
- while (exist) {
- exist = false;
- for (int j = 0; j <= i - 1; j++)
- if (E[i].get_x() == E[j].get_x())
- exist = true;
- if (exist)
- E[i].generation(L, H);
- }
- }
- }
- void Plateau::grille_avec_ennemis() {
- for (int i=0; i<nb_ennemis; i++)
- if (E[i].est_vivant()) {
- int x = E[i].get_x();
- int y = E[i].get_y();
- for (int j=1; j<y; j++)
- grille[j*L+x]=TOUR;
- grille[y*L+x] = E[i].get_symbole();
- }
- }
- /* Construction de la grille avec trajectoire de l'oiseau */
- void Plateau::grille_avec_traj() {
- for (int i=1; i<L; i++) {
- int y = o.get_y(i);
- if ((y > 0) && (y < H))
- grille[y * L + i] = TRAJ;
- }
- }
- /* Méthode d'affichage de la grille */
- void Plateau::affichage() {
- for (int i=H-1; i>=0; i--) {
- for (int j = 0; j < L; j++)
- cout << grille[i * L + j] << " ";
- cout << endl;
- }
- }
- /* Méthode toucher_par_oiseau */
- bool Ennemi::toucher_par_oiseau(oiseau &o) {
- bool touche = false;
- int o_y = o.get_y(this->get_x());
- if (o_y > 0) {
- if (o_y <= get_y()) {
- if (type == E1) {
- set_mort();
- score = SCORE1;
- touche = true;
- } else {
- score += SCORE1;
- pos_y = o_y;
- if (pos_y <= SEUIL) {
- score += SCORE2;
- set_mort();
- touche = true;
- }
- }
- }
- }
- return touche;
- }
- /* Traitement des ennemis */
- void Plateau::traitement_ennemi() {
- for (int i = 0; i < nb_ennemis; i++) {
- if (E[i].est_vivant()) {
- bool touche = E[i].toucher_par_oiseau(o);
- if (touche) {
- nb_vivants--;
- score += E[i].get_score();
- }
- }
- }
- }
- /* Trajectoire de Red */
- void Oiseau::set_trajectoire(float angle, float vitesse) {
- for (int i=0; i<L; i++) {
- float abscisse = (float) i;
- float vo_x = vitesse * cos(angle * (M_PI / 180));
- float vo_y = vitesse * sin(angle * (M_PI / 180));
- float y = (-g / (2 * vo_x * vo_x)) * abscisse * abscisse + (vo_y / vo_x) * abscisse;
- traj[i] = round(y);
- }
- }
- /* Constructeur de la classe Plateau */
- Plateau::Plateau(int _L, int _H, int _nb_lances, int _nb_e) {
- L = _L;
- H = _H;
- nb_lances = _nb_lances;
- nb_ennemis = _nb_e;
- nb_vivants = _nb_e;
- score = 0;
- E = new ennemi[nb_ennemis];
- // Permet une création statique de l'objet
- o.set_grille(_L);
- grille = new char[L*H];
- init_ennemis();
- init_grille();
- }
- /* Traitement de l'oiseau */
- void Plateau::traitement_oiseau() {
- int n_o;
- cout << "choix de l'oiseau : " << endl;
- cout << "1: Red trajectoire parabolique (aucun malus)" << endl;
- cout << "2: Jay trajectoire oblique avec rebond (malus à 10)" << endl;
- cout << "3: Chuck trajectoire horizontale (malus à 20)" << endl;
- cin >> n_o;
- float angle;
- float vitesse;
- int y_init;
- srand(time(NULL));
- switch (n_o) {
- case 1:
- cout << "Donnez l'angle et la vitesse : " << endl;
- cout << "angle :";
- cin >> angle;
- cout << "vitesse :";
- cin >> vitesse;
- o.set_trajectoire(angle,vitesse);
- break;
- case 2:
- y_init = rand()%(H/2);
- cout << "Donnez l'angle : "<< endl;
- cin >> angle;
- o.set_trajectoire(y_init,H,angle);
- score = score - 10;
- break;
- case 3:
- y_init = rand()%(H-2);
- o.set_trajectoire(y_init);
- score = score - 20;
- break;
- default:
- cout << "mauvais choix du type de l'oiseau" << endl;
- exit(1);
- }
- }
- void Plateau::jeu() {
- cout << "début du jeu" << endl;
- bool encore = true;
- int lances = 0;
- while (encore) {
- lances++;
- affichage();
- traitement_oiseau();
- grille_avec_traj();
- affichage();
- traitement_ennemi();
- if (nb_vivants==0) {
- encore = false;
- cout << "vous avez gagné avec " << lances << " oiseaux et un score final de " << score << endl;
- }
- else {
- if (lances==nb_lances) {
- encore=false;
- cout << "vous avez perdu avec " << nb_vivants << " ennemi(s) restant" << endl;
- }
- else {
- init_grille();
- grille_avec_ennemis();
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement