Publicité
+ Répondre à la discussion
Page 1 sur 3 123 DernièreDernière
Affichage des résultats 1 à 20 sur 45

Discussion: Projet : Sud-O-Cul

  1. #1
    Invité de passage
    Inscrit en
    février 2013
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : février 2013
    Messages : 23
    Points : 0
    Points
    0

    Par défaut Projet : Sud-O-Cul

    Bonjour, j'essaye de réaliser un sudoku mais je bloque, j'ai créer une fenêtre, et j'ai dessiné des lignes verticalement et horizontalement, 9 cases par lignes et colonnes.

    Mon problème est, comment faire pour rentrer des chiffres à l'intérieur de ces cases ? Faut-il trouver la position de chaque case ?

    Et savez vous comment faire pour sauter des lignes dans messagebox.showinfo ? J'ai chercher mais je trouve pas, normalement, on utilise \n mais ça ne marche pas du tout.

    Merci de votre aide.

    Code :
    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
    from tkinter import*
    from tkinter import messagebox
    import tkinter as Tk
     
     
    sudoku = Tk.Tk()
    sudoku.title(" Sudoku ")
     
     
     
     
    def About () : messagebox.showinfo (title="A propos", message = "Version 1.0")
    def Comment_jouer () : messagebox.showinfo ("Comment jouer ?", "Le but du jeu est de remplir ces cases avec des chiffres allant de 1 à 9 en veillant toujours à ce qu'un même chiffre ne figure qu'une seule fois par colonne, une seule fois par ligne, et une seule fois par carré de neuf cases.")     
     
     
     
    mainmenu = Tk.Menu(sudoku)
    menu_partie = Tk.Menu(mainmenu)
    menu_partie.add_command(label="Quitter le jeu", command=sudoku.destroy)
     
    menu_help = Tk.Menu(mainmenu)
    menu_help.add_command(label="Comment jouer", command= Comment_jouer)
    menu_help.add_command(label=" A propos", command = About)
     
    mainmenu.add_cascade (label= "Partie", menu=menu_partie)
    mainmenu.add_cascade(label= "Aide", menu=menu_help)
     
     
    sudoku.config(menu=mainmenu)
     
     
    surface_dessin = Canvas(sudoku, width=480, height=480, bg='SaddleBrown', bd = 55, relief="ridge")
    surface_dessin.pack()
     
     
    scale = 480/9;
     
    for i in range(0, 10):
        if (i!=4) and (i!=7) :
            surface_dessin.create_line(i*scale, 0, i*scale, 580, width =1);
        else :
            surface_dessin.create_line(i*scale, 0, i*scale, 580, width =3);
     
     
     
    for j in range (0, 10) :
        if (j!=4) and (j!=7) :
            surface_dessin.create_line (0, j*scale, 580, j*scale, width = 1) ;
        else :
            surface_dessin.create_line (0, j*scale, 580, j*scale, width = 3) ;
     
     
     
     
     
     
     
     
     
     
     
     
    sudoku.mainloop()

  2. #2
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    5 238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 5 238
    Points : 7 251
    Points
    7 251

    Par défaut

    Salut,
    Vous avez tout ce qu'il faut dans ce post
    - W
    Architectures Post-Modernes

  3. #3
    Membre Expert

    Inscrit en
    décembre 2006
    Messages
    2 256
    Détails du profil
    Informations forums :
    Inscription : décembre 2006
    Messages : 2 256
    Points : 1 290
    Points
    1 290

    Par défaut

    Un peu trop kuku le titre...

  4. #4
    Invité de passage
    Inscrit en
    février 2013
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : février 2013
    Messages : 23
    Points : 0
    Points
    0

    Par défaut

    Bonsoir, merci beaucoup pour le lien. Il m'a été un chouïa utile, difficile de bien comprendre le codage.

    J'ai essayé de comprendre son code pour l'ajout de chiffre mais je ne comprends comment il a fait, quelqu'un peut m'expliquer ?

    Ou bien avez vous une autre solution pour cliquer à un endroit et y rentrer un chiffre au centre de la case sachant que ce n'est pas vraiment une case ?

    Je ne sais pas si vous allez me comprendre

    Merci encore de votre aide.

  5. #5
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    5 238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 5 238
    Points : 7 251
    Points
    7 251

    Par défaut

    Salut,
    C'est pas si compliqué!

    A la construction d'une instance de SudokuGrid, il y a un:
    Code :
            self.bind('<KeyPress>', self.on_keyPress)
    le callback sera appelé à chaque Key Press.
    Ca déroule:
    Code :
    1
    2
    3
    4
    5
        def on_keyPress(self, event):
            value = event.keysym if event.keysym in '123456789' else ''
            iid = self.find_withtag('current')[0]
            if iid in self._items:
                self._items[iid].set_value(value)
    En français, on récupère le caractère tapé (.keysym)
    S'il est dans 1..9 on positionne "value" à sa valeur sinon value devient ''.
    ".find_withtag('current')[0]" permet de récupérer l'identifiant de l'objet 'current'.
    Puis on cherche à quelle Cell il correspond via la map "._items".
    Si on trouve un Cell, on délègue le reste du boulot à la méthode .set_value

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
        def set_value(self, value, initial=False):
            itemconfig = self.canvas.itemconfigure
            s = str(value) if value else ''
            itemconfig(self._label, text=s)
            self.value = value
            if initial:
                self.disable()
                self._is_initial = True
    Le paramètre value pouvant être "int" ou "str", null ou vide on le convertit en "str" dans s. self._label contient l'item Text à mettre à jour: un coup d'itemconfigure et puis voilà.

    Ce code ne fait "qu'afficher" et gérer des événements de "base".
    Côté permettre à un utilisateur de "jouer" une grille, il sait charger la grille initiale mais il ne s'occupe pas du tout de valider les nombres entrés: le dialogue avec l'utilisateur et la gestion de l'état du jeu sont "à faire".

    s/classer ou modifier le code existant sera probablement nécessaire selon "l'user expérience" que vous voudrez réaliser.

    - W
    Architectures Post-Modernes

  6. #6
    Invité de passage
    Inscrit en
    février 2013
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : février 2013
    Messages : 23
    Points : 0
    Points
    0

    Par défaut

    Je te remercie pour ton aide !

    Si ça te dérange pas, tu pourrais me dire quel est la fonction que tu utilises ? Parce que je me vois pas sortir ce code du jour au lendemain et puis, à vrai dire, j'y comprends pas grand chose, je suis qu'un débutant hein, pas amateur

  7. #7
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    5 238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 5 238
    Points : 7 251
    Points
    7 251

    Par défaut

    Salut,
    De quelle fonction parles-tu?
    - W
    Architectures Post-Modernes

  8. #8
    Invité de passage
    Inscrit en
    février 2013
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : février 2013
    Messages : 23
    Points : 0
    Points
    0

    Par défaut

    Je ne sais pas si c'est une fonction mais quand t'utilises self.bind. Même ceux avec les self.

  9. #9
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    5 238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 5 238
    Points : 7 251
    Points
    7 251

    Par défaut

    Reprenez votre code initial:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    surface_dessin = Canvas(sudoku, width=480, height=480, bg='SaddleBrown', bd = 55, relief="ridge")
    surface_dessin.pack()
     
    scale = 480/9;
     
    for i in range(0, 10):
        if (i!=4) and (i!=7) :
            surface_dessin.create_line(i*scale, 0, i*scale, 580, width =1);
        else :
            surface_dessin.create_line(i*scale, 0, i*scale, 580, width =3);
    surface_dessin est une variable globale contenant une instance de "Canvas".

    surface_dessin.create_line appelle la méthode .create_line de ce "canvas".
    .bind est autre une méthode du Canvas tk (comme .create_line)
    Plutôt que d'écrire çà dans le script "principal", on pourrait pousser/cacher ce code dans une fonction:
    Code :
    1
    2
    3
    4
    5
    6
    7
    def create_lines(canvas):
        scale = 480/9
        for i in range(0, 10):
            if (i!=4) and (i!=7) :
            canvas.create_line(i*scale, 0, i*scale, 580, width =1);
        else :
            canvas.create_line(i*scale, 0, i*scale, 580, width =3);
    Pour l'exécuter, ce sera: create_lines(surface_dessin)

    Mais on peut, aussi dire, que le sudoku se joue sur un Grid, sous/classe de Canvas et des méthodes particulières dedans.
    C'est juste réorganiser le code qui précède en:
    Code :
    1
    2
    class Grid(tk.Canvas):
        create_lines = create_lines
    Pour l'utiliser:
    Code :
    1
    2
    3
    surface_dessin = Grid(sudoku, width=480, height=480, bg='SaddleBrown', bd = 55, relief="ridge")
    surface_dessin.pack()
    surface_dessin.create_lines()
    A la syntaxe prêt, "create_lines" fonction et ".create_lines" méthode déroulent in fine le même code. C'est ce que souligne le "create_lines = create_lines".

    Si on déclare le "corps" de la fonction dans la déclaration de la classe, la convention est de nommer, "self" la variable qui représente le "canvas" (et premier paramètre de la fonction qui prend alors le nom de "méthode" qui s'applique alors à une classe).

    - W
    Architectures Post-Modernes

  10. #10
    Invité de passage
    Inscrit en
    février 2013
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : février 2013
    Messages : 23
    Points : 0
    Points
    0

    Par défaut

    Je suis un peu perdu

    Si j'ai bien compris, vous avez réorganiser mon code, c'est bien ça ?
    Je ne comprends pas pourquoi vous mettez le code pour créer les lignes dans une fonction puisqu'on l'invoque qu'une seule fois non ?

    J'ai essayé ce que vous m'avez dit mais il y a un soucis, ou peut-être que c'est moi le problème, pouvez vous vérifier ? Merci.

    Code :
    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
    from tkinter import*
    from tkinter import messagebox
    import tkinter as Tk
     
     
     
    sudoku = Tk.Tk()
    sudoku.title(" Sudoku ")
     
     
     
     
    def About () : messagebox.showinfo (title="A propos",)
    def Comment_jouer () : messagebox.showinfo ("Comment jouer ?", "Le but du jeu est de remplir ces cases avec des chiffres allant de 1 à 9 en veillant toujours à ce qu'un même chiffre ne figure qu'une seule fois par colonne, une seule fois par ligne, et une seule fois par carré de neuf cases.")     
     
    def create_lines(canvas):
        scale = 480/9
        for i in range(0, 10):
            if (i!=4) and (i!=7) :
                canvas.create_line(i*scale, 0, i*scale, 580, width =1);
        else :
            canvas.create_line(i*scale, 0, i*scale, 580, width =3);
     
    def create_lines (canvas) :
        scale = 480/9
        for j in range (0, 10) :
            if (j!=4) and (j!=7) :
                canvas.dessin.create_line (0, j*scale, 580, j*scale, width = 1) ;
        else :
            canvas.dessin.create_line (0, j*scale, 580, j*scale, width = 3) ;
     
    mainmenu = Tk.Menu(sudoku)
    menu_partie = Tk.Menu(mainmenu)
    menu_partie.add_command(label="Quitter le jeu", command=sudoku.destroy)
     
    menu_help = Tk.Menu(mainmenu)
    menu_help.add_command(label="Comment jouer", command= Comment_jouer)
    menu_help.add_command(label=" A propos", command = About)
     
    mainmenu.add_cascade (label= "Partie", menu=menu_partie)
    mainmenu.add_cascade(label= "Aide", menu=menu_help)
     
     
    sudoku.config(menu=mainmenu)
     
     
     
     
    class Grid(tk.Canvas):
        create_lines = create_lines
     
     
    surface_dessin = Grid(sudoku, width=480, height=480, bg='SaddleBrown', bd = 55, relief="ridge")
    surface_dessin.pack()
    surface_dessin.create_lines()
     
     
     
     
     
     
    sudoku.mainloop()

  11. #11
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    5 238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 5 238
    Points : 7 251
    Points
    7 251

    Par défaut

    Salut,

    Je ne comprends pas pourquoi vous mettez le code pour créer les lignes dans une fonction puisqu'on l'invoque qu'une seule fois non ?
    Pour découper la longue séquence d'opérations qui construit l'interface en étapes logiques. Ca aide à structurer le programme en leur donnant un nom particulier, limiter la dépendance avec des variables globales,...

    Dans l'exemple ci dessous, j'ai crée une fonction "create_menu" pour regrouper les créations de menu et j'ai déplacé le reste sous "if __name__ == '__main__':".

    Code :
    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
    from tkinter import messagebox
    import tkinter as tk
     
    def About () : messagebox.showinfo (title="A propos",)
    def Comment_jouer () : messagebox.showinfo ("Comment jouer ?", "Le but du jeu est de remplir ces cases avec des chiffres allant de 1 à 9 en veillant toujours à ce qu'un même chiffre ne figure qu'une seule fois par colonne, une seule fois par ligne, et une seule fois par carré de neuf cases.")     
     
    def create_lines(canvas):
        scale = 480/9
        for i in range(0, 10):
            if (i!=4) and (i!=7) :
                canvas.create_line(i*scale, 0, i*scale, 580, width =1);
        else :
            canvas.create_line(i*scale, 0, i*scale, 580, width =3);
     
    def create_menu(app):
     
        menu = tk.Menu(app)
     
        m = tk.Menu(menu)
        m.add_command(label="Quitter le jeu", command=app.destroy)
        menu.add_cascade (label= "Partie", menu=m)
     
        menu.add_command(label="Comment jouer", command= Comment_jouer)
        menu.add_command(label=" A propos", command = About)
     
        app['menu'] = menu
     
    if __name__ == '__main__':
        app = tk.Tk()
        app.title(" Sudoku ")
     
        create_menu(app)
        grid = tk.Canvas(app, width=480, height=480, bg='SaddleBrown', bd = 55, relief="ridge")
        grid.pack()
        create_lines(grid)
     
        app.mainloop()
    "Rangé ainsi", est-ce que ce code n'est pas un peu plus lisible?
    Vous êtes intéressé au premier chef par la lisibilité du code que vous mettez au point: à vous de voir.

    - W
    Architectures Post-Modernes

  12. #12
    Invité de passage
    Inscrit en
    février 2013
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : février 2013
    Messages : 23
    Points : 0
    Points
    0

    Par défaut

    En effet, c'est beaucoup plus organiser. Je ne comprends pas le "if __name__ == '__main__':" ; vous avez dit que vous avez déplacé le reste, je ne vois pas quel reste, j'ai comparé le mien et le vôtre, et je ne comprends pas, pouvez vous m'éclaircir ?


    Ensuite, pour le clique de la souris, il faut l'ajouter comme tel dans mon code ?
    J'ai essayé le code mais je n'arrive toujours pas à rentrer des chiffres dans les cases, faut-il que j'utilise le widget entry ?

    Merci de votre patience !

  13. #13
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    5 238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 5 238
    Points : 7 251
    Points
    7 251

    Par défaut

    Salut,

    Si votre ambition est de faire un jeu de sudoko avec une interface graphique construite avec tkinter, il faudra écrire quelques centaines de lignes de code.

    Si vous décider de passer par le widget Canvas pour afficher la grille et "interagir" avec l'utilisateur, il va falloir prendre le temps de regarder comment fonctionne ce widget Tk. Ca passe par la réalisation de bouts de code qui:
    • dessinent les carreaux,
    • affiche la grille initiale,
    • savoir comment l'utilisateur pourra définir dans quelle case devra être affiché le chiffre tapé.

    Pour l'instant, vous savez dessiner des carreaux. C'est bien.

    Comment afficher la grille initiale? Avec un canvas difficile de ne pas utiliser .create_text. Comment savoir quelle case l'utilisateur veut jouer?
    Dans mon code, une case est créé par .create_rectangle et son bord devient rouge lorsque la souris est positionné dessus. S'il tape un chiffre l'item text associé à la case est mis à jour.

    Vous voulez réaliser cela autrement, très bien!
    Essayez de le coder, si vous rencontrez des difficultés, montrez comment vous avez essayé de... tous ceux qui lisent ce forum pourront essayez de vous aider.
    Mais lire la documentation Tk, définir les widgets à utiliser, les secouer un peu pour comprendre ce qu'ils font,... sont des activités que personne ne fera à votre place (c'est comme pour aller pisser).

    - W
    Architectures Post-Modernes

  14. #14
    Invité de passage
    Inscrit en
    février 2013
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : février 2013
    Messages : 23
    Points : 0
    Points
    0

    Par défaut

    Désolé pour ma réponse tardive.

    Je vais essayer de coder sa, je reviendrais plus tard.

    Quand vous dîtes afficher la grille initiale, je ne comprends pas, c'est à dire ? Faire en sorte que python considère ce qu'on a tracé en tant que grille ?

    Vous me conseillez donc d'aller consulter la partie sur .create_text pour afficher la grille initial ?

  15. #15
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    5 238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 5 238
    Points : 7 251
    Points
    7 251

    Par défaut

    Citation Envoyé par Pytdeb Voir le message
    Vous me conseillez donc d'aller consulter la partie sur .create_text pour afficher la grille initial ?
    Comment envisagiez vous d'afficher un nombre dans la grille que vous avez dessiné dans le Canvas? Si vous avez mieux que .create_text, pourquoi pas mais je demande à voir!

    - W
    Architectures Post-Modernes

  16. #16
    Invité de passage
    Inscrit en
    février 2013
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : février 2013
    Messages : 23
    Points : 0
    Points
    0

    Par défaut

    Bonjour,

    je suis bloqué, j'essaye d'utiliser create_text mais je ne sais pas quoi faire. Pour la position, je ne vois pas quoi mettre. J'ai commencé avec :

    def create_text (canvas):
    app.create_text( )

    Faudrait-il que je définisse ce qu'est une case ? Pouvez vous m'indiquer le chemin à suivre ? Je commence à devenir fou

  17. #17
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    5 238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 5 238
    Points : 7 251
    Points
    7 251

    Par défaut

    Salut,

    .create_text est une méthode du Canvas Tk (comme .create_rectangle).
    Pour la position, il y a 9x9=81 cases dans la grille.
    La position du "text" dans la case (r, c) pourrait être son centre.
    (r, c) étant le numéro de row, column

    Après c'est des règles de trois: quelles sont largeur et hauteur (width, height) du Canvas? Divisé par 9 çà donne la largeur x hauteur d'une case. A partir de là, on peut calculer la position du coin de la case (r, c), son centre.

    Faudrait-il que je définisse ce qu'est une case ? Pouvez vous m'indiquer le chemin à suivre ? Je commence à devenir fou
    La "case" est un objet élémentaire du jeu de Sudoku: elle aura une ligne, une colonne et sera dans une zone 3x3: elle devra avoir une valeur dans 1..9 différentes de celles qui sont même ligne, même colonne, même zone.
    Elle sera remplie initialement ou devra l'être par le joueur (comment le joueur pourra désigner la case qu'il souhaite "jouer"?).

    La notion de case est bien définie.
    Coder c'est décider comment seront représentées les différentes propriétés de la "case". Afficher la valeur quelle contient au bon endroit de votre grille, est un aspect de ce "comment"...

    Bon courage,
    - W
    Architectures Post-Modernes

  18. #18
    Invité de passage
    Inscrit en
    février 2013
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : février 2013
    Messages : 23
    Points : 0
    Points
    0

    Par défaut

    Voilà, j'ai essayé sa mais je ne sais pas comment faire pour rendre sélectionnable la case.
    Code :
    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
    from tkinter import messagebox
    import tkinter as tk
     
    def About () : messagebox.showinfo (title="A propos",)
    def Comment_jouer () : messagebox.showinfo ("Comment jouer ?", "Le but du jeu est de remplir ces cases avec des chiffres allant de 1 à 9 en veillant toujours à ce qu'un même chiffre ne figure qu'une seule fois par colonne, une seule fois par ligne, et une seule fois par carré de neuf cases.")     
     
    def create_lines_vert(canvas):
        scale = 480/9
        for i in range(0, 10):
            if (i!=4) and (i!=7) :
                canvas.create_line(i*scale, 0, i*scale, 580, width =1);
            else :
                canvas.create_line(i*scale, 0, i*scale, 580, width =3);
     
    def create_lines_hor (canvas) :
        scale = 480/9
        for j in range (0, 10) :
            if (j!=4) and (j!=7) :
                canvas.create_line(0, j*scale, 580, j*scale, width = 1);
            else :
                canvas.create_line (0, j*scale, 580, j*scale, width = 3) ;
     
    def create_menu(app):
     
        menu = tk.Menu(app)
     
        m = tk.Menu(menu)
        m.add_command(label="Quitter le jeu", command=app.destroy)
        menu.add_cascade (label= "Partie", menu=m)
     
        menu.add_command(label="Comment jouer", command= Comment_jouer)
        menu.add_command(label=" A propos", command = About)
     
        app['menu'] = menu
     
     
        l_case = 450/9
        h_case = 450/9
     
    def click( self, event ):
          self.clickPosition( event.x, event.y )
     
          l_case = 450/9
          h_case = 450/9
     
          case_x= (event.x) / l_case
          case_y= (event.y) / h_case
     
     
          centre_case_x= (case_x - 1) * l_case + l_case /2;
          centre_case_y= (case_y -1) * h_case +h_case /2;
     
          if (case_x==0) :
              centre_case_x = l_case /2
          else :
              centre_case_x = (case_x-1)*l_case + l_case/2;
     
          if (case_y==0) :
              centre_case_y = h_case /2
          else :
              centre_case_y = (case_y -1) * h_case + h_case /2 ;
     
    def ecrire (event) :
            grid.create_text ( click, fill=text_color, text='', font=canvas.font )
     
    if __name__ == '__main__':
        app = tk.Tk()
        app.title(" Sudoku ")
     
        create_menu(app)
        grid = tk.Canvas(app, width=450, height=450, bg='SaddleBrown', bd = 55, relief="ridge")
        grid.pack()
        create_lines_vert(grid)
        create_lines_hor (grid)
     
     
        app.mainloop()

  19. #19
    Invité de passage
    Inscrit en
    février 2013
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : février 2013
    Messages : 23
    Points : 0
    Points
    0

    Par défaut

    Bonsoir, je reste bloqué dans mon code, pouvez vous m'aider ? Merci.
    Je ne sais pas si c'est bon, je ne vois pas de résultat.

    Code :
    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
    def click( self, event ):
          self.clickPosition( event.x, event.y )
     
          l_case = 450/9
          h_case = 450/9
     
          case_x= (event.x) / l_case
          case_y= (event.y) / h_case
     
     
          centre_case_x= (case_x - 1) * l_case + l_case /2;
          centre_case_y= (case_y -1) * h_case +h_case /2;
     
          if (case_x==0) :
              centre_case_x = l_case /2
          else :
              centre_case_x = (case_x-1)*l_case + l_case/2;
     
          if (case_y==0) :
              centre_case_y = h_case /2
          else :
              centre_case_y = (case_y -1) * h_case + h_case /2 ;
     
    def ecrire (event) :
            grid.create_text ( click, fill=text_color, text='', font=canvas.font )

  20. #20
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    5 238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 5 238
    Points : 7 251
    Points
    7 251

    Par défaut

    Si vous ne filez pas tout le code, pas possible de testez.
    Regardez la discussion, vous n'êtes pas le seul à coder du sudoku.
    En plus votre collègue a de bonnes idées: essayez d'en profiter.
    - W
    Architectures Post-Modernes

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •