Aller au contenu

 

YayannDTE

Besoin d'aide, langage C

Messages recommandés

Bonjour, j'ai un projet d'informatique à faire pour demain après-midi dans le cadre de mon DUT Mesures Physiques, ça fait des plombes que je suis dessus mais je ne comprend pas comment faire, c'est la raison pour laquelle j'aimerai beaucoup que quelqu'un m'aide à faire mon programme.
 
Je dois faire un jeu de la bataille navale, le plus simple possible (scanf, printf, tableaux, pas de trucs compliqués).

Si quelqu'un a envie de m'aider ou me donner la solution, il me sauverai de ma perte, rendez moi ce service si l'un de vous est capable de résoudre ce problème, j'ai besoin de valider mon semestre.
 

Je ferai 10 heures de farm d'affilé pour vous suite à votre aide si vous le souhaitez.

 

Sans rire voici ce que j'ai fait avec codeblocks...

 

#include <stdio.h>
#include <math.h>
 
 
int map [10][10];
int i;
int j;
int yj1;
int xj1;
int x_alea,y_alea;
int parite=1;
int fin = 0;
 
 
void defmap(int map[10][10]) // définit la map de jeu 10x10 (0 1 2 3 4 5 6 7 8 9)
{
    int i,j;
    for(i=0; i<10; i++)
    {
        for(j=0; j<10; j++)
        {
            map[j]=0;
        }
    }
}
 
void affmap(int map [10] [10])
{
    // affiche la map (P)
    printf ("\n\n\n  0 1 2 3 4 5 6 7 8 9 \n");
    for(i=0; i<10; i++)
    {
        printf("%d ",i);
        for (j=0; j<10; j++)
        {
            switch (map [j])
            {
            case 0 :
                printf ("H "); //terrain de base
                break;
            case 1 :
                printf ("X "); // bateau touché
                break;
            case 2 :
                printf ("O "); //plouf
                break;
            }
        }
        printf("\n");
    }
}
 
int comparaison (xj1,yj1) // compare les coordonées du tir avec celles des bateaux du joueur 2
{
 
    if (map[xj1][yj1] == 50)
    {
        // cas de touché
        map[xj1][yj1] = 0;
        fin ++;
    }
    else
    {
        // cas de raté
        map[xj1][yj1] = 2;
    }
 
    return fin;
}
 
void placement(int map[10][10])
{
    /*placer les bateaux 2/3/3/4/5*/
}
 
void play(void) // Choix des coordonnées du tir
{
    do
    {
        printf ("choisir colonne \n"); //choix de colonne joueur 1
        scanf ("%d",&yj1);
        printf ("choisir ligne \n"); //choix de ligne joueur 1
        scanf ("%d",&xj1);
    }
    while (xj1 >= 10 || yj1 >= 10);
}
 
 
int main(void)
{
    printf("********************************\n*****Projet bataille navale*****\n********************************");
    //Présentation titre après lancement du programme
    defmap(map);
    placement(map);// placement manuel des bateaux
    while (fin < 10) // de base = 0
    {
        affmap(map); //affichage de la map
        play ();
        comparaison (xj1,yj1);
        system ("cls");                 // C'EST QUOI CA ? :(
        printf("fin = %d",fin);
        printf (" x = %d",map[xj1][yj1]);
    }
    return 0;
}
 

Partager ce message


Lien à poster
Partager sur d’autres sites

Donc voilà j'ai essayé de placer les bateaux avec l'aide de Mathisca, merci beaucoup à toi d'ailleur même si je n'ai pas encore réussi à les placer.

Quand je lance le programme de dessus avec la fonction placement comme ceci ça fout tout en l'air, je souhaite placer un bateau de telle sorte à ce que si je tire dessus ça fasse la croix (X).

Si quelqu'un a la bonté de modifier mon programme pour que juste celà fonctionne, je lui serais très reconnaissant, essayez de me sauver, si je présente ça demain avec les tirs réussis sur 1 seul bateau, je serais heureux.

 

Objectif : modifier la fonction placement pour placer 1 bateau, et pour que lorsque le bateau est touché, affiche une croix (X) sur la bonne case du plateau plateau.

 

Ma fonction: 

 

 

void placement(int map[10][10])
{
     printf ("\n\ndonnez une valeur de x pour le bateau1:");
    scanf ("%d",&xb1);
    printf ("\n donnez une valeur de y pour le bateau1");
   scanf ("%d",&yb1);
   map[xb1][yb1] = 50;
printf ("Donner la direction du bateau : (0=bas, 1= haut, 2 = gauche, 3= droite par exemple)");
 scanf ("%d",&dir);
 if (dir==0)
{
    yb1_2 = yb1 + 1;
map [xb1][yb1_2] = 50;
 
}
return ;
 }
 
 
 
 
 
 
J'espère que quelqu'un aura le temps, au moins de m'expliquer... 

Partager ce message


Lien à poster
Partager sur d’autres sites

PROJET FINAL FINITO !!!!

 

Je remercie Mathisca, Outaih et Symbiose pour m'avoir aidé, vous avez peut être en partie sauvé mon DUT ;)

 

 

Programme:

 

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
void debutplateau(int plateau[][5]) //initialise le plateau
{
    int ligne, colonne;
    for(ligne=0 ; ligne < 5 ; ligne++ ) //  0 1 2 3 4
        for(colonne=0 ; colonne < 5 ; colonne++ ) // 0 1 2 3 4
            plateau[ligne][colonne]=-1;
}
 
