fuuuuusion hah
This commit is contained in:
		
							
								
								
									
										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);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user