SAe/biblioNavale2.c
2023-01-06 00:55:08 +01:00

453 lines
9.0 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
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;i<x+t;i++){
if(tab[i][y]!=' '){
w=1;
}
}if(w==0){
for (i=x;i<x+t;i++){
tab[i][y]=b;
v=1;
}
}
}
}else{
while (v==0){
srand(time(NULL));
w=0;
x=(rand()%10);
y=(rand()%(10-t));
for (j=y;j<y+t;j++){
if(tab[x][j]!=' '){
w=1;
}
}if(w==0){
for (j=y;j<y+t;j++){
tab[x][j]=b;
v=1;
}
}
}
}
}
void affiche2(char t[][10]){
int i;
int j;
char c='A';
printf("_|0|1|2|3|4|5|6|7|8|9|\n");
for(i=0;i<10;i++){
printf("%c|",c);
for(j=0;j<10;j++){
printf("%c|",t[i][j]);
} c++;
putchar('\n');
} putchar('\n');
}
void afficheduo2(char t[][10],char p[][10]){
int i;
int j;
int h;
char c='A';
printf("_|0|1|2|3|4|5|6|7|8|9| _|0|1|2|3|4|5|6|7|8|9|\n");
for(i=0;i<10;i++){
printf("%c|",c);
for(j=0;j<10;j++){
if(t[i][j]!='x' && t[i][j]!='.'){
printf(" |");
}else{
printf("%c|",t[i][j]);
}
} printf(" %c|",c);
for (h=0;h<10;h++){
if(p[i][h]!='x' && p[i][h]!='.'){
printf(" |");
}else{
printf("%c|",p[i][h]);
} } c++;
putchar('\n');
} putchar('\n');
}
void initPlateau2(char plat[][10]){
char c;
char o;
int a;
char cord;
int coord;
int i=0;
int j=0;
int v=0;
int w=0;
printf("Voulez vous placez vos navires à la (M)ain ou de manière (A)léatoire ?\n\n");
scanf(" %c",&c);
while(c!='M' && c!='A'){
scanf(" %c",&c);
} if (c=='A'){
for (i=0;i<10;i++){
for(j=0;j<10;j++){
plat[i][j]=' ';
}
} ajoutNavireAleatoire2(plat,'A',5);
ajoutNavireAleatoire2(plat,'C',4);
ajoutNavireAleatoire2(plat,'S',3);
ajoutNavireAleatoire2(plat,'M',3);
ajoutNavireAleatoire2(plat,'T',2);
printf("Les navires ont été placé de manière aléatoire\n\n");
} else{
printf("Vous avez choisis de placer vos navires.\n\n");
printf("Veuillez renseignez l'orientation du navire ((h)orizontal ou (v)ertical) ainsi que la coordonnée la plus au nord-ouest de la manière suivante: h,A2\n\n");
for (i=0;i<10;i++){
for(j=0;j<10;j++){
plat[i][j]=' ';
}
} printf("Placez votre Porte-(A)vion (longueur 5)\n\n");
while(v==0){
while((a=getchar())!='\n' && c != EOF){}
affiche2(plat);
w=0;
scanf(" %c,%c%d",&o,&cord,&coord);
if(o=='h'){
i=cord-'A';
if (i>10 || 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;j<coord+5;j++){
if(plat[i][j]!=' '){
w=1;
}
} if(w==0){
for(j=coord;j<coord+5;j++){
plat[i][j]='A';
v=1;
}
}else{
printf("Navire empiète sur un autre\n\n");
}
}
}
}else{
if(o=='v'){
i=cord-'A';
if (i+5>10 || 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';i<cord-'A'+5;i++){
if(plat[i][j]!=' '){
w=1;
}
}if(w==0){
for(i=cord-'A';i<cord-'A'+5;i++){
plat[i][j]='A';
v=1;
}
}else{
printf("Navire empiète sur un autre\n\n");
}
}
}
}else{
printf("Navire hors limite\n\n");
}
}
} printf("Placez votre (C)roiseur (longueur 4)\n\n");
v=0;
while(v==0){
while((a=getchar())!='\n' && c != EOF){}
affiche2(plat);
w=0;
scanf( "%c,%c%d",&o,&cord,&coord);
if(o=='h'){
i=cord-'A';
if (i>10 || 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;j<coord+4;j++){
if(plat[i][j]!=' '){
w=1;
}
} if(w==0){
for(j=coord;j<coord+4;j++){
plat[i][j]='C';
v=1;
}
}else{
printf("Navire empiète sur un autre\n\n");
}
}
}
}else{
if(o=='v'){
i=cord-'A';
if (i+4>10 || 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';i<cord-'A'+4;i++){
if(plat[i][j]!=' '){
w=1;
}
}if(w==0){
for(i=cord-'A';i<cord-'A'+4;i++){
plat[i][j]='C';
v=1;
}
}else{
printf("Navire empiète sur un autre\n\n");
}
}
}
}else{
printf("Navire hors limite\n\n");
}
}
} printf("Placez votre (S)ous-marin (longueur 3)\n\n");
v=0;
while(v==0){
while((a=getchar())!='\n' && c != EOF){}
affiche2(plat);
w=0;
scanf( "%c,%c%d",&o,&cord,&coord);
if(o=='h'){
i=cord-'A';
if (i>10 || 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;j<coord+3;j++){
if(plat[i][j]!=' '){
w=1;
}
} if(w==0){
for(j=coord;j<coord+3;j++){
plat[i][j]='S';
v=1;
}
}else{
printf("Navire empiète sur un autre\n\n");
}
}
}
}else{
if(o=='v'){
i=cord-'A';
if (i+3>10 || 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';i<cord-'A'+3;i++){
if(plat[i][j]!=' '){
w=1;
}
}if(w==0){
for(i=cord-'A';i<cord-'A'+3;i++){
plat[i][j]='S';
v=1;
}
}else{
printf("Navire empiète sur un autre\n\n");
}
}
}
}else{
printf("Navire hors limite\n\n");
}
}
} printf("Placez votre (M)arin-sous (longueur 3)\n\n");
v=0;
while(v==0){
while((a=getchar())!='\n' && c != EOF){}
affiche2(plat);
w=0;
scanf( "%c,%c%d",&o,&cord,&coord);
if(o=='h'){
i=cord-'A';
if (i>10 || 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;j<coord+3;j++){
if(plat[i][j]!=' '){
w=1;
}
} if(w==0){
for(j=coord;j<coord+3;j++){
plat[i][j]='M';
v=1;
}
}else{
printf("Navire empiète sur un autre\n\n");
}
}
}
}else{
if(o=='v'){
i=cord-'A';
if (i+3>10 || 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';i<cord-'A'+3;i++){
if(plat[i][j]!=' '){
w=1;
}
}if(w==0){
for(i=cord-'A';i<cord-'A'+3;i++){
plat[i][j]='M';
v=1;
}
}else{
printf("Navire empiète sur un autre\n\n");
}
}
}
}else{
printf("Navire hors limite\n\n");
}
}
} printf("Placez votre (T)orpilleur (longueur 2)\n\n");
v=0;
while(v==0){
while((a=getchar())!='\n' && c != EOF){}
affiche2(plat);
w=0;
scanf( "%c,%c%d",&o,&cord,&coord);
if(o=='h'){
i=cord-'A';
if (i>10 || 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;j<coord+2;j++){
if(plat[i][j]!=' '){
w=1;
}
} if(w==0){
for(j=coord;j<coord+2;j++){
plat[i][j]='T';
v=1;
}
}else{
printf("Navire empiète sur un autre\n\n");
}
}
}
}else{
if(o=='v'){
i=cord-'A';
if (i+2>10 || 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';i<cord-'A'+2;i++){
if(plat[i][j]!=' '){
w=1;
}
} if(w==0){
for(i=cord-'A';i<cord-'A'+2;i++){
plat[i][j]='T';
v=1;
}
}else{
printf("Navire empiète sur un autre\n\n");
}
}
}
}else{
printf("Navire hors limite\n\n");
}
}
}
} if (verif2(plat)==1){
printf("Tout les navires ont bien été placé\n\n");
} else{
printf("Nombre de case navire incorrect\n\n");
}
}
int jouerJoueur2(char adv[][10]){
char c;
int x;
int y;
scanf(" %c%d",&c,&y);
x=c-'A';
if (x>10 || 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;
}