diff --git a/SAE1.1/MaBatailleNavale.c b/SAE1.1/MaBatailleNavale.c new file mode 100644 index 0000000..4bf5374 --- /dev/null +++ b/SAE1.1/MaBatailleNavale.c @@ -0,0 +1,100 @@ +#include +#include +#include "biblioNavale.h" + +int main(void){ + int victoire=0; + int coup=0; + int joueur=1; + int PorteAvionJ1=0; + int CroiseurJ1=0; + int SousMarinJ1=0; + int MarinSousJ1=0; + int TorpilleurJ1=0; + int PorteAvionJ2=0; + int CroiseurJ2=0; + int SousMarinJ2=0; + int MarinSousJ2=0; + int TorpilleurJ2=0; + char PlateauJ1[10][10]={" "}; + char PlateauJ2[10][10]={" "}; + printf("Bienvenue sur cette simulation de la Bataille Navale.\n"); + printf("Votre objectif sera de détruire la totalite des navires adverses !\n"); + + printf("Joueur 1:\n"); + initPlateau(PlateauJ1); + + printf("Joueur 2:\n"); + initPlateau(PlateauJ2); + + while (victoire==0){ + while (joueur==1){ + printf("Au tour de Joueur 1\n\n\n"); + printf(" Joueur 1 Joueur 2\n"); + afficheduo(PlateauJ1,PlateauJ2); + printf("Veuillez saisir une coordonnée: "); + coup=jouerJoueur(PlateauJ2); + switch(coup){ + case -3: printf("\nCoup en dehors des limites, veuillez recommencer.\n");break; + + case -2: printf("\nCaractere non reconnu, veuillez recommencer.\n");break; + + case -1: printf("\nA l'eau\n");joueur=2;break; + + case 0: printf("\nTouche ! Vous pouvez rejouer !\n") ; PorteAvionJ1++; + (PorteAvionJ1==5)? printf("Coule !\n"):printf("Le bateau n'a pas encore coule.\n") ; break ; + + case 1: printf("\nTouche ! Vous pouvez rejouer !\n") ; CroiseurJ1++; + (CroiseurJ1==4)? printf("Coule !\n"):printf("Le bateau n'a pas encore coule.\n") ; break ; + + case 2: printf("\nTouche ! Vous pouvez rejouer !\n") ; SousMarinJ1++; + (SousMarinJ1==3)? printf("Coule !\n"):printf("Le bateau n'a pas encore coule.\n") ; break ; + + case 3: printf("\nTouche ! Vous pouvez rejouer !\n") ; MarinSousJ1++; + (MarinSousJ1==3)? printf("Coule !\n"):printf("Le bateau n'a pas encore coule.\n") ; break; + + case 4: printf("\nTouche ! Vous pouvez rejouer !\n") ; TorpilleurJ1++; + (TorpilleurJ1==2)? printf("Coule !\n"):printf("Le bateau n'a pas encore coule.\n") ; break ; + } if( PorteAvionJ1==5 && CroiseurJ1==4 && SousMarinJ1==3 && MarinSousJ1==3 && TorpilleurJ1==2 ){ + victoire=1; + joueur=0; + printf("Le Joueur 1 remporte la partie !\n\n"); + } + } + + while (joueur==2){ + printf("Au tour de Joueur 2\n\n\n"); + printf(" Joueur 1 Joueur 2\n"); + afficheduo(PlateauJ1,PlateauJ2); + printf("Veuillez saisir une coordonnée: "); + coup=jouerJoueur(PlateauJ1); + switch(coup){ + case -3: printf("\nCoup en dehors des limites, veuillez recommencer.\n");break; + + case -2: printf("\nCaractere non reconnu, veuillez recommencer.\n");break; + + case -1: printf("\nA l'eau\n");joueur=1;break; + + case 0: printf("\nTouche ! Vous pouvez rejouer !\n") ; PorteAvionJ1++; + (PorteAvionJ2==5)? printf("Coule !\n"):printf("Le bateau n'a pas encore coule.\n") ; break ; + + case 1: printf("\nTouche ! Vous pouvez rejouer !\n") ; CroiseurJ1++; + (CroiseurJ2==4)? printf("Coule !\n"):printf("Le bateau n'a pas encore coule.\n") ; break ; + + case 2: printf("\nTouche ! Vous pouvez rejouer !\n") ; SousMarinJ1++; + (SousMarinJ2==3)? printf("Coule !\n"):printf("Le bateau n'a pas encore coule.\n") ; break ; + + case 3: printf("\nTouche ! Vous pouvez rejouer !\n") ; MarinSousJ1++; + (MarinSousJ2==3)? printf("Coule !\n"):printf("Le bateau n'a pas encore coule.\n") ; break; + + case 4: printf("\nTouche ! Vous pouvez rejouer !\n") ; TorpilleurJ1++; + (TorpilleurJ2==2)? printf("Coule !\n"):printf("Le bateau n'a pas encore coule.\n") ; break ; + } if( PorteAvionJ2==5 && CroiseurJ2==4 && SousMarinJ2==3 && MarinSousJ2==3 && TorpilleurJ2==2 ){ + victoire=1; + joueur=0; + printf("Le Joueur 2 remporte la partie !\n\n"); + } + } + } + return EXIT_SUCCESS; +} \ No newline at end of file diff --git a/SAE1.1/Sujet.pdf b/SAE1.1/Sujet.pdf new file mode 100644 index 0000000..4fbacf0 Binary files /dev/null and b/SAE1.1/Sujet.pdf differ diff --git a/SAE1.1/biblioNavale.h b/SAE1.1/biblioNavale.h new file mode 100644 index 0000000..a48af3d --- /dev/null +++ b/SAE1.1/biblioNavale.h @@ -0,0 +1,80 @@ + + +/* +ajoutNavireAleatoire permet d'ajouter au tableau tab un Navire de taille t, et représenté par le caractère b. + +résultat : t cases consécutives de tab reçoivent le caractère b. + +fonctionnement : +La fonction choisit aléatoirement si le navire sera horizontal ou vertical, +puis en fonction de cela choisit aléatoirement la position de façon à ce que le navire ne dépasse pas du tableau. +retour : vide +*/ +void ajoutNavireAleatoire(char tab[][10],char b,int t); + + + +/* +verif vérifie que le tableau tab contient bien les navires demandés + +résultat : renvoie l'entier 1 si tab contient exactement 17 cases ne contenant pas un espace + renvoie 0 sinon. +*/ +int verif(char tab[][10]); + + +/* +affiche permet d'afficher sur la sortie standard le tableau t, sous forme de grille de bataille navale. +retour : vide +*/ +void affiche(char t[][10]); + + +/* +afficheduo permet d'afficher côte à côte les tableaux t et p, sous forme de grilles de bataille navale. +retour : vide +*/ +void afficheduo(char t[][10],char p[][10]); + + +/* +initPlateau permet à un joueur d'initialiser le tableau plat, en y plaçant ses navires. + +résultat : A la fin de la fonction, le tableau plat contient les 5 navires de la bataille navale, placés selon les règles. + +retour : vide + +fonctionnement : +Le joueur peut placer ses navires de deux façons : + - Aléatoirement, auquel cas la fonction appelle ajoutNavireAléatoire de façon adaptée afin d'obtenir le résultat. + - A la main, auquel cas le joueur doit dire si son navire est horizontal ou vertical, + et donner la coordonnée la plus nord-ouest. Si l'utilisateur place mal son Navire, il lui est demandé de le replacer. +*/ +void initPlateau(char plat[][10]); + + +/* +joueurJoueur permet à un joueur de jouer sur le tableau adv. + +résultat : L'utilisateur entre des coordonnées, le tableau est modifié pour indiquer s'il le coup est "à l'eau" ou "touche" + retourne un entier, correspondant au Navire touché : + -1 si le coup est à l'eau + 0 si le coup touche le Porte-Avion + 1 si le coup touche le Croiseur + 2 si le coup touche le Sous-Marin + 3 si le coup touche le Mous-Sarin + 4 si le coup touche le Torpilleur + -2 si la case contient un caractère non reconnu (ne devrait pas arriver) + -3 si le coup est hors plateau +*/ +int jouerJoueur(char adv[][10]); + +/* +navire renvoie une chaîne de caractères correspondant à Navire, selon l'entier entré : +résultat : selon l'entier i donnée en argument, navire renvoie : + Porte-Avion si i=1 + Croiseur si i=2 + Sous-Marin si i=3 + Mous-Sarin si i=4 +*/ +char* navire(int i); \ No newline at end of file