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

GUI Python Discussion :

[PYGAME] Gestion de grille


Sujet :

GUI Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 15
    Points : 10
    Points
    10
    Par défaut [PYGAME] Gestion de grille
    Bonjour,

    Actuellement en première année d'école d'ingénieur en informatique j'ai pour la fin de l'année un projet à rendre en python.

    Pour faire simple il s'agit d'un jeu de Black Box : http://fr.wikipedia.org/wiki/Black_Box_%28jeu%29 (cf. pour les règles).

    Nous avons dans la consigne l'obligation de laisser l'utilisateur choisir la taille de la grille dans laquelle il veut jouer.

    Pas de soucis jusque là (je précise que je n'ai pour le moment rien codé car la deadline est dans un petit bout de temps).

    Seulement en réfléchissant je me suis dis, qui dit choix de l'utilisateur pour la taille de la grille demande par la suite au programme de créer et d'afficher lui même cette grille.

    D'un point de vue interne je n'ai pas de soucis il est assez simple de créer une liste à 2 dimensions et d'en gérer son contenu.

    Ce qui me pose problème c'est l'indexation des cases.

    J'entends par là, comment puis je communiquer au programme (et surtout a pygame) les coordonnées d'une case, pour que l'utilisateur puisse par la suite cliquer et déclencher une action sur cette case ?

    Ayant déjà créer quelques jeux en pygame (Mastermind et Morpion) je sais qu'il est possible de définir "à la main" l'emplacement d'une case pour que le programme, lorsque l'utilisateur clique à un endroit, déclenche une action.

    C'est d'ailleurs ce que j'avais fait pour mes précédents jeux sachant que pour le morpion je n'avais que 9 cases, il était donc facile d'indexer ces cases au cas par cas via des coordonnés en x et en y.

    Le problème ici est, comme je l'ai indiqué dans l'intro de ce post, que je ne saurai pas à l'avance combien il y aura de cases. Je ne pourrai donc pas procéder de cette manière en disant xCase1 = ... , yCase1 = ... etc.

    Ma question est donc, comment puis je gérer ma "grille" et les différents événements se passant a l'intérieur sachant que le format de la grille sera variable ?

    J'espère que vous aurez réussi à me comprendre.

    Merci d'avance,

    Zl4T

    PS : Je pense que pour mieux saisir le sens de ma question il faut lire les règles du jeu sur wiki.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Salut,

    Soit une longueur L découpée en N cases.
    Soit un x dans 0..L, le numéro de la case est donné par la partie entière de x / N.

    Il ne faut pas se laisser impressionner par l'ordinateur au point d'en oublier "bases" et "bon sens".

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Oui, calculer les coordonnées est tout à fait faisable j'en suis conscient. Le problème n'est pas de calculer les coordonnées mais d'indexer les cases pour que je puisse faire un If la case1 est cliquée : ...

    Sachant que pour faire cela il faut que les coordonnées de la case soient stocker dans une variable que pygame reconnait comme type rect.

    N'ayant pas la possibilité de créer des variables à travers une boucle je ne vois vraiment pas comment faire.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Citation Envoyé par Zl4T_59 Voir le message
    Oui, calculer les coordonnées est tout à fait faisable j'en suis conscient. Le problème n'est pas de calculer les coordonnées mais d'indexer les cases pour que je puisse faire un If la case1 est cliquée : ...
    D'après la formule précédente, à partir de (x, y) exprimés en pixels, on va trouver (i, j) "indices" de la case cliquée.
    Ce qui conduit avoir un objet "cases" qui peut être "dict" ou "list" de "list" pour arriver à la case (i,j) via cases[i ,j] ou cases[i][j].
    note: dict et list sont des objets Python de base. Si vous n'arrivez pas encore à penser avec, prenez le temps d'apprendre car difficile de faire des choses compliquées sans se faire un nœud au cerveau sans eux.

    exemple vite fait avec tkinter:
    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
    import tkinter as tk
     
    rows = columns = 10
    size = 50
    cases = {}            # un dict pour se souvenir des cases.
     
    def on_click(event):
        i, j =  event.x // size, event.y // size  # (x, y) => (i, j)
        if (i, j) in cases:  # si la case existe...
            return
        # sinon on crée la case (i, j)
        x0, y0 = i * size, j * size
        x1, y1 = x0 + size, y0 + size
        cases[i,j] = damier.create_rectangle(x0, y0, x1, y1, fill='black')
     
    damier = tk.Canvas(width=rows*size, height=columns*size)
    damier.bind('<1>', on_click)
    damier.pack()
    tk.mainloop()
    Ca ne fait pas grand chose sinon créer la case (i, j) correspondante au (x, y) sur lequel on a cliqué et rien si la case existe déjà.
    note: "cases" est juste en illustration, on peut faire la même chose "sans".
    Avec Pygame, le principe est le même...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Merci beaucoup ! Pour info je pratique python depuis presque 2 ans maintenant je maîtrise donc assez bien les structures de données en python j'avais donc pensé à utiliser un dictionnaire mais je ne voyais pas comment l'utiliser en rapport avec Pygame.

    Je vous remercie de m'avoir mis sur la piste !

    Cordialement,

    Zl4T

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/01/2012, 15h26
  2. [AC-2003] Systeme de gestion de stock de grille
    Par rafalemirage dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 17/12/2010, 17h35
  3. [AC-2003] Gestion de stock de grilles
    Par rafalemirage dans le forum Modélisation
    Réponses: 2
    Dernier message: 16/12/2010, 10h36
  4. gestion des pixels dans pygames
    Par pfeuh dans le forum Calcul scientifique
    Réponses: 2
    Dernier message: 31/01/2007, 11h37
  5. Gestion des colonnes d'une grille.
    Par Maglight dans le forum Composants VCL
    Réponses: 1
    Dernier message: 06/12/2005, 19h02

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