diff --git a/biblioNavale2.c b/biblioNavale2.c index 5f1ca7a..acb9776 100644 --- a/biblioNavale2.c +++ b/biblioNavale2.c @@ -1,145 +1,131 @@ -void ajoutNavireAleatoireDeux(char tab[][10],char b,int t); -int verifDeux(char tab[][10]); -void afficheDeux(char t[][10]) -void afficheduoDeux(char t[][10],char p[][10]){ - printf("_|"); - for (int i = 0; i < 10; i++) - { - printf("%d|",i); - } - printf(" "); - printf("_|"); - for (int i = 0; i < 10; i++) - { - printf("%d|",i); - } -printf("\n"); - - printf("A|") - for (int i = 0; i < 10; i++) - { - if(t[i][1]==0){ - printf(" |"); - } - if(t[i][1]==1){ - printf("X|"); - } - if(t[i][1]==2){ - printf(".|"); - } - } - printf(" "); - printf("A|") - for (int i = 0; i < 10; i++) - { - if(t[i][1]==0){ - printf(" |"); - } - if(t[i][1]==1){ - printf("X|"); - } - if(t[i][1]==2){ - printf(".|"); - } - } -printf("\n"); - printf("B|") - for (int i = 0; i < 10; i++) - { - if(t[i][2]==0){ - printf(" |"); - } - if(t[i][2]==1){ - printf("X|"); - } - if(t[i][2]==2){ - printf(".|"); - } - } - printf(" "); - printf("B|") - for (int i = 0; i < 10; i++) - { - if(t[i][2]==0){ - printf(" |"); - } - if(t[i][2]==1){ - printf("X|"); - } - if(t[i][2]==2){ - printf(".|"); - } - } - }; -void initPlateauDeux(char plat[][10]); -int jouerJoueurDeux(char adv[][10]); +/* biblioNavale.h */ +#include <stdlib.h> +#include <stdio.h> +#include <time.h> +void ajoutNavireAleatoire(char tab[][10], char b, int t) { + int direction = rand() % 2; // 0 for horizontal, 1 for vertical + int x, y; + int valid = 0; -char* navireDeux(int i){ -if(i==1){char navire[11]; -navire[0]='P'; -navire[1]='o'; -navire[2]='r'; -navire[3]='t'; -navire[4]='e'; -navire[5]='-'; -navire[6]='A'; -navire[7]='v'; -navire[8]='i'; -navire[9]='o'; -navire[10]='n'; -navire[11]='\0'; -return navire;} -if(i==2){char navire [8]; -navire[0]='C'; -navire[1]='r'; -navire[2]='o'; -navire[3]='i'; -navire[4]='s'; -navire[5]='e'; -navire[6]='u'; -navire[7]='r'; -navire[8]='\0'; -return navire;} -if(i==3){char navire[10]; -navire[0]='S'; -navire[1]='o'; -navire[2]='u'; -navire[3]='s'; -navire[4]='-'; -navire[5]='M'; -navire[6]='a'; -navire[7]='r'; -navire[8]='i'; -navire[9]='n'; -navire[10]='\0'; -return navire;} -if(i==4){char navire[10]; -navire[0]='M'; -navire[1]='o'; -navire[2]='u'; -navire[3]='s'; -navire[4]='-'; -navire[5]='S'; -navire[6]='a'; -navire[7]='r'; -navire[8]='i'; -navire[9]='n'; -navire[10]='\0'; -return navire;} -if(i==5){char navire[10]; -navire[0]='T'; -navire[1]='o'; -navire[2]='r'; -navire[3]='p'; -navire[4]='i'; -navire[5]='l'; -navire[6]='l'; -navire[7]='e'; -navire[8]='u'; -navire[9]='r'; -navire[10]='\0'; -return navire;} -if(i>5){return NULL;} -if(i<1){return NULL;} -}; \ No newline at end of file + while (!valid) { + if (direction == 0) { // Horizontal + x = rand() % (10 - t + 1); + y = rand() % 10; + place = 1; + for (int i = 0; i < t; i++) { + if (tab[y][x + i] != ' ') { + place = 0; + break; + } + } + } else { // Vertical + x = rand() % 10; + y = rand() % (10 - t + 1); + place = 1; + for (int i = 0; i < t; i++) { + if (tab[y + i][x] != ' ') { + place = 0; + break; + } + } + } + if (place) { + for (int i = 0; i < t; i++) { + if (direction == 0) { + tab[y][x + i] = b; + } else { + tab[y + i][x] = b; + } + } + } + } +} + +int verif(char tab[][10]) { + int nbcases = 0; + for (int i = 0; i < 10; i++) { + for (int j = 0; j < 10; j++) { + if (tab[i][j] != ' ') { + nbcases++; + } + } + } + return nbcases == 17 ; +} + +void affiche(char t[][10]) { + printf(" A B C D E F G H I J\n"); + for (int i = 0; i < 10; i++) { + printf("%2d ", i + 1); + for (int j = 0; j < 10; j++) { + printf("%c ", t[i][j]); + } + printf("\n"); + } +} + +void afficheduo(char t[][10], char p[][10]) { + printf(" A B C D E F G H I J A B C D E F G H I J\n"); + for (int i = 0; i < 10; i++) { + printf("%2d ", i + 1); + for (int j = 0; j < 10; j++) { + printf("%c ", t[i][j]); + } + printf(" %2d ", i + 1); + for (int j = 0; j < 10; j++) { + printf("%c ", p[i][j]); + } + printf("\n"); + } +} + +void initPlateau(char plat[][10]) { + for (int i = 0; i < 10; i++) { + for (int j = 0; j < 10; j++) { + plat[i][j] = ' '; + } + } + ajoutNavireAleatoire(plat, 'A', 5); // Porte-Avion + ajoutNavireAleatoire(plat, 'C', 4); // Croiseur + ajoutNavireAleatoire(plat, 'S', 3); // Sous-Marin + ajoutNavireAleatoire(plat, 'M', 3); // Mous-Sarin + ajoutNavireAleatoire(plat, 'T', 2); // Torpilleur +} + +int jouerJoueur(char adv[][10]) { + int x, y; + printf("Entrez les coordonnées (ex: A5): "); + char input[3]; + scanf("%2s", input); + + x = input[0] - 'A'; + y = input[1] - '1'; + if (x < 0 || x >= 10 || y < 0 || y >= 10) { + return -3; // Hors plateau + } + + char target = adv[y][x]; + switch (target) { + case ' ': adv[y][x] = '.'; return -1; // À l'eau + case 'A': adv[y][x] = 'X'; return 0; // Porte-Avion + case 'C': adv[y][x] = 'X'; return 1; // Croiseur + case 'S': adv[y][x] = 'X'; return 2; // Sous-Marin + case 'M': adv[y][x] = 'X'; return 3; // Mous-Sarin + case 'T': adv[y][x] = 'X'; return 4; // Torpilleur + case '.': + case 'X': return -2; // Case déjà touchée + default: return -2; // Caractère non reconnu + } +} + +char* navire(int i) { + switch (i) { + case 1: return "Porte-Avion"; + case 2: return "Croiseur"; + case 3: return "Sous-Marin"; + case 4: return "Mous-Sarin"; + case 5: return "Torpilleur"; + default: return "Inconnu"; + } +}