fuuuuusion hah
This commit is contained in:
parent
4f1371136f
commit
329171907d
366
biblioNavale2.c
Normal file
366
biblioNavale2.c
Normal file
@ -0,0 +1,366 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
|
||||
|
||||
int verifDeux(char tab[][10])
|
||||
{
|
||||
int verif = 0; /*Variable qui compte le nombre de case qui ne contiennent pas un espace*/
|
||||
for(int i = 0; i < 10; i++)
|
||||
{
|
||||
for(int j = 0; j < 10; j++)
|
||||
{
|
||||
if(tab[i][j]!=' ')
|
||||
{
|
||||
verif++;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(verif == 17)
|
||||
{
|
||||
return 1;
|
||||
}else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
void afficheDeux(char t[][10])
|
||||
{
|
||||
/*Numerotation des colonnes du tableau*/
|
||||
printf("_|");
|
||||
for (int i = 0; i < 10; ++i)
|
||||
{
|
||||
printf("%d|",i );
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
/*interieur du tableau*/
|
||||
for (int i = 0; i < 10; ++i)
|
||||
{
|
||||
printf("%c|",65+i); /*Affiche la lettre de la ligne*/
|
||||
for (int j = 0; j < 10; ++j)
|
||||
{
|
||||
printf("%c|",t[i][j]); /*la lettre de la case*/
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
void afficheduoDeux(char t[][10],char p[][10])
|
||||
{
|
||||
/*Numerotation des colonnes du Tab2*/
|
||||
printf("_|");
|
||||
for (int i = 0; i < 10; ++i)
|
||||
{
|
||||
printf("%d|",i );
|
||||
}
|
||||
printf(" ");
|
||||
|
||||
/*Numerotation des colonnes du Tab2*/
|
||||
printf("_|");
|
||||
for (int i = 0; i < 10; ++i)
|
||||
{
|
||||
printf("%d|",i );
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
|
||||
for (int i = 0; i < 10; ++i)
|
||||
{
|
||||
/*interieur du tab 1*/
|
||||
printf("%c|",65+i); /*Affiche la lettre de la ligne*/
|
||||
for (int j = 0; j < 10; ++j)
|
||||
{
|
||||
if (t[i][j]!='x') /*Si la case na pas encore été attaqué ou qu'elle contient un bateau*/
|
||||
{
|
||||
if (t[i][j]=='.') /*Affiche un point si la case a deja été attaqué et rien na été touché*/
|
||||
{
|
||||
printf(".|");
|
||||
}else
|
||||
{
|
||||
printf(" |"); /*Affiche rien (un espace) si la case na pas encore été affecté*/
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("%c|",t[i][j]); /*Affiche les case vide*/
|
||||
}
|
||||
}
|
||||
|
||||
/*interieur du tab 2*/ /*IDEM*/
|
||||
printf(" %c|",65+i);
|
||||
for (int j = 0; j < 10; ++j)
|
||||
{
|
||||
if (p[i][j]!='x')
|
||||
{
|
||||
if (p[i][j]=='.')
|
||||
{
|
||||
printf(".|");
|
||||
}else
|
||||
{
|
||||
printf(" |");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("%c|",p[i][j]);
|
||||
}
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
int jouerJoueurDeux(char t[][10])
|
||||
{
|
||||
char lettre;
|
||||
char lettre2;
|
||||
scanf(" %c%c",&lettre,&lettre2);
|
||||
int i = lettre; /*Conversion des valeurs lue par scanf en entier pour acceder au variables du tableau*/
|
||||
int j = lettre2;
|
||||
i -= 65;
|
||||
j -= 48;
|
||||
if ((i>=0)&&(i<10)&&(j>=0)&&(j<10)) /*Verifie que les entier sont entre 0 et 9 (inclus)*/
|
||||
{
|
||||
char result = t[i][j];
|
||||
if(result==' ')
|
||||
{
|
||||
t[i][j]='.'; /*La case est vide*/
|
||||
while( (lettre=getchar())!= '\n' && lettre != EOF) { } /*Ces boucles while vide le buffer pour que scanf redemande une entrée utilisateur*/
|
||||
return -1;
|
||||
}
|
||||
else /*Ci dessous si la case contient un bateau et le return associé*/
|
||||
{
|
||||
if(result=='A')
|
||||
{
|
||||
t[i][j]='x';
|
||||
while( (lettre=getchar())!= '\n' && lettre != EOF) { }
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(result=='C')
|
||||
{
|
||||
t[i][j]='x';
|
||||
while( (lettre=getchar())!= '\n' && lettre != EOF) { }
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(result=='S')
|
||||
{
|
||||
t[i][j]='x';
|
||||
while( (lettre=getchar())!= '\n' && lettre != EOF) { }
|
||||
return 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(result=='M')
|
||||
{
|
||||
t[i][j]='x';
|
||||
while( (lettre=getchar())!= '\n' && lettre != EOF) { }
|
||||
return 3;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(result=='T')
|
||||
{
|
||||
t[i][j]='x';
|
||||
while( (lettre=getchar())!= '\n' && lettre != EOF) { }
|
||||
return 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
while( (lettre=getchar())!= '\n' && lettre != EOF) { }
|
||||
return -2; /*Si le charactere n'est pas reconnue*/
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
while( (lettre=getchar())!= '\n' && lettre != EOF) { }
|
||||
return -3; /*Si les entier depassent les bornes du tableau*/
|
||||
}
|
||||
}
|
||||
|
||||
/* Erreur de Segmentation??? que on arrive pas a resoudre et donc on ne connait pas la cause meme apres avoir defini i de force
|
||||
char nav[5][13]={"Porte-Avion","Croiseur","Sous-Marin","Mous-Marin","Torpilleur"};
|
||||
char* navireDeux(int i)
|
||||
{
|
||||
return nav[i];
|
||||
}
|
||||
*/
|
||||
|
||||
void ajoutNavireAleatoireDeux(char tab[][10],char b,int t)
|
||||
{
|
||||
/*Declaration des variables*/
|
||||
int random = rand();
|
||||
int verif = 0;
|
||||
int x;
|
||||
int y;
|
||||
if ((random%2)==0) /*Choix de l'orientation du bateau aléatoire*/
|
||||
{
|
||||
/*horizontal*/
|
||||
do
|
||||
{
|
||||
random = rand(); /*Choix des coordonées du bateau de maniere aléatoire*/
|
||||
verif = 0;
|
||||
x = random%(10-t);
|
||||
y = random%10;
|
||||
for (int i = 0; i < t; ++i)
|
||||
{
|
||||
if (tab[x+i][y]!=' ') /*Verifie si les cases que la bateau compte prendre sont libre*/
|
||||
{
|
||||
verif++;
|
||||
}
|
||||
}
|
||||
}while(verif!=0); /*Repete jusqua que l'on trouve des coordonées aleatorie libre sur le plateau*/
|
||||
for (int i = 0; i < t; ++i)
|
||||
{
|
||||
tab[x+i][y]=b; /*Place le navire*/
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/*vertical*/ /*Idem mais en vertical*/
|
||||
do
|
||||
{
|
||||
random = rand();
|
||||
verif = 0;
|
||||
x = random%10;
|
||||
y = random%(10-t);
|
||||
for (int i = 0; i < t; ++i)
|
||||
{
|
||||
if (tab[x][y+i]!=' ')
|
||||
{
|
||||
verif++;
|
||||
}
|
||||
}
|
||||
}while(verif!=0);
|
||||
for (int i = 0; i < t; ++i)
|
||||
{
|
||||
tab[x][y+i]=b;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void initPlateauDeux(char plat[][10])
|
||||
{
|
||||
srand(time(NULL)); /*Changement de la seed pour l'aleatoire*/
|
||||
char placement;
|
||||
char lettre;
|
||||
do
|
||||
{
|
||||
printf("Souhaitez placer vos navires à la (M)ain, ou (A)leatoirement ?\n");
|
||||
scanf(" %c",&placement);
|
||||
while( (lettre=getchar())!= '\n' && lettre != EOF) { } /*Vide le buffer pour la prochaine iteration*/
|
||||
}while(!(placement=='A'||placement=='M')); /*Repete Jusqua que l'utilisateur rentre Un des deux mode de placement de bateau*/
|
||||
/*ALEATOIRE*/
|
||||
if (placement=='A')
|
||||
{
|
||||
for (int i = 0; i < 10; ++i)
|
||||
{
|
||||
for (int j = 0; j < 10; ++j)
|
||||
{
|
||||
plat[i][j]=' '; /*rempli le plateau de case vide*/
|
||||
}
|
||||
}
|
||||
ajoutNavireAleatoireDeux(plat,'A',5); /*Porte-Avion*/
|
||||
ajoutNavireAleatoireDeux(plat,'C',4); /*Croiseur*/
|
||||
ajoutNavireAleatoireDeux(plat,'S',3); /*Sous-marin*/
|
||||
ajoutNavireAleatoireDeux(plat,'M',3); /*Mous-marin*/
|
||||
ajoutNavireAleatoireDeux(plat,'T',2); /*Torpilleur*/
|
||||
}
|
||||
else
|
||||
{
|
||||
/*Manuel*/
|
||||
for (int i = 0; i < 10; ++i)
|
||||
{
|
||||
for (int j = 0; j < 10; ++j)
|
||||
{
|
||||
plat[i][j]=' '; /*Rempli le plateau de case vide*/
|
||||
}
|
||||
}
|
||||
char lettre;
|
||||
char c; /*Variable juste pour vider le buffer*/
|
||||
int y;
|
||||
int x;
|
||||
int verif = 0;
|
||||
printf("Vous devez placer vos navires.\nPour chaque navire, indiquez horizontal (h) ou vertical (v), suivi de la case la plus au nord-ouest (ex : h,E4).\n");
|
||||
|
||||
char nomBateaux[5]={'A','C','S','M','T'};
|
||||
int tailleBateaux[5]={5,4,3,3,2};
|
||||
for (int j = 0; j < 5; ++j) /*Repete pour chaque type de bateau*/
|
||||
{
|
||||
afficheDeux(plat);
|
||||
do
|
||||
{
|
||||
y=11;
|
||||
lettre='Z';
|
||||
printf("Placer votre %c (longueur %d) :\n", nomBateaux[j],tailleBateaux[j]);
|
||||
scanf(" %c,%c%d",&placement,&lettre,&y);
|
||||
x = lettre;
|
||||
x -= 65;
|
||||
verif = 1;
|
||||
if ((x>=0)&&(x<10)&&(y>=0)&&(y<10)&&(y+tailleBateaux[j])<10&&(x+tailleBateaux[j])<10) /*Verifie si les coordonées proposée par l'utilisateur sont correct*/
|
||||
{
|
||||
|
||||
if (placement=='v') /*Si l'utilisateur propose vertival il verifie si il y a un bateau sur une de ces cases */
|
||||
{
|
||||
for (int i = 0; i < tailleBateaux[j]; ++i)
|
||||
{
|
||||
if (plat[x+i][y]!=' ')
|
||||
{
|
||||
verif++;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (placement=='h') /*Si l'utilisateur propose horizontal il verifie si il y a un bateau sur une de ces cases */
|
||||
{
|
||||
for (int i = 0; i < tailleBateaux[j]; ++i)
|
||||
{
|
||||
if (plat[x][y+i]!=' ')
|
||||
{
|
||||
verif++;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (verif>1)
|
||||
{
|
||||
printf("Navire empiete sur un autre.\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (placement=='v') /*place les bateaux verticalement*/
|
||||
{
|
||||
for (int i = 0; i < tailleBateaux[j]; ++i)
|
||||
{
|
||||
plat[x+i][y]=nomBateaux[j];
|
||||
verif = 0;
|
||||
}
|
||||
}
|
||||
if (placement=='h') /*place les bateaux horizontalement*/
|
||||
{
|
||||
for (int i = 0; i < tailleBateaux[j]; ++i)
|
||||
{
|
||||
plat[x][y+i]=nomBateaux[j];
|
||||
verif = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Navire sortant des limites\n");
|
||||
while( (c=getchar())!= '\n' && c != EOF) { } /*vide le buffer pour la prochaine iteration*/
|
||||
}
|
||||
}while(verif>0);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user