void EnnemiBulbizarre::onAvance()
{
	tombe();

	ss_etape += 1;
	ss_etape %= 8;

	if (ss_etape == 0) {
		etape += 1;
		etape %= 2;
	}

	// Marche
	//
	if (x - 1 < xmin || mur_opaque(x - 1, y))
		dir = SENS_DROITE;
	else if (x + 1 > offset + 640 || mur_opaque(x + 1, y))
		dir = SENS_GAUCHE;

	if (dir == SENS_DROITE) {
		marche(1);
		pic = pbk_ennemis[24 + etape];
	} else {
		marche(-1);
		pic = pbk_ennemis[26 + etape];
	}


	colFromPic();
}
void EnnemiSmurfette::onAvance()
{
	static const int marche_droite[] = { 315, 316, 317, 318, 319, 318, 317, 316 };
	static const int marche_gauche[] = { 320, 321, 322, 323, 324, 323, 322, 321 };
	static const int SPEED = 1;

	tombe();

	// Marche
	//
	if (x - SPEED < xmin || mur_opaque(x - SPEED, y) || (plat(x - SPEED, y) == 0 && plat(x - SPEED, y + 5) == 0))
		dir = SENS_DROITE;
	else if (x + SPEED > offset + 640 || mur_opaque(x + SPEED, y)  || (plat(x + SPEED, y) == 0 && plat(x + SPEED, y + 5) == 0))
		dir = SENS_GAUCHE;

	if (dir == SENS_DROITE) {
		marche(SPEED);
		pic = pbk_ennemis[anime(marche_droite, 8, 6)];
	} else {
		marche(-SPEED);
		pic = pbk_ennemis[anime(marche_gauche, 8, 6)];
	}

	if (etape_shoot >= wait_shoot && x > offset + 10 && x < offset + 630) {
		etape = ss_etape = 0;
		etat = ETAT_TIRE;
		onTire();
		return;
	}

	colFromPic();
}
void EnnemiToad::onCharge()
{
	speed = TOAD_CHARGE_SPEED;
	if (x - speed < xmin || mur_opaque(x - speed, y)) {
		dir = SENS_DROITE;
		speed = 1;
		etat = ETAT_AVANCE;
		wait_for_charge = 0;
		charge_delay = 50 + rand() % 250;
		etape = 0;
		ss_etape = 0;
		onAvance();
		return;
	} else if (x + speed > offset + 640 || mur_opaque(x + speed, y)) {
		dir = SENS_GAUCHE;
		speed = 1;
		etat = ETAT_AVANCE;
		wait_for_charge = 0;
		charge_delay = 50 + rand() % 250;
		etape = 0;
		ss_etape = 0;
		onAvance();
		return;
	}
	charge_etape += 1;
	if (charge_etape < 80) {
		if (dir == SENS_DROITE) {
			//marche(speed);
			pic = pbk_ennemis[anime(anim_toad_marche_droite, 4, 3)];
		} else {
			//marche( -speed);
			pic = pbk_ennemis[anime(anim_toad_marche_gauche, 4, 3)];
		}
	} else {
		if (dir == SENS_DROITE) {
			marche(speed);
			pic = pbk_ennemis[anime(anim_toad_marche_droite, 4, 2)];
		} else {
			marche(-speed);
			pic = pbk_ennemis[anime(anim_toad_marche_gauche, 4, 2)];
		}
	}


	colFromPic();
}
void EnnemiSnorkyBase1::onAvance()
{

	if (plat(x, y) == 0) {
		etat = ETAT_TOMBE;
		dy = 0;
		lat_grav = 0;
		onTombe();
		return;
	}

	wait_for_shoot++;
	if	((wait_for_shoot > shoot_delay) && ((dir == SENS_DROITE && x > offset + 40) || (dir == SENS_GAUCHE && x < offset + 600))) {
		wait_for_shoot = 0;
		shoot_delay = 50 + rand() % 200;
		etape = 0;
		ss_etape = 0;
		etat = ETAT_TIRE;
		onTire();
		return;
	}

	if (dir == SENS_GAUCHE) {
		marche(-SNORKY_BASE_SPEED);

		pic = pbk_ennemis[anime(anim_snorky_base_marche_gauche, 8, 4)];

		if (mur_opaque(x - SNORKY_BASE_SPEED, y) || (x - SNORKY_BASE_SPEED < xmin))
			dir = SENS_DROITE;
	} else {
		marche(SNORKY_BASE_SPEED);

		pic = pbk_ennemis[anime(anim_snorky_base_marche_droite, 8, 4)];

		if (mur_opaque(x + SNORKY_BASE_SPEED, y) || (x + SNORKY_BASE_SPEED > offset + 640))
			dir = SENS_GAUCHE;
	}

	colFromPic();
}
void EnnemiSnorkyBase1::onMeure()
{
	tombe();

	ss_etape += 1;
	ss_etape %= 5;

	if (ss_etape == 0)
		etape += 1;

	if (etape == 4 && ss_etape == 1) {
		Sprite * s = new MorceauSnorkyBaseTeteEntiere();

		s->dir = dir;
		s->y = y - 22;
		s->x = x;

		list_giclures.ajoute((void*) s);

		dy = 0;
	}
	if (etape == 14) {
		if (plat(x, y) != 0) {
			grave(x, y, pic);
		}

		a_detruire = true;

	} else {
		if (dir == SENS_GAUCHE) {
			marche(-SNORKY_BASE_SPEED);
			pic = pbk_ennemis[71 + etape];
		} else {
			marche(SNORKY_BASE_SPEED);
			pic = pbk_ennemis[38 + etape];
		}
	}
}
void EnnemiToad::onAvance()
{
	// Si plus de plateformes on passe dans l'etat TOMBE
	//
	if (plat(x, y) == 0) {
		etat = ETAT_TOMBE;
		dy = 0;
		etape = 0;
		ss_etape = 0;
		lat_grav = 0;
		onSaute();
	}

	//pour marcher

	if (x - speed < xmin || mur_opaque(x - speed, y)) {
		dir = SENS_DROITE;
		speed = 1;
	} else if (x + speed > offset + 640 || mur_opaque(x + speed, y)) {
		dir = SENS_GAUCHE;
		speed = 1;
	}
	wait_for_charge++;
	if (wait_for_charge >= charge_delay) {
		if ((plat2(tete_turc->x, tete_turc->y) == plat2(x, y)) &&
		        (((dir == SENS_DROITE) && (x < tete_turc->x)) ||
		         ((dir == SENS_GAUCHE) && (x > tete_turc->x)))) {
			charge_etape = 0;
			speed = 0;
			etape = 0;
			ss_etape = 0;
			dy = 0;
			etat = ETAT_TIRE;
			sbk_niveau.play(34);
			onCharge();
			return;
		} else {
			wait_for_charge = 0;
			charge_delay = 50 + rand() % 250;
			etape = 0;
			ss_etape = 0;
			etat = ETAT_SAUTE;
			dy = -7;
			lat_grav = 0;	// Sinon les sauts diffèrent par leur hauteur
			onSaute();
			return;
		}
	}
	if (dir == SENS_DROITE) {
		marche(speed);
		pic = pbk_ennemis[anime(anim_toad_marche_droite, 4, 12 - 3 * speed)];
	} else {
		marche(-speed);
		pic = pbk_ennemis[anime(anim_toad_marche_gauche, 4, 12 - 3 * speed)];
	}
	if (speed < TOAD_SPEED) {
		etape_speed++;
		if (etape_speed >= 30) {
			etape_speed = 0;
			speed++;
		}
	}
	colFromPic();
}
Exemplo n.º 7
0
void charger_menu (SDL_Surface *ecran,paramStruct p,int *choix,mapStruct *mp)
{
  TTF_Init();
  if (TTF_Init()==-1)
  {
    printf("erreur lors du chargement de la SDL_TTf");
  }
 TTF_Font *police_continuer=NULL,*police_jouer=NULL,*police_instructions=NULL,*police_quitter=NULL;

 police_jouer=TTF_OpenFont("data/police/brush.ttf",60);
 police_continuer=TTF_OpenFont("data/police/brush.ttf",60);
 police_instructions=TTF_OpenFont("data/police/brush.ttf",60);
 police_quitter=TTF_OpenFont("data/police/brush.ttf",60);

 //police et taille des phrases
 SDL_Color couleurBlanche={255,255,255};
 SDL_Surface *Jouer,*Continuer,*Instructions,*Quitter,*Titre,*image_bas;
 SDL_Rect position_jouer;
 SDL_Rect position_continuer;
 SDL_Rect position_instructions;
 SDL_Rect position_quitter;
 SDL_Rect position_titre;
 SDL_Rect position_image;
 SDL_Rect position_perso;

 placer_texte(&position_jouer,p.widthWindow/3,p.heightWindow/3);
 placer_texte(&position_continuer,p.widthWindow/3,p.heightWindow/3+70);
 placer_texte(&position_instructions,p.widthWindow/3,p.heightWindow/3+140);
 placer_texte(&position_quitter,p.widthWindow/3,p.heightWindow/3+210);
 placer_texte(&position_titre,p.widthWindow/2-664/2,0);
 placer_texte(&position_image,0,p.heightWindow-59);
 position_perso.x=0;
 position_perso.y=p.heightWindow-100;

 Jouer=TTF_RenderText_Blended(police_jouer,"> jouer",couleurBlanche);
 Continuer=TTF_RenderText_Blended(police_continuer,"> continuer",couleurBlanche);
 Instructions=TTF_RenderText_Blended(police_instructions,"> instructions",couleurBlanche);
 Quitter=TTF_RenderText_Blended(police_quitter,"> quitter",couleurBlanche);
 Titre=IMG_Load("data/menu/crazy_maze.bmp");
 image_bas=IMG_Load("data/menu/brique.bmp");
 image_bas=SDL_ResizeXY (image_bas,p.widthWindow,70,1);
 SDL_Surface *perso_marcheg=NULL,*perso_marched=NULL;
 perso_marcheg=IMG_Load("data/character/perso_marchedd.png");
 perso_marched=IMG_Load("data/character/perso_marchedg.png");

 int envie_de_jouer=0;
 int continuer=1;
 int marcher=0;
 SDL_Event event;
 int instruct=1;
 while (continuer)
 {
   SDL_WaitEvent(&event);
   switch(event.type)
   {
     case SDL_QUIT:
     continuer=0;
     *choix=-1;
     break;

     case SDL_MOUSEBUTTONUP:
         if (event.button.button == SDL_BUTTON_LEFT)
         {
            if(event.button.x>=position_jouer.x && event.button.x<=position_jouer.x+250 &&
               event.button.y>=position_jouer.y+20 && event.button.y<=position_jouer.y+70)
              {
                *choix=0;
                 continuer=0; // si on appuie sur jouer
                 envie_de_jouer=1;
                 page_chargement(ecran,p,1);
              }
               else if (event.button.x>=position_instructions.x && event.button.x<=position_instructions.x+250 &&
                       event.button.y>=position_instructions.y+20 && event.button.y<=position_instructions.y+70)
             {
                      int v=0;
                     while (instruct)
                     {
                     donner_instruction(ecran,&instruct,p,&continuer);
                     }
                    instruct=1;

             }
                 else if (event.button.x>=position_continuer.x && event.button.x<=position_continuer.x+250 &&
                       event.button.y>=position_continuer.y+20 && event.button.y<=position_continuer.y+70)
             {
                 if (sauvegarde(mp,&p)!=-1)
                 {
                 *choix=sauvegarde(mp,&p);
                 }
                 continuer=0;
             }
              else if(event.button.x>=position_quitter.x && event.button.x<=position_quitter.x+250 &&
               event.button.y>=position_quitter.y+20 && event.button.y<=position_quitter.y+70)
               {
                 *choix=-1;
                 continuer=0;
               }
         }
         break;
      case SDL_MOUSEMOTION:

            if(event.button.x>=position_jouer.x && event.button.x<=position_jouer.x+250 &&
                event.button.y>=position_jouer.y+20 && event.button.y<=position_jouer.y+70)
              {
                changer_police(&Jouer,"> jouer");

              }
              else if (event.button.x>=position_continuer.x && event.button.x<=position_continuer.x+250 &&
                       event.button.y>=position_continuer.y+20 && event.button.y<=position_continuer.y+70)
             {
                 changer_police(&Continuer,"> continuer");

             }
             else if (event.button.x>=position_instructions.x && event.button.x<=position_instructions.x+250 &&
                       event.button.y>=position_instructions.y+20 && event.button.y<=position_instructions.y+70)
             {
                 changer_police(&Instructions,"> instructions");

             }
             else if (event.button.x>=position_quitter.x && event.button.x<=position_quitter.x+250 &&
                       event.button.y>=position_quitter.y+20 && event.button.y<=position_quitter.y+70)
             {
                  changer_police(&Quitter,"> quitter");

             }
             else
             {
                mettre_texte_normal(&Jouer,"> jouer");
                mettre_texte_normal(&Continuer,"> continuer");
                mettre_texte_normal(&Instructions,"> instructions");
                mettre_texte_normal(&Quitter,"> quitter");

             }


     break;

   }
   if (envie_de_jouer==0)
   {
   SDL_FillRect(ecran,NULL,SDL_MapRGB(ecran->format,120,0,0));
   position_titre.x=p.widthWindow/2-664/2;
   position_titre.y=0;
   SDL_SetColorKey(Titre,SDL_SRCCOLORKEY,SDL_MapRGB(ecran->format,0,0,0));
   SDL_BlitSurface(Titre,NULL,ecran,&position_titre);
   SDL_BlitSurface(image_bas,NULL,ecran,&position_image);
   SDL_BlitSurface(Jouer,NULL,ecran,&position_jouer);
   SDL_BlitSurface(Continuer,NULL,ecran,&position_continuer);
   SDL_BlitSurface(Instructions,NULL,ecran,&position_instructions);
   SDL_BlitSurface(Quitter,NULL,ecran,&position_quitter);
   marche(ecran,&marcher,&position_perso, perso_marcheg, perso_marched,p);
   }

   SDL_Flip(ecran);

 }
 SDL_FreeSurface(perso_marcheg);
 SDL_FreeSurface(perso_marched);
 SDL_FreeSurface(Jouer);
 SDL_FreeSurface(Quitter);
 SDL_FreeSurface(Instructions);
 SDL_FreeSurface(Continuer);
 SDL_FreeSurface(Titre);
 SDL_FreeSurface(image_bas);

 TTF_CloseFont(police_jouer);
 TTF_CloseFont(police_continuer);
 TTF_CloseFont(police_instructions);
 TTF_CloseFont(police_quitter);
 TTF_Quit();
}