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); }
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); } } } }
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(); } }