diff --git a/MaBatailleNavale2.c b/MaBatailleNavale2.c new file mode 100644 index 0000000..4b055ee --- /dev/null +++ b/MaBatailleNavale2.c @@ -0,0 +1,116 @@ + +/*Initialisation des bibliothèques nécéssaire*/ +#include +#include +#include "biblioNavale2.h" + +int main(void){ + int victoire=0; + int coup=0; + +/*Variable Joueur mise à 1 car c'est lui qui commence à jouer*/ + int joueur=1; + +/*Initialisation variables permettant de compter les dégats subit par les bateaux*/ + 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; + + /*Création des tableau de dimension 10 par 10 */ + char PlateauJ1[10][10]={" "}; + char PlateauJ2[10][10]={" "}; + +/*Message de lancement*/ + printf("Bienvenue sur cette simulation de la Bataille Navale.\n"); + printf("Votre objectif sera de détruire la totalité des navires adverses !\n"); + +/*Création du plateau du joueur 1 */ + printf("Joueur 1:\n"); + initPlateau2(PlateauJ1); + +/*Création du plateau du joueur 2 */ + printf("Joueur 2:\n"); + initPlateau2(PlateauJ2); + + + + while (victoire==0){ /*Tant que la variable victoire vaut 0 alors on continue*/ + while (joueur==1){ /*Tant que la variable Joueur vaut 1 alors le Joueur 1 joue */ + printf("Au tour de Joueur 1\n\n\n"); + printf(" Joueur 1 Joueur 2\n"); + afficheduo2(PlateauJ1,PlateauJ2); + printf("Veuillez saisir une coordonnée: "); /*Affichage des plateau sans montrer l'emplacement des bateaux*/ + coup=jouerJoueur2(PlateauJ2); /*Permet de jouer sur le plateau du joueur 2 */ + switch(coup){ + + case -3: printf("\nCoup en dehors des limites, veuillez recommencer.\n");break; /*Si le coup joué est hors des limites du plateau alors on affiche un message d'avertissement et le joueur1 rejoue*/ + + case -2: printf("\nCaractère non reconnu, veuillez recommencer.\n");break; /*Si le joueur1 entre des caractére qui ne sont pas des coordonnées alors on affiche un message d'avertissement et le joueur1 rejoue*/ + + case -1: printf("\nA l'eau\n");joueur=2;break; /*Si les coordonnées rentrées ne touchent pas de bateaux alors la variable joueur devient 2*/ + + case 0: printf("\nTouché ! Vous pouvez rejouer !\n") ; PorteAvionJ1++; /*Si le joueur1 touche le Porte-Avion alors la variable PorteAvionJ1 augmente de 1*/ + (PorteAvionJ1==5)? printf("Porte-avion ennemi coulé !\n"):printf("Le bateau n'a pas encore coulé.\n") ; break ; /*Si la variable PorteAvionJ1 est de 5 alors on annonce que le Porte-Avion ennemi est coulé*/ + + case 1: printf("\nTouché ! Vous pouvez rejouer !\n") ; CroiseurJ1++; /*Si le joueur1 touche le Croiseur alors la variable CroiseurJ1 augmente de 1*/ + (CroiseurJ1==4)? printf("Croiseur ennemi coulé !\n"):printf("Le bateau n'a pas encore coulé.\n") ; break ; /*Si la variable CroiseurJ1 est de 4 alors on annonce que le Croiseur ennemi est coulé*/ + + + case 2: printf("\nTouché ! Vous pouvez rejouer !\n") ; SousMarinJ1++; /*Si le joueur1 touche le Sous-marin alors la variable SousMarinJ1 augmente de 1*/ + (SousMarinJ1==3)? printf("Sous-marin ennemi coulé !\n"):printf("Le bateau n'a pas encore coulé.\n") ; break ;/*Si la variable SousMarinJ1 est de 3 alors on annonce que le Sous-Marin ennemi est coulé*/ + + case 3: printf("\nTouché ! Vous pouvez rejouer !\n") ; MarinSousJ1++; /*Si le joueur1 touche le deuxième Sous-marin alors la variable MarinSousJ1 augmente de 1*/ + (MarinSousJ1==3)? printf("Marin-sous ennemi coulé !\n"):printf("Le bateau n'a pas encore coulé.\n") ; break; /*Si la variable MarinSousJ1 est de 3 alors on annonce que le Marin-sous ennemi est coulé*/ + + case 4: printf("\nTouché ! Vous pouvez rejouer !\n") ; TorpilleurJ1++; /*Si le joueur1 touche le Torpilleur alors la variable TorpilleurJ1 augmente de 1*/ + (TorpilleurJ1==2)? printf("Torpilleur ennemi coulé !\n"):printf("Le bateau n'a pas encore coulé.\n") ; break ; /*Si la variable TorpilleurJ1 est de 2 alors on annonce que le Torpilleur ennemi est coulé*/ + } if( PorteAvionJ1==5 && CroiseurJ1==4 && SousMarinJ1==3 && MarinSousJ1==3 && TorpilleurJ1==2 ){ /*Si la variable PorteAvionJ1 vaut 5 ET que la variable CroiseurJ1 vaut 4 ET que la variable SousMarinJ1 vaut 3 ET que la variable MarinSousJ1 vaut 3 ET que la variable TorpilleurJ1 vaut 2 alors */ + victoire=1; /* On passe la variable victoire à 1*/ + joueur=0; /* Et on passe la variable Joueur à 0 pour arrêter la partie*/ + printf("Le Joueur 1 remporte la partie !\n\n"); /*Et enfin on annonce la victoire du joueur 1*/ + } + } + + while (joueur==2){ /*Tant que la variable Joueur vaut 2 alors le Joueur 2 joue */ + printf("Au tour de Joueur 2\n\n\n"); + printf(" Joueur 1 Joueur 2\n"); + afficheduo2(PlateauJ1,PlateauJ2); /*Affichage des plateau sans montrer l'emplacement des bateaux*/ + printf("Veuillez saisir une coordonnée: "); + coup=jouerJoueur2(PlateauJ1); /*Permet de jouer sur le plateau du joueur 1*/ + switch(coup){ + case -3: printf("\nCoup en dehors des limites, veuillez recommencer.\n");break; /*Si le coup joué est hors des limites du plateau alors on affiche un message d'avertissement et le joueur2 rejoue*/ + + case -2: printf("\nCaractère non reconnu, veuillez recommencer.\n");break; /*Si le joueur2 entre des caractére qui ne sont pas des coordonnées alors on affiche un message d'avertissement et le joueur1 rejoue*/ + + case -1: printf("\nA l'eau\n");joueur=1;break; /*Si les coordonnées rentrées ne touchent pas de bateaux alors la variable joueur devient 1*/ + + case 0: printf("\nTouché ! Vous pouvez rejouer !\n") ; PorteAvionJ2++; /*Si le joueur2 touche le Porte-Avion alors la variable PorteAvionJ2 augmente de 1*/ + (PorteAvionJ2==5)? printf("Porte-avion ennemi coulé !\n"):printf("Le bateau n'a pas encore coulé.\n") ; break ; /*Si la variable PorteAvionJ2 est de 5 alors on annonce que le Porte-Avion ennemi est coulé*/ + + case 1: printf("\nTouché ! Vous pouvez rejouer !\n") ; CroiseurJ2++; /*Si le joueur2 touche le Croiseur alors la variable CroiseurJ2 augmente de 1*/ + (CroiseurJ2==4)? printf("Croiseur ennemi coulé !\n"):printf("Le bateau n'a pas encore coulé.\n") ; break ; /*Si la variable CroiseurJ2 est de 4 alors on annonce que le Croiseur ennemi est coulé*/ + + case 2: printf("\nTouché ! Vous pouvez rejouer !\n") ; SousMarinJ2++; /*Si le joueur2 touche le Sous-marin alors la variable SousMarin augmente de 1*/ + (SousMarinJ2==3)? printf("Sous-marin ennemi coulé !\n"):printf("Le bateau n'a pas encore coulé.\n") ; break ; /*Si la variable SousMarin est de 3 alors on annonce que le Sous-Marin ennemi est coulé*/ + + case 3: printf("\nTouché ! Vous pouvez rejouer !\n") ; MarinSousJ2++; /*Si le joueur2 touche le deuxième Sous-marin alors la variable MarinSous augmente de 1*/ + (MarinSousJ2==3)? printf("Marin-sous ennemi coulé !\n"):printf("Le bateau n'a pas encore coulé.\n") ; break; /*Si la variable MarinSous est de 3 alors on annonce que le Marin-Sous ennemi est coulé*/ + + case 4: printf("\nTouché ! Vous pouvez rejouer !\n") ; TorpilleurJ2++; /*Si le joueur2 touche le Torpilleur alors la variable TorpilleurJ2 augmente de 1*/ + (TorpilleurJ2==2)? printf("Torpilleur ennemi coulé !\n"):printf("Le bateau n'a pas encore coulé.\n") ; break ; /*Si la variable TorpilleurJ2 est de 2 alors on annonce que le Torpilleur ennemi est coulé*/ + } if( PorteAvionJ2==5 && CroiseurJ2==4 && SousMarinJ2==3 && MarinSousJ2==3 && TorpilleurJ2==2 ){ /*Si la variable PorteAvionJ2 vaut 5 ET que la variable CroiseurJ2 vaut 4 ET que la variable SousMarinJ2 vaut 3 ET que la variable MarinSousJ2 vaut 3 ET que la variable TorpilleurJ2 vaut 2 alors */ + victoire=1; /* On passe la variable victoire à 1*/ + joueur=0; /* Et on passe la variable Joueur à 0 pour arrêter la parite*/ + printf("Le Joueur 2 remporte la partie !\n\n"); /*Et enfin on annonce la victoire du joueur 1*/ + } + } + } + return EXIT_SUCCESS; +} \ No newline at end of file diff --git a/MaBatailleNavale2.o b/MaBatailleNavale2.o new file mode 100755 index 0000000..1e1e3fb Binary files /dev/null and b/MaBatailleNavale2.o differ diff --git a/biblioNavale.o b/biblioNavale.o deleted file mode 100644 index 9ac039a..0000000 Binary files a/biblioNavale.o and /dev/null differ diff --git a/biblioNavale2.c b/biblioNavale2.c new file mode 100644 index 0000000..79ec292 --- /dev/null +++ b/biblioNavale2.c @@ -0,0 +1,453 @@ +#include +#include +#include + +int verif2(char tab[][10]){ + int v=0; + int i; + int j; + for (i=0;i<10;i++){ + for(j=0;j<10;j++){ + if(tab[i][j]!=' '){ + v++; + } + } + } if(v==17){ + return 1; + } return 0; +} + +void ajoutNavireAleatoire2(char tab[][10],char b,int t){ + srand(time(NULL)); + int o=(rand()%2); + int x; + int y; + int i; + int j; + int v=0; + int w=0; + if (o==0){ + while (v==0){ + srand(time(NULL)); + w=0; + x=(rand()%(10-t)); + y=(rand()%10); + for (i=x;i10 || i<0){ + printf("Navire hors limite\n\n"); + }else{ + j=coord; + if (j+5>10 || j<0){ + printf("Navire hors limite\n\n"); + }else{ + for(j=coord;j10 || i<0){ + printf("Navire hors limite\n\n"); + }else{ + j=coord; + if (j>10 || j<0){ + printf("Navire hors limite\n\n"); + }else{ + for(i=cord-'A';i10 || i<0){ + printf("Navire hors limite\n\n"); + }else{ + j=coord; + if (j+4>10 || j<0){ + printf("Navire hors limite\n\n"); + }else{ + for(j=coord;j10 || i<0){ + printf("Navire hors limite\n\n"); + }else{ + j=coord; + if (j>10 || j<0){ + printf("Navire hors limite\n\n"); + }else{ + for(i=cord-'A';i10 || i<0){ + printf("Navire hors limite\n\n"); + }else{ + j=coord; + if (j+3>10 || j<0){ + printf("Navire hors limite\n\n"); + }else{ + for(j=coord;j10 || i<0){ + printf("Navire hors limite\n\n"); + }else{ + j=coord; + if (j>10 || j<0){ + printf("Navire hors limite\n\n"); + }else{ + for(i=cord-'A';i10 || i<0){ + printf("Navire hors limite\n\n"); + }else{ + j=coord; + if (j+3>10 || j<0){ + printf("Navire hors limite\n\n"); + }else{ + for(j=coord;j10 || i<0){ + printf("Navire hors limite\n\n"); + }else{ + j=coord; + if (j>10 || j<0){ + printf("Navire hors limite\n\n"); + }else{ + for(i=cord-'A';i10 || i<0){ + printf("Navire hors limite\n\n"); + }else{ + j=coord; + if (j+2>10 || j<0){ + printf("Navire hors limite\n\n"); + }else{ + for(j=coord;j10 || i<0){ + printf("Navire hors limite\n\n"); + }else{ + j=coord; + if (j>10 || j<0){ + printf("Navire hors limite\n\n"); + }else{ + for(i=cord-'A';i10 || x<0){ + return -3; + } + if (y>10 || y<0){ + return -3; + } switch(adv[x][y]){ + case 'A': adv[x][y]='x' ; return 0; + case 'C': adv[x][y]='x' ; return 1; + case 'S': adv[x][y]='x' ; return 2; + case 'M': adv[x][y]='x' ; return 3; + case 'T': adv[x][y]='x' ; return 4; + case ' ': adv[x][y]='.' ;return -1; + } return -2; +} \ No newline at end of file diff --git a/biblioNavale2.h b/biblioNavale2.h new file mode 100644 index 0000000..1bd81d0 --- /dev/null +++ b/biblioNavale2.h @@ -0,0 +1,70 @@ + + +/* +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 ajoutNavireAleatoire2(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 verif2(char tab[][10]); + + +/* +affiche permet d'afficher sur la sortie standard le tableau t, sous forme de grille de bataille navale. +retour : vide +*/ +void affiche2(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 afficheduo2(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 initPlateau2(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 jouerJoueur2(char adv[][10]); \ No newline at end of file diff --git a/biblioNavale2.o b/biblioNavale2.o new file mode 100644 index 0000000..2b0457a Binary files /dev/null and b/biblioNavale2.o differ