Advertisement
Guest User

Untitled

a guest
Jun 22nd, 2017
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 8.98 KB | None | 0 0
  1. #include "navale.h"
  2.  
  3. void effaceEcran(){
  4.     system("cls");
  5. }
  6.  
  7. void initFlotteJoueur(Flotte *flotteJoueur1, Flotte *flotteJoueur2, Case mCase){
  8.     int tbateau = 0;
  9.     for (int i=0;i<NBBATEAU;i++){
  10.         do{
  11.  
  12.             printf("Joueur 1, entrez la taille du bateau N°%d comprise entre 1(minimum) et %d(maximum)\n",i+1,MAXCASE);
  13.             scanf("%d",&tbateau);
  14.             printf("\n");
  15.             if (tbateau<1||tbateau>MAXCASE){
  16.                 printf("\nfaux!\n Entrer une valeur entre 0 et 50 (compris)\n");
  17.             }
  18.         }while(tbateau<1||tbateau>MAXCASE);
  19.         flotteJoueur1->nBateau[i]=(createBateau(mCase,tbateau));
  20.     }
  21.  
  22.  
  23.     for (int i=0;i<NBBATEAU;i++){
  24.         do{
  25.             printf("Joueur 2, entrez la taille du bateau N°%d comprise entre 1(minimum) et %d(maximum)\n",i+1,MAXCASE);
  26.             scanf("%d",&tbateau);
  27.             printf("\n");
  28.  
  29.         }while(tbateau<1||tbateau>MAXCASE);
  30.         flotteJoueur2->nBateau[i]=createBateau(mCase,tbateau);
  31.     }
  32.  
  33. }
  34.  
  35. Bateau createBateau(Case nCase, int taille){
  36. Bateau unBateau;
  37. int l,c;
  38. int tabx[8]={-1,-1,1,1,0,0,-1,1};
  39. int taby[8]={-1,1,-1,1,-1,1,0,0};
  40. for (int i=0;i<taille;i++){
  41.     if (i==0){
  42.         do{
  43.             printf("Entrez la position de la proue du bateau en x\n");
  44.             scanf("%d",&c);
  45.             printf("Entrez la position de la proue du bateau en Y\n");
  46.             scanf("%d",&l);
  47.         }while(l<0 || l>MAXL || c<0 || c>MAXC);
  48.     }
  49.     nCase.col=c;
  50.     nCase.ligne=l;
  51.     Case temp;
  52.     if (l>0 || l<MAXL || c>0 || c<MAXC){
  53.         switch (i){
  54.         case 0:
  55.             createCase(l,c,&nCase);
  56.             unBateau.nCase[i]=nCase;
  57.         break;
  58.  
  59.         case 1:printf("2eme\n");
  60.             do{
  61.                 printf("Entrez la position de la deuxieme partie du bateau en x afin de determiner son orientation\n");
  62.                 scanf("%d",&c);
  63.                 printf("Entrez la position de la deuxieme partie du bateau en Y afin de determiner son orientation\n");
  64.                 scanf("%d",&l);
  65.                 //printf("col : %d ligne: %d\n",c,l);
  66.                 nCase.col=c;
  67.                 nCase.ligne=l;
  68.                 if(l>=0 || l<MAXL || c>=0 || c<MAXC){
  69.                     for (int j=0;j<8;j++){
  70.                         temp.col=tabx[j]+(unBateau.nCase[0].col);
  71.                         temp.ligne=taby[j]+(unBateau.nCase[0].ligne);
  72.  
  73.                         if(cmpCase(temp,nCase)==True){
  74.                                 printf("ca match au tour %d\n",j);
  75.                             unBateau.nCase[i]=nCase;
  76.                             if (j<4){ //diagonale
  77.                                     printf("est en diagonale\n");
  78.                                 positionBateau = enDiag;
  79.                             }else if (j>5){//horizontal
  80.                                     //printf("est en ligne\n");
  81.                                 positionBateau = enLigne;
  82.                             }else{//vertical
  83.                                     //printf("est en colonne\n");
  84.                                 positionBateau = enColonne;
  85.                             }
  86.                         }
  87.  
  88.                     }
  89.                 }
  90.             }while(cmpCase(temp,nCase)==False);
  91.         printf("valide");
  92.         break;
  93.         default: printf("3eme\n");
  94.                 if(positionBateau == enColonne){//si la bateau est "enColonne" (vertical)
  95.                 printf("colonne\n");
  96.                 if(unBateau.nCase[0].ligne < unBateau.nCase[1].ligne){//en bas
  97.                     createCase(unBateau.nCase[0].ligne+i,unBateau.nCase[0].col,&nCase);
  98.                 }else{//en haut
  99.                     createCase(unBateau.nCase[0].ligne-i,unBateau.nCase[0].col,&nCase);
  100.                 }
  101.             }else if(positionBateau == enLigne){//si la bateau est "enLigne" (horizontal)
  102.                 printf("enLigne\n");
  103.                 if(unBateau.nCase[0].col < unBateau.nCase[1].col){//a droite
  104.                     createCase(unBateau.nCase[0].ligne,unBateau.nCase[0].col+i,&nCase);
  105.                 }else{//a gauche
  106.                     createCase(unBateau.nCase[0].ligne,unBateau.nCase[0].col-i,&nCase);
  107.                 }
  108.  
  109.             }else if(positionBateau==enDiag){//si le bgateau est "en diagonale"
  110.                 printf("diag\n");
  111.                 if (unBateau.nCase[0].col<unBateau.nCase[1].col){//a droite
  112.                     printf("d-droite\n");
  113.                     if (unBateau.nCase[0].ligne<unBateau.nCase[1].ligne){//en bas
  114.                         printf("d-droite-bas\n");
  115.                         createCase(unBateau.nCase[0].ligne+i,unBateau.nCase[0].col+i,&nCase);
  116.                     }else{//en haut
  117.                         printf("d-droite-haut\n");
  118.                         createCase(unBateau.nCase[0].ligne-i,unBateau.nCase[0].col+i,&nCase);
  119.                     }
  120.                 }else{//a gauche
  121.                     if (unBateau.nCase[0].ligne<unBateau.nCase[1].ligne){//en bas
  122.                         createCase(unBateau.nCase[0].ligne+i,unBateau.nCase[0].col-i,&nCase);
  123.                     }else{//en haut
  124.                         createCase(unBateau.nCase[0].ligne-i,unBateau.nCase[0].col-i,&nCase);
  125.                     }
  126.                 }
  127.  
  128.             };
  129.         }
  130.         unBateau.nCase[i]=nCase;
  131.         printf("ajout de la cellule: %d \ncolonne: %d\nLigne: %d\n",i,unBateau.nCase[i].col,unBateau.nCase[i].ligne);
  132.         if((MAXCASE-taille)>=1){
  133.             for (int k=(i+1);k<MAXCASE;k++){
  134.                 createCase(-1,-1,&nCase);
  135.                 unBateau.nCase[k]=nCase;
  136.             }
  137.         }
  138.     }
  139. }
  140. effaceEcran();
  141. return unBateau;
  142. }
  143.  
  144. void afficheDebug(Flotte f){//affiche toutes les bateaux
  145.     for (int i=0; i<NBBATEAU;i++){
  146.         printf(" le bateau:%d est de taille:%d\n",(i+1),tailleBateau(f,i));
  147.         for (int j=0;j<MAXCASE;j++){
  148.             if (f.nBateau[i].nCase[j].col!=(-1)){
  149.                 printf(" case %d :\nCoord x: %d\t",(j+1),f.nBateau[i].nCase[j].col);
  150.                 printf("Coord Y: %d\n",f.nBateau[i].nCase[j].ligne);
  151.             }
  152.         }
  153.     }
  154. }
  155.  
  156. void minMax(Flotte f, int *minLigne, int *maxLigne, int *minCol, int *maxCol){//min max
  157.  
  158. }
  159.  
  160. enum etatFlotte etatFlot(Flotte f){
  161.     etatFlotte = aSombrer;
  162.     for(int i=0; i<NBBATEAU; i++){
  163.         if(etatBat(f,i) != couler){
  164.             etatFlotte = aFlot;
  165.             return etatFlotte;
  166.         }
  167.     }
  168.     return etatFlotte;
  169. }
  170.  
  171. enum etatJoueur etatJ(Flotte f){
  172.     etatJoueur = gagne;
  173.     if( (etatFlot(f)) == aSombrer){
  174.         etatJoueur = perd;
  175.     }
  176.     return etatJoueur;
  177. }
  178.  
  179. enum etatBateau etatBat(Flotte f, int numBateau){
  180.     etatBateau = toucher;
  181.     if(tailleBateau(f,numBateau)==0){
  182.         etatBateau = couler;
  183.     }
  184.     return etatBateau;
  185. }
  186.  
  187. void createCase(int l, int c, Case *mCase){
  188.     mCase->ligne = l;
  189.     mCase->col = c;
  190. }
  191.  
  192. enum Bool cmpCase(Case mCase, Case tCase){
  193.     if ( (mCase.ligne == tCase.ligne) && (mCase.col == tCase.col)){
  194.         return True;
  195.     }
  196.     return False;
  197. }
  198.  
  199. void attaqueBateau(Flotte *f,Case mCase,int *numBateau){
  200.  
  201.     if (controlFlotte(*f,mCase)){
  202.         for (int i=0;i<NBBATEAU;i++){
  203.             for (int j=0;j<MAXCASE;j++){
  204.                 if ( mCase.ligne == f->nBateau[i].nCase[j].ligne && mCase.col==(f)->nBateau[i].nCase[j].col){
  205.                     f->nBateau[i].nCase[j].ligne=(-1);
  206.                     f->nBateau[i].nCase[j].col=(-1);
  207.                 }
  208.             }
  209.         }
  210.     }
  211.  
  212. }
  213.  
  214. enum Bool controlFlotte(Flotte f, Case mCase){
  215.     for(int i=1; i<=NBBATEAU; i++){
  216.         for (int j=0; j<MAXCASE; j++){
  217.             if(f.nBateau[i].nCase[j].ligne == mCase.ligne && f.nBateau[i].nCase[j].col == mCase.col){
  218.                 return True;
  219.  
  220.             }
  221.         }
  222.     }
  223.     return False;
  224. }
  225.  
  226. int tailleBateau(Flotte f, int numBateau){
  227.     int taille = 0;
  228.     for(int i=0; i<MAXCASE; i++){
  229.         if(f.nBateau[numBateau].nCase[i].col != -1){
  230.             taille ++;
  231.         }
  232.     }
  233.     return taille;
  234. }
  235.  
  236. void saisirAttaque(Case *mCase){//ici le joueur choisit quelle case attaquer
  237.     char valLigne[3];
  238.     char valCol[3];
  239.     printf("A l'attaque!");
  240.     saisieJoueur(valLigne,valCol);
  241.  
  242.     int x = 0;
  243.     int y = 0;
  244.     for (int i = 0; valCol[i] != '\0'; ++i){
  245.         x= x*10 + valCol[i] - '0';
  246.     }
  247.     for (int j = 0; valLigne[j] != '\0'; ++j){
  248.         y= y*10 + valLigne[j] - '0';
  249.     }
  250.     mCase->col=x;
  251.     mCase->ligne=y;
  252. }
  253.  
  254. void saisieJoueur(char valLigne[], char valCol[]){
  255.     do{
  256.         printf("Entrez la valeur X entre 0 et %d\n",MAXC);
  257.         scanf("%s",valCol);
  258.         printf("\n");
  259.     }while(validSaisiJoueur(valCol)==1);
  260.  
  261.     do{
  262.         printf("Entrez la valeur Y entre 0 et %d\n",MAXL);
  263.         scanf("%s",valLigne);
  264.         printf("\n");
  265.     }while(validSaisiJoueur(valLigne)==1);
  266.  
  267. }
  268.  
  269. int validSaisiJoueur(char val[]){
  270.     int res = 0;
  271.     for (int i=0; val[i] != '\0'; ++i){
  272.         res = res*10 + val[i] - '0';
  273.         if(res >= 50 || res <= 0){
  274.             return 1;
  275.         }
  276.     }
  277.     return 0;
  278. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement