Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "navale.h"
- void effaceEcran(){
- system("cls");
- }
- void initFlotteJoueur(Flotte *flotteJoueur1, Flotte *flotteJoueur2, Case mCase){
- int tbateau = 0;
- for (int i=0;i<NBBATEAU;i++){
- do{
- printf("Joueur 1, entrez la taille du bateau N°%d comprise entre 1(minimum) et %d(maximum)\n",i+1,MAXCASE);
- scanf("%d",&tbateau);
- printf("\n");
- if (tbateau<1||tbateau>MAXCASE){
- printf("\nfaux!\n Entrer une valeur entre 0 et 50 (compris)\n");
- }
- }while(tbateau<1||tbateau>MAXCASE);
- flotteJoueur1->nBateau[i]=(createBateau(mCase,tbateau));
- }
- for (int i=0;i<NBBATEAU;i++){
- do{
- printf("Joueur 2, entrez la taille du bateau N°%d comprise entre 1(minimum) et %d(maximum)\n",i+1,MAXCASE);
- scanf("%d",&tbateau);
- printf("\n");
- }while(tbateau<1||tbateau>MAXCASE);
- flotteJoueur2->nBateau[i]=createBateau(mCase,tbateau);
- }
- }
- Bateau createBateau(Case nCase, int taille){
- Bateau unBateau;
- int l,c;
- int tabx[8]={-1,-1,1,1,0,0,-1,1};
- int taby[8]={-1,1,-1,1,-1,1,0,0};
- for (int i=0;i<taille;i++){
- if (i==0){
- do{
- printf("Entrez la position de la proue du bateau en x\n");
- scanf("%d",&c);
- printf("Entrez la position de la proue du bateau en Y\n");
- scanf("%d",&l);
- }while(l<0 || l>MAXL || c<0 || c>MAXC);
- }
- nCase.col=c;
- nCase.ligne=l;
- Case temp;
- if (l>0 || l<MAXL || c>0 || c<MAXC){
- switch (i){
- case 0:
- createCase(l,c,&nCase);
- unBateau.nCase[i]=nCase;
- break;
- case 1:printf("2eme\n");
- do{
- printf("Entrez la position de la deuxieme partie du bateau en x afin de determiner son orientation\n");
- scanf("%d",&c);
- printf("Entrez la position de la deuxieme partie du bateau en Y afin de determiner son orientation\n");
- scanf("%d",&l);
- //printf("col : %d ligne: %d\n",c,l);
- nCase.col=c;
- nCase.ligne=l;
- if(l>=0 || l<MAXL || c>=0 || c<MAXC){
- for (int j=0;j<8;j++){
- temp.col=tabx[j]+(unBateau.nCase[0].col);
- temp.ligne=taby[j]+(unBateau.nCase[0].ligne);
- if(cmpCase(temp,nCase)==True){
- printf("ca match au tour %d\n",j);
- unBateau.nCase[i]=nCase;
- if (j<4){ //diagonale
- printf("est en diagonale\n");
- positionBateau = enDiag;
- }else if (j>5){//horizontal
- //printf("est en ligne\n");
- positionBateau = enLigne;
- }else{//vertical
- //printf("est en colonne\n");
- positionBateau = enColonne;
- }
- }
- }
- }
- }while(cmpCase(temp,nCase)==False);
- printf("valide");
- break;
- default: printf("3eme\n");
- if(positionBateau == enColonne){//si la bateau est "enColonne" (vertical)
- printf("colonne\n");
- if(unBateau.nCase[0].ligne < unBateau.nCase[1].ligne){//en bas
- createCase(unBateau.nCase[0].ligne+i,unBateau.nCase[0].col,&nCase);
- }else{//en haut
- createCase(unBateau.nCase[0].ligne-i,unBateau.nCase[0].col,&nCase);
- }
- }else if(positionBateau == enLigne){//si la bateau est "enLigne" (horizontal)
- printf("enLigne\n");
- if(unBateau.nCase[0].col < unBateau.nCase[1].col){//a droite
- createCase(unBateau.nCase[0].ligne,unBateau.nCase[0].col+i,&nCase);
- }else{//a gauche
- createCase(unBateau.nCase[0].ligne,unBateau.nCase[0].col-i,&nCase);
- }
- }else if(positionBateau==enDiag){//si le bgateau est "en diagonale"
- printf("diag\n");
- if (unBateau.nCase[0].col<unBateau.nCase[1].col){//a droite
- printf("d-droite\n");
- if (unBateau.nCase[0].ligne<unBateau.nCase[1].ligne){//en bas
- printf("d-droite-bas\n");
- createCase(unBateau.nCase[0].ligne+i,unBateau.nCase[0].col+i,&nCase);
- }else{//en haut
- printf("d-droite-haut\n");
- createCase(unBateau.nCase[0].ligne-i,unBateau.nCase[0].col+i,&nCase);
- }
- }else{//a gauche
- if (unBateau.nCase[0].ligne<unBateau.nCase[1].ligne){//en bas
- createCase(unBateau.nCase[0].ligne+i,unBateau.nCase[0].col-i,&nCase);
- }else{//en haut
- createCase(unBateau.nCase[0].ligne-i,unBateau.nCase[0].col-i,&nCase);
- }
- }
- };
- }
- unBateau.nCase[i]=nCase;
- printf("ajout de la cellule: %d \ncolonne: %d\nLigne: %d\n",i,unBateau.nCase[i].col,unBateau.nCase[i].ligne);
- if((MAXCASE-taille)>=1){
- for (int k=(i+1);k<MAXCASE;k++){
- createCase(-1,-1,&nCase);
- unBateau.nCase[k]=nCase;
- }
- }
- }
- }
- effaceEcran();
- return unBateau;
- }
- void afficheDebug(Flotte f){//affiche toutes les bateaux
- for (int i=0; i<NBBATEAU;i++){
- printf(" le bateau:%d est de taille:%d\n",(i+1),tailleBateau(f,i));
- for (int j=0;j<MAXCASE;j++){
- if (f.nBateau[i].nCase[j].col!=(-1)){
- printf(" case %d :\nCoord x: %d\t",(j+1),f.nBateau[i].nCase[j].col);
- printf("Coord Y: %d\n",f.nBateau[i].nCase[j].ligne);
- }
- }
- }
- }
- void minMax(Flotte f, int *minLigne, int *maxLigne, int *minCol, int *maxCol){//min max
- }
- enum etatFlotte etatFlot(Flotte f){
- etatFlotte = aSombrer;
- for(int i=0; i<NBBATEAU; i++){
- if(etatBat(f,i) != couler){
- etatFlotte = aFlot;
- return etatFlotte;
- }
- }
- return etatFlotte;
- }
- enum etatJoueur etatJ(Flotte f){
- etatJoueur = gagne;
- if( (etatFlot(f)) == aSombrer){
- etatJoueur = perd;
- }
- return etatJoueur;
- }
- enum etatBateau etatBat(Flotte f, int numBateau){
- etatBateau = toucher;
- if(tailleBateau(f,numBateau)==0){
- etatBateau = couler;
- }
- return etatBateau;
- }
- void createCase(int l, int c, Case *mCase){
- mCase->ligne = l;
- mCase->col = c;
- }
- enum Bool cmpCase(Case mCase, Case tCase){
- if ( (mCase.ligne == tCase.ligne) && (mCase.col == tCase.col)){
- return True;
- }
- return False;
- }
- void attaqueBateau(Flotte *f,Case mCase,int *numBateau){
- if (controlFlotte(*f,mCase)){
- for (int i=0;i<NBBATEAU;i++){
- for (int j=0;j<MAXCASE;j++){
- if ( mCase.ligne == f->nBateau[i].nCase[j].ligne && mCase.col==(f)->nBateau[i].nCase[j].col){
- f->nBateau[i].nCase[j].ligne=(-1);
- f->nBateau[i].nCase[j].col=(-1);
- }
- }
- }
- }
- }
- enum Bool controlFlotte(Flotte f, Case mCase){
- for(int i=1; i<=NBBATEAU; i++){
- for (int j=0; j<MAXCASE; j++){
- if(f.nBateau[i].nCase[j].ligne == mCase.ligne && f.nBateau[i].nCase[j].col == mCase.col){
- return True;
- }
- }
- }
- return False;
- }
- int tailleBateau(Flotte f, int numBateau){
- int taille = 0;
- for(int i=0; i<MAXCASE; i++){
- if(f.nBateau[numBateau].nCase[i].col != -1){
- taille ++;
- }
- }
- return taille;
- }
- void saisirAttaque(Case *mCase){//ici le joueur choisit quelle case attaquer
- char valLigne[3];
- char valCol[3];
- printf("A l'attaque!");
- saisieJoueur(valLigne,valCol);
- int x = 0;
- int y = 0;
- for (int i = 0; valCol[i] != '\0'; ++i){
- x= x*10 + valCol[i] - '0';
- }
- for (int j = 0; valLigne[j] != '\0'; ++j){
- y= y*10 + valLigne[j] - '0';
- }
- mCase->col=x;
- mCase->ligne=y;
- }
- void saisieJoueur(char valLigne[], char valCol[]){
- do{
- printf("Entrez la valeur X entre 0 et %d\n",MAXC);
- scanf("%s",valCol);
- printf("\n");
- }while(validSaisiJoueur(valCol)==1);
- do{
- printf("Entrez la valeur Y entre 0 et %d\n",MAXL);
- scanf("%s",valLigne);
- printf("\n");
- }while(validSaisiJoueur(valLigne)==1);
- }
- int validSaisiJoueur(char val[]){
- int res = 0;
- for (int i=0; val[i] != '\0'; ++i){
- res = res*10 + val[i] - '0';
- if(res >= 50 || res <= 0){
- return 1;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement