コード例 #1
0
void deroul_cmb(SDL_Surface *ecran, int mstr)
{
	cmb = 1;
	int continu = 1;
	init_enemy(mstr);
	choix_att = 0;
	img_cmb(ecran, mstr);
	void (* type_att[3])(SDL_Surface *ecran,int mstr) = {attaque_phy, attaque_mag, obj};
	while(continu && cmb)
	{
		aff_men(ecran);
	  	SDL_Event event;
		SDL_WaitEvent(&event);
		if(event.type == SDL_QUIT)
			continu = 0;
		else if (event.type == SDL_KEYDOWN)
        {
            SDLKey touche = event.key.keysym.sym;
			if (choix_att == 3 && ( touche == SDLK_a))
				continu = fuite(ecran, mstr);
			else if ( touche == SDLK_a)
				type_att[choix_att](ecran, mstr);
			else
				choix_menu(touche);
		}
	}
	lvl_up(ecran);
}
コード例 #2
0
ファイル: attaque.c プロジェクト: ablanchard/Nazcolique
void move_ap(sdl_c* map, int p)
{
        int i;

        for(i=0;i<map->nb_pj;i++)
        {
                if(i!=p)
                {
                        // CELUI QUI BOUGE X CELUI QUI NE BOUGE PAS
                        if((map->tab[p]->pos.x < map->tab[i]->pos.x + TAILLE_PIX)      // trop à droite
                                        && (map->tab[p]->pos.x + TAILLE_PIX > map->tab[i]->pos.x) // trop à gauche
                                        && (map->tab[p]->pos.y < map->tab[i]->pos.y + TAILLE_PIX) // trop en bas
                                        && (map->tab[p]->pos.y + TAILLE_PIX > map->tab[i]->pos.y)
                                        && (map->tab[p]->pv > 0))
                        {//COLLISION ON FRAPPE
                                map->tab[i]->pv = map->tab[i]->pv - map->tab[p]->deg;
                        }
                }
        }

        for(i=0;i<map->nb_pnj;i++)
        {
                if((map->tab[p]->pos.x < map->tac[i]->pos.x + TAILLE_PIX) // trop à droite 
                                && (map->tab[p]->pos.x + TAILLE_PIX > map->tac[i]->pos.x) // trop à gauche
                                && (map->tab[p]->pos.y < map->tac[i]->pos.y + TAILLE_PIX) // trop en bas
                                && (map->tab[p]->pos.y + TAILLE_PIX > map->tac[i]->pos.y)//##### +/- 3 Permet de faire le tour d'un autre pnj sans trop de soucis
                                && (map->tab[p]->pv > 0))
                {//COLLISION ON FRAPPE
                        map->tac[i]->pv = map->tac[i]->pv - map->tab[p]->deg;
                        if(map->tac[i]->pv < 0)
                                {
                                map->tab[p]->xp=map->tab[p]->xp+1+map->tac[i]->pos_s;
                                lvl_up(map,p);
                                }
                }
        }
}
コード例 #3
0
ファイル: jeu.c プロジェクト: Neferetheka/Nemesis
void combat (emplacement)
{
	//variables
	FILE* fichier = NULL;
	char path[50];
	long int nombre = 0;
	long int choix = 1;
	char nom[35];
	long int alea = 1;
	long min = 1;
	long max = 0;
	float degat = 0;
	float nbaleatoire = 0;
	long int i = 0;

	//caracs monstre & joueurs
	long int monstre_attaque, monstre_endu, monstre_pv, monstre_exp;
	long int joueur_force, joueur_intelligence, joueur_endurance, joueur_pv, joueur_pv_total;
	long int joueur_classe = 0;
	long int joueur_attaque = 0;
	long int joueur_niv;
	long int new_niveau = 1; 
	long int niv_actuel = 1;
	
	
	fichier = fopen("monstres/liste.ars", "r+");
	
	fscanf(fichier, "%ld", &nombre);

	max = nombre;
	
	alea = (rand() % (max - min + 1)) + min; //Alea indique le numero du monstre !
// 	printf("Nombre : %ld\n", alea);

	sprintf(path, "monstres/monstre%ld.ars", alea);
	
	fichier = fopen(path, "r+");
	
	fgets(nom, 35, fichier);

	
	printf("Il s\'agit d\'un %s", nom);
	
	//Maintenant qu'on a le nom du monstre, on prend ses caracs
	monstre_attaque = appel_carac_monstre (alea, 2); //INVOCATIOOOOOOOOOOOOOOOOOOOOOOOONNNNNNNN !!!!!!
	monstre_endu = appel_carac_monstre(alea, 3); //INVOCATION 2222222222222222222222222222222222 !!!!!!!!!!!!!!
	monstre_pv = appel_carac_monstre(alea, 4); //KAMAHAMEHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA!!!!!!
	monstre_exp = appel_carac_monstre(alea, 5);
	
// 	printf("Attaque : %ld\nEndu: %ld\npv:%ld\nexp : %ld\n", monstre_attaque, monstre_endu, monstre_pv, monstre_exp);
	
// 	printf("Attaque : %ld\n", monstre_attaque);
	
	
	//On prend les caracs du persos
	joueur_force = appel_carac_joueur(emplacement, 5);
	joueur_intelligence = appel_carac_joueur(emplacement, 6);
	joueur_endurance = appel_carac_joueur(emplacement, 7);
	joueur_pv = appel_carac_joueur(emplacement, 8);
	joueur_pv_total = appel_carac_joueur(emplacement, 9);
	joueur_niv = appel_carac_joueur(emplacement, 10);
	joueur_classe = appel_carac_joueur(emplacement, 4);
	
// 	printf("Attaque : %ld\n", joueur_niv);



        fclose(fichier);
	
	if (joueur_classe == 1)
	{
		joueur_attaque = joueur_force ;
	}
	
	else
	{
		joueur_attaque = joueur_intelligence ;
	}
	
	printf("\n%s vous attaque !\n",nom);
	while ((monstre_pv > 0) && (joueur_pv > 0))
		{
			
			nbaleatoire = floor(((rand() % ((joueur_attaque*5) - 1 + 1)) + 1)/50);
			degat = (joueur_attaque + nbaleatoire) - monstre_endu;
			if(degat < 0)
				degat = 0;
			printf("Vous attaquez %s et lui infligez %0.0f points de dégats\n", nom, degat);
			monstre_pv = monstre_pv - degat;

			
			nbaleatoire = floor(((rand() % ((monstre_attaque*5) - 1 + 1)) + 1) / 50);
			degat = (monstre_attaque + nbaleatoire) - joueur_endurance;
			if(degat < 0)
				degat = 0;
			printf("%s vous attaque et vous inflige %0.0f points de dégats\n", nom, degat);
			joueur_pv = joueur_pv - degat;	
				
		}

	if ((monstre_pv <= 0) && (joueur_pv > 0))
	{
		printf("\nVous avez vaincu %s !!! \n", nom);
		monstre_exp *= 4;
		printf("\nVous gagnez %ld points d'experience !\n\n", monstre_exp);
		
		niv_actuel = joueur_niv; //sauvegarde des xp du joueur
// 		printf("niv_actuel : %ld", niv_actuel);
		niv_actuel = conversion_xp(niv_actuel); //conversion des xp en niveau avant nouveaux xp


		joueur_niv = joueur_niv + monstre_exp; //gain de xp du monstre

		sauvegarde_carac(emplacement, 10, joueur_niv); //On sauvegarde le nombre de xp
		sauvegarde_carac(emplacement, 8, joueur_pv);
// 		
		new_niveau = conversion_xp(joueur_niv); //On genere le lvl du perso avec ses nouveaux xp
			
		if(niv_actuel < new_niveau)
			lvl_up(emplacement, new_niveau);
		
		
		
		
		
	}
	
	else if((joueur_pv <= 0) && (monstre_pv > 0))
	{
		printf("\nVous avez été vaincu par %s ...\n\n",nom);
		
		mort(emplacement);
	}
	else
	{
		printf("\n Dans une lutte sanglante, vous et %s vous êtes entretués, . \n\n", nom);
		
		mort(emplacement);
		
	}
	
	
	
	printf("\nVoulez-vous continuer à jouer (1), ou arrêter (2) ?\n");
	scanf("%ld", &choix);
	
	if(choix == 1)
		game(emplacement);
	else
	{
		quitter();
	}
	
	
	
}