void afficheplateau(int plateau[][5])
{
 
    int ligne, colonne;
 
    printf("\t1 \t2 \t3 \t4 \t5"); // 1 2 3 4 5
    printf("\n");
 
    for(ligne=0 ; ligne < 5 ; ligne++ ) // for l 0 1 2 3 4
    {
        printf("%d",ligne+1);
        for(colonne=0 ; colonne < 5 ; colonne++ )
        {
            if(plateau[ligne][colonne]==-1)
            {
                printf("\tH");
            }
            else if(plateau[ligne][colonne]==0)
            {
                printf("\tO");
            }
            else if(plateau[ligne][colonne]==1)
            {
                printf("\tX");
            }
 
        }
        printf("\n");
    }
 
}
 
void debutbateau(int bateaux[][2])
{
    srand(time(NULL));  //initialise le random
    int bat, dern;
 
    for(bat=0 ; bat < 3 ; bat++)
    {
        bateaux[bat][0]= rand()%5;
        bateaux[bat][1]= rand()%5;
 
        /* on vérifie que le tir n'a pas déjà été fait, si le tir est fait on sort de la boucle dowhile, si pas déjà fait ça marche*/
 
        for(dern=0 ; dern < bat ; dern++)  //dern 0 1 2
        {
            if( (bateaux[bat][0] == bateaux[dern][0])&&(bateaux[bat][1] == bateaux[bat][1]) )
                do
                {
                    bateaux[bat][0]= rand()%5;
                    bateaux[bat][1]= rand()%5;
                }
                while( (bateaux[bat][0] == bateaux[dern][0])&&(bateaux[bat][1] == bateaux[dern][1]) );
        }
 
    }
}
 
void tir_j1(int tir[2])
{
 
    printf("\nEntrez la ligne du tir : ");
    scanf("%d",&tir[0]);
    tir[0]--;
 
    printf("\nEntre la colonne du tir : ");
    scanf("%d",&tir[1]);
    tir[1]--;
 
}
 
int touche (int tir[2], int bateaux[][2])
{
    int bat;
 
    for(bat=0 ; bat < 3 ; bat++)
    {
        if( tir[0]==bateaux[bat][0] && tir[1]==bateaux[bat][1])
        {
            printf("****TOUCHE**** (%d,%d)\n",tir[0]+1,tir[1]+1);
            return 1;
        }
    }
    return 0;
}
 
void com(int tir[2], int bateaux[][2], int essai)
{
    int ligne=0,colonne=0,rang;
 
    //compte le nombre de bateaux ligne/colonne
    for(rang=0 ; rang < 3 ; rang++)
    {
        if(bateaux[rang][0]==tir[0])
            ligne++;
        if(bateaux[rang][1]==tir[1])
            colonne++;
    }
 
    printf("\nessai %d: \nligne %d -> %d bateaux\ncolonne %d -> %d bateaux\n",essai,tir[0]+1,ligne,tir[1]+1,colonne);
}
 
void changeplateau(int tir[2], int bateaux[][2], int plateau[][5])
{
    if(touche(tir,bateaux))
        plateau[tir[0]][tir[1]]=1;
    else
        plateau[tir[0]][tir[1]]=0;
}
 
int main()
{
    int plateau[5][5];
    int bateaux[3][2];
    int tir[2];
    int essais=0,touches=0; // le jeu n'a pas commencé
    printf ("\t******************************\n\t****Projet bataille navale****\n\t******************************");
// page de présentation
    debutplateau(plateau); //initialise le plateau
    debutbateau(bateaux); // initialise les bateaux
    printf("\n");
 
    do
    {
        afficheplateau(plateau); //
        tir_j1(tir); //fonction de jeu
        essais++;// a chaque essai, essais augmente de 1
 
        if( touche (tir,bateaux))
        {
            com(tir,bateaux,essais);
            touches++;
        }
        else
            com(tir,bateaux,essais);
 
        changeplateau(tir,bateaux,plateau);
 
 
    }
    while(touches!=3);  // !=
 
    printf("\n\n\n****GAGNE***, vous avez triomphe de l'ennemi en %d tirs", essais);
    afficheplateau(plateau);
}

Partager ce message


Lien à poster
Partager sur d’autres sites

Pourquoi, tu veux te mettre au code kiki? :D

oui, ma soeur ma montrer du codage mais c'était pas sur des jeux mais pour ranger dans l'ordre croissant mais des chiffres mélanger Yey super! (ex: 1;6;4;3;3;2  bah sa les remets dans l'ordre 1;2;3;3;4;6 j'ai trouvé ça inutile lel)

 et elle ma dit ouai l'autres groupes de ma classe il font des jeux battaille navales, echec etc mais elle utilise Pyzo ou Python comme logiciel.

Donc si j'apprend vite fait du codage c'est pour me la pétéééé et aussi basque j'aime bien lel

 

mmmh c'est bien dommage que mon pc soit mort

Partager ce message


Lien à poster
Partager sur d’autres sites

 

Pourquoi, tu veux te mettre au code kiki? :D

oui, ma soeur ma montrer du codage mais c'était pas sur des jeux mais pour ranger dans l'ordre croissant mais des chiffres mélanger Yey super! (ex: 1;6;4;3;3;2  bah sa les remets dans l'ordre 1;2;3;3;4;6 j'ai trouvé ça inutile lel)

 et elle ma dit ouai l'autres groupes de ma classe il font des jeux battaille navales, echec etc mais elle utilise Pyzo ou Python comme logiciel.

Donc si j'apprend vite fait du codage c'est pour me la pétéééé et aussi basque (toi aussi t'es Basque ? :D )  j'aime bien lel

 

mmmh c'est bien dommage que mon pc soit mort

 

Et sinon oui j'ai un pote qui devait classer les chiffres comme ça, après le C askip c'est bien bidon ^^

Partager ce message


Lien à poster
Partager sur d’autres sites
Staff

Sujet déplacé dans une section plus appropriée

Partager ce message


Lien à poster
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant

×