6 Janvier
This commit is contained in:
parent
b5a55e6e39
commit
e27dcb264c
116
MaBatailleNavale2.c
Normal file
116
MaBatailleNavale2.c
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
|
||||||
|
/*Initialisation des bibliothèques nécéssaire*/
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#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;
|
||||||
|
}
|
BIN
MaBatailleNavale2.o
Executable file
BIN
MaBatailleNavale2.o
Executable file
Binary file not shown.
BIN
biblioNavale.o
BIN
biblioNavale.o
Binary file not shown.
453
biblioNavale2.c
Normal file
453
biblioNavale2.c
Normal file
@ -0,0 +1,453 @@
|
|||||||
|
#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;
|
||||||
|
}
|
70
biblioNavale2.h
Normal file
70
biblioNavale2.h
Normal file
@ -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]);
|
BIN
biblioNavale2.o
Normal file
BIN
biblioNavale2.o
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user