/** * \fn void partie() * \brief Permet le bon déroulement de la partie. * */ void partie(){ perso_vivant(); while(!victoire() && action != 5){ tour(); i_perso_actuel = 0; } if(action == 5); else printf("Le joueur %i a gagné !\n", victoire()); }
/** * \fn void tour() * \brief Permet le bon déroulement d'un tour * */ void tour(){ /*Tant qu'on a pas utilisé tous les persos, que personne n'a gagné et qu'on ne décide pas de retourner au menu principal*/ while(i_perso_actuel < i_taille_tab_perso && !victoire() && action != 5){ actio(&tab_perso[i_perso_actuel]); i_perso_actuel++; } }
/** * \fn void actio(t_perso *perso) * \param perso Personnage du tableau de perso * \brief Effectue une action pour un personnage * */ void actio(t_perso *perso){ if(perso->i_HP > 0){ int PA_actuel = perso->i_PA, PM_actuel = perso->i_PM; /*Permet de ne pas modifier les statistiques du personnage*/ do{ afficher_map(); affichage_perso(*perso); printf("%i PA, %i PM\n", PA_actuel, PM_actuel); printf("1 - Deplacement\n"); printf("2 - Attaque\n"); printf("3 - Passer\n"); printf("4 - Sauvegarder\n"); printf("5 - Menu Principal\n"); scanf("%i", &action); switch(action){ case 1: deplacement(&PM_actuel); break; case 2: attaque(&PA_actuel); break; case 3: printf("Passage de tour\n"); break; case 4: save(); break; case 5: break; } perso_vivant(); }while(action != 3 && action != 5 && !victoire()); } }
int jouerNiv(int niv) { t_listePerso* liste; liste=creer_liste_perso(); float mapx=0; float v_scroll=2; int test_appui=0; int compt=0; int fini=-1; ajouterPerso(liste,50,SCREEN_H/2); while (!key[KEY_ESC]) { compt++; if (key[KEY_ENTER] && test_appui==0) { ajouterPerso(liste,0,SCREEN_H/2); test_appui=1; } if (!key[KEY_ENTER] && test_appui==1) { test_appui =0; } fini=victoire(&mapx,&v_scroll,liste); if (fini!=-1) { return fini; } score(liste); scroll(&mapx,&v_scroll); fini=actualiserListePerso(liste,&compt,v_scroll); if (fini!=-1) { return fini; } tuer_Perso(liste); affichage(&mapx,liste); actualiser_bitmap_collision(&mapx,liste); rest(8); } return fini; }
/** * \fn void Lancer_Jeu() * \brief fonction qui permet de lancer et enregistrer la partie dans un fichier . */ void Lancer_Jeu() { Pion grille[N][M]; FILE * fichier; /*fichier de sauvegarde nom des joueurs et resultats partie !*/ fichier=fopen("resultats.txt","a+"); int joueur,j=0, colonne, compteur=0,rep=0,score, total,choix; char pion; printf("\n"); initialiser_grille(grille); afficher_grille(grille); printf(" \n Bienvenue dans le mode jeu puissance 4++ \n "); do { printf("\n Combien de joueurs vont jouer ? (maximum 4) : "); scanf("%i",&joueur); }while(joueur<2 || joueur>MAX_JOUEUR); printf(" \33[31m /! Pour rappel, un systeme d'aide a était mit en place, si vous demandez de l'aide \n"); printf(" alors que tous vos pions sont encerclés, ou aucun de vos pion n'est placé, \n"); printf(" vous serez alors pénalisé, votre tour sautera ! Bonne Partie ! / \33[30m \n"); while (compteur !=42) //tant que la grille n est pas remplie { j=joueursuivant(j,joueur); printf("\n\n\t\t==============## Joueur \33[31m %i\33[30m ##================\n\n",j); do{ printf("Tapez 1 si vous avez besoin d'aide sinon Tapez 2 : "); scanf("%i",&choix); }while(choix!=1 && choix!=2); switch(choix){ case 1: Help_Me(j,grille); afficher_grille(grille); rep=victoire(j,grille); if (rep==1) { printf("\n Le joueur %i a gagné ! \n", j); fprintf(fichier,"%i %i %i \n",j,1,1); }; break; case 2: printf("Dans quelle colonne voulez-vous jouez et quel type de pièce? \n Pleine (p), Creuse (c), Bloquante (b) "); scanf("%i%c",&colonne,&pion); while (colonne>M || colonne<1 ||( pion !='b' && pion !='c'&& pion!='p')) /*cas erreur*/ { printf("veuillez ressaisir le numero de la colonne (entre 1 et 7) et le type de la pièce "); scanf("%i%c",&colonne,&pion); } if (colonne_pleine(pion,colonne,grille))//on regarde si la colonne est pleine { printf("La colonne est pleine, ressaisissez la colonne et le type de piece "); scanf("%i%c",&colonne,&pion); } jouer(grille,colonne,pion,j) ; rep=victoire(j,grille); afficher_grille(grille); compteur++; if (rep==1){ printf("\n Le joueur %i a gagné ! \n", j); fprintf(fichier,"%i %i %i \n",j,1,1); }; break; } } if (compteur ==42){ // si la grille est remplie printf(" Match nul, la grille est remplie sans detection de victoire \n "); for(j=1;j<5;j++){ fprintf(fichier,"%i %i %i \n",j,0,0); } }else{ switch(j){ case 1:fprintf(fichier,"%i %i %i \n",2,0,0);fprintf(fichier,"%i %i %i \n",3,0,0);fprintf(fichier,"%i %i %i \n",4,0,0);break; case 2:fprintf(fichier,"%i %i %i \n",1,0,0);fprintf(fichier,"%i %i %i \n",3,0,0);fprintf(fichier,"%i %i %i \n",4,0,0);break; case 3:fprintf(fichier,"%i %i %i \n",1,0,0);fprintf(fichier,"%i %i %i \n",2,0,0);fprintf(fichier,"%i %i %i \n",4,0,0);break; case 4:fprintf(fichier,"%i %i %i \n",1,0,0);fprintf(fichier,"%i %i %i \n",2,0,0);fprintf(fichier,"%i %i %i \n",2,0,0);break; } } rewind(fichier);/*met le pointeur du fichier au debut*/ while(!feof(fichier)) { fscanf(fichier,"%i",&j);// afficher les joueurs et leur score mis a jour a voir fscanf(fichier,"%i",&score); fscanf(fichier,"%i",&total); printf ("joueur %i : score %i total %i \n",j,score,total); break; } fclose(fichier); }
int main(int argc, char** argv) { Input in; Context C; navire nav_j[NB_BOATS]; navire nav_c[NB_BOATS]; int limit[4] = {43, 340, 43, 348}; int i, j; int** grille_c= NULL; int** grille_j = NULL; int done = 0; int gagne = 0; grille_c= malloc(T_GRILLE*sizeof(int*)); grille_j = malloc(T_GRILLE*sizeof(int*)); if(grille_c== NULL || grille_j == NULL) exit(EXIT_FAILURE); for(i = 0; i < T_GRILLE; i++) { grille_c[i] = calloc(T_GRILLE, sizeof(int)); grille_j[i] = calloc(T_GRILLE, sizeof(int)); if(grille_c[i] == NULL || grille_j == NULL) exit(EXIT_FAILURE); } (void) argc; (void) argv; /*Initialisation SDL, SDL_ttf*/ if(initSDL(&C) == -1) return EXIT_FAILURE; srand(time(NULL)); do { /*Initialisation contexte*/ if(initC(&C) == -1) return EXIT_FAILURE; for(i = 0; i < T_GRILLE; i++) { for(j = 0; j < T_GRILLE; j++) { grille_c[j][i] = 0; grille_j[j][i] = 0; } } for(i = 0; i < NB_BOATS; i++) { nav_j[i].c = 0; nav_c[i].c = 0; } done = 0; gagne = 0; memset(&in, 0, sizeof(in)); memset(nav_j, 0, sizeof(nav_j)); memset(nav_c, 0, sizeof(nav_c)); /*Placement des nav_j...*/ chtxt(&C, PLACE_NAV_J); placing_boats(&in, &C, nav_j); while(in.key[SDLK_RETURN]) { UpdateEvents(&in); SDL_Delay(20); } computer_placing_boats(nav_c); chtxt(&C, PLACE_NAV_C); /*On place maintenant le viseur*/ C.cViseur.x = 43; C.cViseur.y = 43; /*Boucle de jeu*/ while (!gagne && !in.key[SDLK_q] && !in.key[SDLK_r]) { done = 0; while(!done) { UpdateEvents(&in); if(in.quit || in.key[SDLK_q] || in.key[SDLK_r]) break; if(Evolution(&in, &C.cViseur.x, &C.cViseur.y, limit, NULL, 0)) { if(case_test(C.cViseur.x, C.cViseur.y, grille_c)) { grille_c[((C.cViseur.y-43)/CELL_W)][((C.cViseur.x-43)/CELL_W)] = 1; if(!joueurAttaque(&C, nav_c)) { done = 1; chtxt(&C, "..."); } else chtxt(&C, TOUCHE_NAV_J); coule(&C, nav_j, nav_c); if(victoire(nav_j, nav_c) == 2) { gagne = 1; chtxt(&C, VICTOIRE_J); UpdateScreen(&C, nav_j); while(1) { UpdateEvents(&in); if(in.key[SDLK_r] || in.key[SDLK_q]) break; SDL_Delay(30); } } } } UpdateScreen(&C, nav_j); if(!in.key[SDLK_LEFT] && !in.key[SDLK_RIGHT] && !in.key[SDLK_DOWN] && !in.key[SDLK_UP] && !in.key[SDLK_RETURN]) SDL_Delay(20); else SDL_Delay(200); } UpdateEvents(&in); if(in.quit || in.key[SDLK_q] || in.key[SDLK_r]) break; UpdateScreen(&C, nav_j); SDL_Delay(200); while(ordiAttaque(&C, nav_j, grille_j)) { chtxt(&C, TOUCHE_NAV_C); coule(&C, nav_j, nav_c); UpdateScreen(&C, nav_j); SDL_Delay(400); } if(victoire(nav_j, nav_c) == 1) { gagne = 1; chtxt(&C, VICTOIRE_C); UpdateScreen(&C, nav_j); while(1) { UpdateEvents(&in); if(in.key[SDLK_r] || in.key[SDLK_q]) break; SDL_Delay(30); } } } if(in.quit || in.key[SDLK_q]) break; } while(1); /*On libère tout*/ C.nbimg = sizeof(C.images_v)/sizeof(SDL_Surface); for(i = 0; i < C.nbimg; i++) SDL_FreeSurface(C.images_v[i]); C.nbimg = sizeof(C.images_h)/sizeof(SDL_Surface); for(i = 0; i < C.nbimg; i++) SDL_FreeSurface(C.images_h[i]); SDL_FreeSurface(C.viseur); SDL_FreeSurface(C.touche); SDL_FreeSurface(C.c_rate); SDL_FreeSurface(C.coule); SDL_FreeSurface(C.infobar); SDL_FreeSurface(C.texte); C.nbimg = sizeof(C.misc)/sizeof(SDL_Surface); for(i = 0; i < C.nbimg; i++) SDL_FreeSurface(C.misc[i]); free(C.cNavires); for(i = 0; i < T_GRILLE; i++) { free(grille_j[i]); free(grille_c[i]); } free(grille_c); free(grille_j); TTF_CloseFont(C.police); TTF_Quit(); SDL_Quit(); return EXIT_SUCCESS; }