IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Jeu de sudoku


Sujet :

C

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    janvier 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : janvier 2021
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Jeu de sudoku
    Bonjour je me suis lancé le défis de programmer un sudoku 9*9 pour m'entrainer. Le soucis c'est que je rencontre un problème sur lequel je bloque depuis maintenant quelques jours.
    Voici le code, composé de plusieurs fonction que j'utilise entre elles :

    //Affiche la grille par défaut
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    int print_grid(){
     
    for(int j = 0; j < 9; j++){
        for(int i = 0; i < 9; i++){
            // tab[abscisses][ordonnées]
     
            tab[i][j] = '.';
            tab[0][9] = '2';
            tab[1][9] = '6';
            tab[7][1] = '7';
            tab[6][1] = '1';
            tab[2][2] = '3';
            tab[3][2] = '1';
            tab[5][2] = '6';
            tab[1][3] = '6';
            tab[4][3] = '5';
            tab[6][3] = '8';
            tab[8][3] = '3';
            tab[2][4] = '9';
            tab[3][4] = '2';
            tab[4][4] = '6';
            tab[5][4] = '1';
            tab[6][4] = '7';
            tab[0][5] = '5';
            tab[2][5] = '4';
            tab[4][5] = '8';
            tab[7][5] = '6';
            tab[3][6] = '8';
            tab[5][6] = '4';
            tab[6][6] = '3';
            tab[1][7] = '4';
            tab[2][7] = '8';
            tab[7][8] = '4';
            tab[6][8] = '9';
     
     
            printf("%c  ", tab[i][j]);
        }
    printf("\n");
    //
    }
     
    }

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    //Vérifie si la le chiffre peut être placé ou pas.
    void check_valid (int x, int y, char n){
     
    if(y>9 || x > 9){
        printf("erreur x=%d et y=%d",x,y);
        exit(1);
        }
    if(y < 0 || x < 0){
        printf("erreur");
        exit(1);
    }
    //Verification
     
        for(int i = 0; i < 9; i++){
            for(int j = 0; j < 9; j++){
                if(tab[x][y]!='.'){
                    printf("blocked.\n");//Provisoire
                    test = 0;
                    exit(0);
                    return 0;
     
                }else { //Si valide on print directement dans le nouveau tab
                        tab[x][y] = n;
                        Drawnew_grid(x,y,n);
                        test = 1;
                        return 1;
                }
            }
        } printf("%d",test);
     
    }


    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    //Affiche la grille actualisé avec les coordonnées entrées par l'utilisateur 
    int Drawnew_grid(int x, int y, char n){
     
    for(int j = 0; j < 9; j++){
        for(int i = 0; i < 9; i++){
            // tab[abscisses][ordonnées]
            tab[i][j] = '.';
            tab[0][9] = '2';
            tab[1][9] = '6';
            tab[7][1] = '7';
            tab[6][1] = '1';
            tab[2][2] = '3';
            tab[3][2] = '1';
            tab[5][2] = '6';
            tab[1][3] = '6';
            tab[4][3] = '5';
            tab[6][3] = '8';
            tab[8][3] = '3';
            tab[2][4] = '9';
            tab[3][4] = '2';
            tab[4][4] = '6';
            tab[5][4] = '1';
            tab[6][4] = '7';
            tab[0][5] = '5';
            tab[2][5] = '4';
            tab[4][5] = '8';
            tab[7][5] = '6';
            tab[3][6] = '8';
            tab[5][6] = '4';
            tab[6][6] = '3';
            tab[1][7] = '4';
            tab[2][7] = '8';
            tab[7][8] = '4';
            tab[6][8] = '9';
     
            tab[x][y] = n;
     
            printf("%c  ", tab[i][j]);
    }
     
    printf("\n");
     
    }
     
    }


    //Le main
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    #include <stdio.h>
    #include <stdlib.h>
     
    char tab[9][9];
    void check_valid (int x, int y, char n);
    int print_grid();
    int Drawnew_grid(int x, int y, char n);
     
    int empty = 54;
    int test = 0;
    int main(int argc, char *argv){
     
     
    char c = '1';
    int x = 0, y = 0;
     
    print_grid();
     
    //On test pour 10 tentatives 
    for(int i = 0; i < 10; i++){
     
    printf("\nEntrez une valeur x : ");
    scanf("%d",&x);
     
    printf("Entrez une valeur y : ");
    scanf("%d",&y);
     
    check_valid(x,y,c);
     
    }
    printf("%d", test);
     
    return 0;
     
    }


    Le soucis est que lorsque je rentre nombre, à l'étape suivante celui ci n'est plus à sa position mais à la nouvelle position que je lui ai assigné. Les valeurs X et Y du main sont écrasées lorsque je rentre une nouvelle valeur à ces 2 variables.
    Comment faire en sorte que la position du nombre initialement choisie lors de la première étape soit sauvegarder sur la grille ?? En d'autre terme comment faire pour que x et y ne soient pas écrasés par les nouvelles valeurs ? Soyez indulgent, je code en C depuis quelques semaines.

  2. #2
    Membre éclairé
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    septembre 2015
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : septembre 2015
    Messages : 143
    Points : 657
    Points
    657
    Par défaut
    bonjour

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char tab[9][9];
     
    tab[0][9] = '2';
    je ne suis pas allé plus loin pour voir si d'autres erreurs


    tu peux aussi mettre 9 dans une constante
    comme ça, si un jour tu changes la taille du quadrillage, tu changes la taille qu'à un seul endroit

  3. #3
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    décembre 2015
    Messages
    1 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : décembre 2015
    Messages : 1 243
    Points : 6 057
    Points
    6 057
    Par défaut
    Bonjour,

    Pour préciser ce qu'écrit Xelland.

    Quand on défini un tableau, le nombre que l'on indique c'est la taille du tableau. Donc pour un tableau char tableau[9], le tableau aura 9 éléments qui ont des indices allant de 0 (le premier) à 8 (le dernier).
    Ici ton tableau a 9x9 cases, d'où le dernier élément de ton tableau de tableaux est en position tab[8][8], il ne faut surtout pas aller au delà.

    Les indices [9] sont donc des erreurs et par exemple, la ligne : if(y>9 || x > 9){ est à remplacer par if(y>=9 || x >= 9){.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    juin 2010
    Messages
    6 634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 6 634
    Points : 30 338
    Points
    30 338
    Billets dans le blog
    4
    Par défaut
    En plus des accès hors bornes, c'est original de réinitialiser la grille à chaque fois que tu fais un truc avec, et en particulier quand tu dessines.
    La meilleure idée pour ne jamais modifier la grille réellement ? Pas loin imo.
    Quant à ton problème de x y, faut revoir le chapitre 0 de portée des variables.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    8 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 8 786
    Points : 24 118
    Points
    24 118
    Billets dans le blog
    1
    Par défaut
    Bonjour
    C'est normal les exit(0) qu'il y a un peu de partout (dont certains contiennent parfois des lignes de code placées en dessous, code dont l'exécution ne me semble alors pas tout à fait assurée) ?

    Un sudoku en C c'est ambitieux. Par exemple un chiffre pourra aller sur une case parce que cette case n'en acceptera aucun autre. Il faut donc regarder toutes les possibilités de la case par rapport aux autres cases de la ligne, de la colonne ou du bloc pour voir si le nombre qu'on tente de placer est ou n'est pas déjà présent ailleurs. Autre exemple, un chiffre pourra aller sur une case parce qu'il ne va sur aucune autre de la ligne, ou de la colonne, ou du bloc. Il te faudra donc, pour chaque case testée, examiner son implication sur les autres cases de la ligne, colonne ou bloc. Bref des algorithmes sérieux dans toutes les directions (surtout si tu considères une ligne ou colonne ou bloc comme exactement la même chose mais juste pas dans le même sens).

    Je te suggère donc une programmation dans les règles de l'art. Déjà on évite les globales (globales dont on peut se passer et si on a trop de paramètres à gérer alors on les regroupe dans une structure) et surtout de petites fonctions simples qui ne font qu'une chose mais qui le font bien et que tu peux alors tester individuellement. Si une fonction doit checker quelque chose, alors elle checke et elle renvoie le résultat mais surtout elle n'affiche rien. L'affichage lui sera dévolu à la fonction en charge d'afficher le jeu.
    Et bien évidemment on ne quitte pas en plein milieu. Si une fonction trouve un truc incohérent, alors elle remonte le souci à son appelant qui pourra trouver une solution alternative ou sinon lui-même remonte alors le souci à son propre appelant etc jusqu'au main() qui, seul, a le droit de quitter le programme.
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    janvier 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : janvier 2021
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci pour vos réponses et conseils, je reviens vers vous dès que je rencontre d'autres soucis

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    janvier 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : janvier 2021
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    J'ai totalement revu l'approche de mon code et les choses vont bcp mieux ! Je peux déjà remplir la grille sans que le nombre s'efface, reste plus qu'à écrire la fonction qui gère la logique du sudoku et ça devrait être bon !
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
     
    #include <stdio.h>
    #include <stdlib.h>
     
     
     
    int v;
    void print_grid(int tab[9][9]);
    int check_valid(int t[9][9], int x, int y);
    void put_number(int t[9][9], int y, int x, int n);
     
    int main(void)
    {
        int x, y = 0;
     
        int grille[9][9]  = {
     
        {0,2,6,0,0,0,0,0,0},
        {0,0,0,0,0,0,1,7,0},
        {0,0,3,1,0,6,0,0,0},
        {0,6,0,0,5,0,8,0,3},
        {0,0,9,2,6,1,7,0,0},
        {5,0,4,0,8,0,0,6,0},
        {0,0,0,8,0,4,3,0,0},
        {0,4,8,0,0,0,0,0,0},
        {0,0,0,0,0,0,9,4,0}
     
        };
     
        print_grid(grille);
        //Provisoire
        int c = 5;
     
        //Structure provisoire pour tester
        while(c>0){
     
        printf("Entrez un x:");
        scanf("%d",&x);
        printf("Entrez un y:");
        scanf("%d",&y);
     
        printf("\n");
        check_valid(grille, x,y);
     
        //Si la position est valide, v = 1.
       if(v==1){
        put_number(grille, x,y,1);
       }else{
        printf("Position bloque\n");
       }
       print_grid(grille);
       c--;
        }
     
        return 0;
    }
    //Regarde si e nombre peut etre posé
    int check_valid(int t[9][9], int y, int x){
     
        if(y>=9 || x>=9){
            printf("Erreur");
            exit(1);
        }
        if(y < 0 || x < 0){
            printf("Erreur");
            exit(1);
        }
     
    for(int i = 0; i < 9; i++){
        for(int j = 0; j < 9; j++){
            if(t[x][y]!=0){
                    printf("Blocked.\n");
                    v = 0;
                    return 0;
            } else {
                printf("Free.\n");
                v = 1;
                return 1;
                }
            }
        }
    }
    //Print le nombre printable sur la grille
    void put_number(int t[9][9], int y, int x, int n){
    if(v==1){
        for(int i = 0; i < 9; i++){
            for(int j = 0; j < 9; j++){
                t[x][y] = n;
            }
        }
    }
     
    }
    //dessine la grille
    void print_grid(int tab[9][9]){
    for(int i = 0; i < 9; i++){
        for(int j = 0; j < 9; j++){
            if(tab[i][j]==0){
                printf(".  ", tab[i][j]);
            }else{
                printf("%d  ",tab[i][j]);
            }
        }
      printf("\n");
    }
    }

  8. #8
    Membre éclairé
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    septembre 2015
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : septembre 2015
    Messages : 143
    Points : 657
    Points
    657
    Par défaut
    c'est mieux

    mais il reste cette méthode à revoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    //Regarde si e nombre peut etre posé
    int check_valid(int t[9][9], int y, int x){
     
        if(y>=9 || x>=9){
            printf("Erreur");
            exit(1);
        }
        if(y < 0 || x < 0){
            printf("Erreur");
            exit(1);
        }
     
    for(int i = 0; i < 9; i++){
        for(int j = 0; j < 9; j++){
            if(t[x][y]!=0){
                    printf("Blocked.\n");
                    v = 0;
                    return 0;
            } else {
                printf("Free.\n");
                v = 1;
                return 1;
                }
            }
        }
    }
    tu la définis comme renvoyant un int, or :
    - présence de exit (-1) , Sve@r t'avait fait la remarque
    - possibilité de sortir sans return

    de plus, pourquoi les 2 boucles for ?

    ça n'empêche pas ton programme de faire ce que tu veux, mais ton compilateur va râler et tu ne respectes pas la logique de programmation


    et aussi, éviter la variable globale v

  9. #9
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    8 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 8 786
    Points : 24 118
    Points
    24 118
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Kobrax Voir le message
    reste plus qu'à écrire la fonction qui gère la logique du sudoku et ça devrait être bon !
    Mouais. Faut se méfier de ce genre d'affirmation "plus qu'à écrire la fonction qui...". Surtout quand, comme je l'ai dit, la logique d'une case s'appuie sur les cases de sa ligne, de sa colonne et de son bloc (les 8 autres cases qui font partie du même mini carré). Je te souhaite bon courage pour trouver le bloc de (par exemple) la case (6, 2) (je le sais, je l'ai fait en Python !!! )

    Sinon tu as toujours ce int v qui est globale. C'est vrai, cette variable me semble de la plus haute importance et justifie absolument sa mise au niveau national de ton code.

    Citation Envoyé par Kobrax Voir le message
    Citation Envoyé par Xelland Voir le message
    de plus, pourquoi les 2 boucles for ?
    Ou, dit autrement, pourquoi ces boucles font varier "i" et "j" tandis que le corps de la boucle porte sur t[x][y] qui, lui, ne varie pas.
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site

  10. #10
    Membre éclairé
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    septembre 2015
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : septembre 2015
    Messages : 143
    Points : 657
    Points
    657
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Ou, dit autrement, pourquoi ces boucles font varier "i" et "j" tandis que le corps de la boucle porte sur t[x][y] qui, lui, ne varie pas.
    dans l'absolu, i et j ne varieront pas, puisqu'il y aura un return au 1er passage

    Citation Envoyé par Sve@r
    Si une fonction doit checker quelque chose, alors elle checke et elle renvoie le résultat mais surtout elle n'affiche rien.
    il manque ça aussi

  11. #11
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    janvier 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : janvier 2021
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Mouais. Faut se méfier de ce genre d'affirmation "plus qu'à écrire la fonction qui...". Surtout quand, comme je l'ai dit, la logique d'une case s'appuie sur les cases de sa ligne, de sa colonne et de son bloc (les 8 autres cases qui font partie du même mini carré). Je te souhaite bon courage pour trouver le bloc de (par exemple) la case (6, 2) (je le sais, je l'ai fait en Python !!! )

    Sinon tu as toujours ce int v qui est globale. C'est vrai, cette variable me semble de la plus haute importance et justifie absolument sa mise au niveau national de ton code.


    Ou, dit autrement, pourquoi ces boucles font varier "i" et "j" tandis que le corps de la boucle porte sur t[x][y] qui, lui, ne varie pas.
    J'ai corrigé grâce à votre remarque et je me suis rendu compte que la boucle même ne sert à rien ici

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    int check_valid2(int t[9][9], int j, int i){
            if(t[i][j]!=0){
                    printf("Blocked.\n");
                    v = 0;
                    return 0;
            } else {
                printf("Free.\n");
                v = 1;
                return 1;
                }
    }

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    juin 2010
    Messages
    6 634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 6 634
    Points : 30 338
    Points
    30 338
    Billets dans le blog
    4
    Par défaut
    v ne sert à rien non plus.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  13. #13
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    8 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 8 786
    Points : 24 118
    Points
    24 118
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Kobrax Voir le message
    J'ai corrigé grâce à votre remarque et je me suis rendu compte que la boucle même ne sert à rien ici

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int check_valid2(int t[9][9], int j, int i){
            if(t[i][j]!=0){
                    printf("Blocked.\n");
                    v = 0;
                    return 0;
            } else {
                printf("Free.\n");
                v = 1;
                return 1;
                }
    }
    En fait la fonction toute entière ne sert à rien (elle se contente de vérifier si une case est libre ou pas, un simple "if" quoi).
    Tant que tu bricoleras selon le sens du vent tu n'arriveras nulle part. Il te faut vraiment poser les bases du jeu. Construire l'objet "case", qui possède une valeur, ainsi qu'une ligne et une colonne mais aussi ce que j'appelle un bloc c'est à dire un mini-carré de 8 autres cases qui lui est associé. Ainsi une case ne pourra accepter un chiffre que si ce chiffre ne se trouve pas sur les autres cases de la ligne ni de la colonne ni du bloc.
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Heuristique pour le jeu du Sudoku
    Par sciencem1 dans le forum Intelligence artificielle
    Réponses: 0
    Dernier message: 07/11/2015, 12h39
  2. Jeu de sudoku : problème dans mes classes Case Placement
    Par zapmtl dans le forum Débuter avec Java
    Réponses: 15
    Dernier message: 29/07/2015, 22h06
  3. [Free Pascal] Réalisation d'un jeu de Sudoku avec la SDL
    Par tazbrraaa dans le forum Free Pascal
    Réponses: 10
    Dernier message: 04/12/2014, 20h02
  4. Jeu du Sudoku
    Par Hero13 dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 06/10/2014, 11h07
  5. Interface graphique pour jeu de Sudoku
    Par Stradithehutt dans le forum Interfaces Graphiques
    Réponses: 5
    Dernier message: 01/11/2006, 11h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo