[lanc C] Comment créer un tableau 2D en C???

popoff -  
 popoff -
Bonjour,

Je voudrais créer un jeu en C dans lequel je doit faire appel a un tableau 2D.
Ce jeu (en mode console) se présente sous la forme d'un tableau de 4*4 cases dans lesquelles je place au hazard des numéros de facon a ce que toutes les cases soient remplies et que chaque numéro soit en deux exemplaires (un tableau de 16 cases remplies de 8 paires de numéros). Le joueur doit alors rentrer les coordonnées de deux cases et le programme doit regarder si les cases contiennent le meme numéro (une paire). Le joueur doit trouver toutes les paires qu'il y a dans le tableau.

Mais voila je buche d'entrée car je ne sait pas comment créer un tableau 2D.
Aussi je voudrais savoir comment remplir ces cases au hazard avec les numéros.
Si vous pouvez ne serait ce que dans un premier temps me dire comment créer un tableau 2D je vous en serais tres reconnaissant!
MErci
Configuration: Windows Vista
Firefox 2.0.0.11

22 réponses

  • 1
  • 2
  1. mype Messages postés 2459 Date d'inscription   Statut Membre Dernière intervention   437
     
    c'est tres simple ;)
    int tab[4][4];
    0
  2. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
     
    Salut,

    Tu le déclares comme ça:
    int tab[4][4];

    Et tu attribues les valeurs comme ça:
    tab[0][3] = 5;

    Ca mettra 5 dans la première ligne à la quatrième colonne.

    Et pour des valeurs au hasard:
    http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/random.3.html
    0
  3. popoff
     
    WAW reponse expresse merci!
    encore une chose: pour accéder a la case 2 de la colonne 2 je tape quoi stp?
    0
  4. popoff
     
    OK merci beaucoup!
    Vous sauriez comment remplir les cases au hazard avec des numéros sans mettre plusieur fois le meme numéro svp?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. popoff
     
    Oups j'avais pas vu le lien!
    MERCI POUR TOUT!!!
    0
  7. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
     
    Ben ya ça, mais ça ne marche que sur les processeurs Intel/Amd:

    http://www.commentcamarche.net/faq/sujet 7070 generer des nombres aleatoires efficacement

    Il ya des manières bien plus intelligentes pour avoir une bonne variation de génération de nombres aléatoires, mais je me suis pas trop penché là dessus.
    0
  8. popoff
     
    Je te remerci pour le lien je regarde tout ca et je poste si je comprend pas!
    0
  9. popoff
     
    Aussi j'avais oublier on l'initialise comment ce tableau 2D svp?
    0
  10. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
     
    Juste en faisant int tab[4][4];
    Tu devrais regarder un ptit cours de C, c'est tentant de brûler ce genre d'étape mais tu verras, tu seras plus à l'aise.
    0
  11. popoff
     
    :) C'est tout simple alors!
    Merci pour ta réponse et pour ton conseil!
    0
  12. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
     
    :-)
    Tiens, regarde ici https://www.commentcamarche.net/contents/120-langage-c-les-tableaux dans la section tableaux multidimensionnels.
    0
  13. popoff
     
    Merci pour le lien J'ai tout ce qu'il faut sur les tableau maintenant. :D
    0
  14. mype Messages postés 2459 Date d'inscription   Statut Membre Dernière intervention   437
     
    pour remplir ton tableau avec des pair differentes
    tu peut initialiser toutes les case a 9
    puis tu peux utiliser ce bout de code qui prends une case au hasard puis lui ajoute les 2 elements d'une pair
    bien sur ne pas oublier d'utiliser avant srand(time(NULL)); pour eviter d'avoir le meme tableau a chaque lancement du programme...
    i=j=0;
    for(k=1;k<=8;k++)
    {
        while(tab[i][j]==0 || tab[i][j]<=8)
        {
        i=rand()%4;
        j=rand()%4;
        }
        tab[i][j]=k;
        while(tab[i][j]==0 || tab[i][j]<=8)
        {
        i=rand()%4;
        j=rand()%4;
        }
        tab[i][j]=k;
    }
    

    bonne chance ;)
    0
  15. popoff
     
    Salut mype!!

    Je ne comprend pas trop ta fonction tu voudrais bien me l'expliquer stp?
    0
  16. mype Messages postés 2459 Date d'inscription   Statut Membre Dernière intervention   437
     
    la fonction choisis des cases du tableau au hasard puis les remplis avec les 8 chiffres qui forment les pairs
    for(k=1;k<=8;k++)
    k designe le chiffre a rentré dans le tableau de 1 à 8

    while(tab[i][j]<=8)
    ça c'est pour eviter de rentrer un chiffre dans une case si elle contient deja l'un des chiffre d'une pair
    ainsi on ne rentre les chiffres que dans les cases qui ne contiennent aucun chiffre d'une pair (n'oublie pas d'initialiser toutes les cases du tableau a 9 au depart avec deux boucle for)

    i=rand()%4;j=rand()%4;
    la tu choisis les case au hasard grace a la fonction rand

    et voila...
    si tu veux voir ce que ça donne il suffit de tester ;)
    #include <stdio.h>
    
    int main()
    {
    
        int i,j,k;
        int tab[4][4];
    
    for(i=0;i<4;i++)
    for(j=0;j<4;j++)
    tab[i][j]=9;
    
        srand(time(NULL));
    
    i=j=0;
    for(k=1;k<=8;k++)
    {
        while(tab[i][j]<=8)
        {
        i=rand()%4;
        j=rand()%4;
        }
        tab[i][j]=k;
        while(tab[i][j]<=8)
        {
        i=rand()%4;
        j=rand()%4;
        }
        tab[i][j]=k;
    }
    
    for(i=0;i<4;i++)
    {
        for(j=0;j<4;j++)
        {
            printf("%d  ",tab[i][j]);
        }
        printf("\n");
    }
    return 0;
    }
    
    0
  17. popoff
     
    Ok je comprend mieux en fait je croyais que ce code mettait les deux chiffres composant les pairs dans la meme case!
    En plus je ne comprenait la synatxe de ton while (toujours pas d'ailleurs): je connait la fonction do{code a effectué}while(conditions) mais je ne savait pas qu'on pouvait utilisé while comme ca!
    J'irai dormir moi c*n demain soir lol!
    Je te remerci grandement pour ton coup de main en tout cas ;)
    0
  18. mype Messages postés 2459 Date d'inscription   Statut Membre Dernière intervention   437
     
    de rien...

    en effet la boucle while est plus efficace que la boucle do...while je l'utilise pour pas remplir la meme case ainsi elle permet de tester si la case tiré au hasard contient deja un des chiffre d'une pair ou non, si cette case contient deja un chiffre d'une pair on tire une nouvelle case au hasard sinon on met le chiffre d'une pair directement
    ça syntaxe c'est :
    while(condition) 
    {code}


    bonne chance pour ton jeu ;)
    0
  19. popoff
     
    C'est encore moi!
    Je vient de relire ton code et quelque chose me turlupine^^

    aux lignes 9 et 10 tu n'as pas mi de ";" comment est ce possible que la compilation ne plante pas??? Je ne comprend pas d'ailleurs pourquoi ces deux lignes sont là.. est-ce ce qu'on appel un prototype :$?
    0
  20. mype Messages postés 2459 Date d'inscription   Statut Membre Dernière intervention   437
     
    c'est simplement une double boucle for utilisé pour remplir toutes les cases du tableau...
    comme c'est un tableau 2D il faut deux boucle pour l'initialiser (c'est a dire remplir toutes les cases avec 9) si je ne l'initialise pas toutes les cases seront rempli avec des chiffres au hasard et sa posera probleme pour la suite du code...
    0
  21. popoff
     
    Oui j'avais compris le principe mais c'est la syntaxe que je saisi pas.
    bien que la tienne soit bien plus intéressante en cours on m'a montré ceci:

    for(i=0;i<4;i++){
    for(j=0;j<4;j++){
    tab[i][j]=9;
    }
    }

    c'est la meme chose?
    0
  • 1
  • 2