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 jeu d'échecs


Sujet :

GUI Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 16
    Points : 10
    Points
    10
    Par défaut Pygame jeu d'échecs
    Bonjour à tous,

    Je suis en terminale avec comme option ISN, notre prof nous a demandé de programmer avec pygame de réussir à placer un cavalier sur un échéquier et de réussir à le déplacer avec la souris mais d'autoriser le déplacement que sur les cases où il est autorisé à aller.

    J'avais pensé a utiliser quelque chose comme ca :

    for event in pygame.event.get():
    ....if event.type == MOUSEBUTTONDOWN :
    ........if event.button == 1 :
    ............cavalier_x =event.pos[0]
    ............cavalier_y =event.pos[1]


    Et ensuite d'encadrer les valeurs de cavalier_x et de cavalier_y pour que l'image se blit juste dans la case voulue et pas n'importe ou sur l'échéquier mais a partir de ce moment deux problèmes se posent a moi : y a-t-il une façon plus simple que ça :

    if 190 < cavalier_x < 270 and 270 < cavalier_y < 350:
    ....cavalier_x = 190
    ....cavalier_y = 270

    pour tout les carreaux car ça me prends beaucoup de place et mon second problème et comment interdire les déplaements dans les cases où il n'est pass sensé pouvoir aller... J'avais pensé a utilisé quelque chose en fonction de de l'abscisse et de l'ordonné, créer une nouvelle variable lors du clic, vérifié si la différence des abscisses est égale a une valeur (ici 80 et 160) et faire de même avec l'ordonnée mais je ne sais si c'est le plus efficace.

    (Comment faire pour la tabulation ?)
    Merci d'avance pour votre aide

  2. #2
    Membre éprouvé
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Points : 926
    Points
    926
    Par défaut
    Citation Envoyé par Neant34 Voir le message
    Je suis en terminale avec comme option ISN, notre prof nous a demandé de programmer avec pygame de réussir à placer un cavalier sur un échéquier et de réussir à le déplacer avec la souris mais d'autoriser le déplacement que sur les cases où il est autorisé à aller.

    J'avais pensé a utiliser quelque chose comme ca :

    for event in pygame.event.get():
    ....if event.type == MOUSEBUTTONDOWN :
    ........if event.button == 1 :
    ............cavalier_x =event.pos[0]
    ............cavalier_y =event.pos[1]


    Et ensuite d'encadrer les valeurs de cavalier_x et de cavalier_y pour que l'image se blit juste dans la case voulue et pas n'importe ou sur l'échéquier mais a partir de ce moment deux problèmes se posent a moi : y a-t-il une façon plus simple que ça :

    if 190 < cavalier_x < 270 and 270 < cavalier_y < 350:
    ....cavalier_x = 190
    ....cavalier_y = 270

    pour tout les carreaux car ça me prends beaucoup de place et mon second problème et comment interdire les déplaements dans les cases où il n'est pass sensé pouvoir aller... J'avais pensé a utilisé quelque chose en fonction de de l'abscisse et de l'ordonné, créer une nouvelle variable lors du clic, vérifié si la différence des abscisses est égale a une valeur (ici 80 et 160) et faire de même avec l'ordonnée mais je ne sais si c'est le plus efficace.

    (Comment faire pour la tabulation ?)
    Merci d'avance pour votre aide
    Bonsoir,
    Il est souvent nettement plus simple de travailler en "cases" plutôt qu'en coordonnées souris.
    Quand à la sélection de cases possibles, il suffit de coder une fonction qui testera si la position entre dans les possibilités (il n'y a que huit possibilités). Et ces possibilités peuvent être indiquées dans une liste!!
    Pour la liste, quelque chose comme: lst = [(-2, 1), (-2, -1), (2, 1), (2, -1), (1, -2), (-1, -2), (1, 2), (-1, 2)]
    Il suffit alors de calculer le déplacement par un couple (x, y) de cases et de vérifier la présence dans la liste…
    (puis, bien sûr, de vérifier que cette case est bien sur l'échiquier et qu'il n'y a pas d'autre pièces de même couleur dessus!!)

    Clodion
    PS: si le déplacement n'est pas possible (ou invalide) alors il suffit de ne pas le réaliser (et d'afficher un petit message)!!
    PS2: pour conserver les tabulations et rendre un code lisible, il suffit de coller du code entre les balises ["CODE]["/CODE] (sans les guillemets) ou plus simplement en cliquant sur le bouton le plus à droite de la fenêtre d'édition (représenté par #).

  3. #3
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Je comprends pas comment je peux travailler en cases plutot qu'en coordonnées de souris...

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Neant34 Voir le message
    Je comprends pas comment je peux travailler en cases plutot qu'en coordonnées de souris...
    Si vous avez 10x10 cases de 50=size pixels de côté, les coordonnées (x, y) de la "souris" seront dans [0..500] x [0..500] et le (i, j) de la case sera (x//size, y//size). In fine, c'est la même chose, mais ce sera plus simple de traduire cheval à la case (i, j) et les déplacements qui vont avec.

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

  5. #5
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Je crois comprendre mais pour le déplacement du cheval ensuite se fera comment ?

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Neant34 Voir le message
    Je crois comprendre mais pour le déplacement du cheval ensuite se fera comment ?
    Avec des multiplications de (i, j) par size, on va trouver les (x, y), non?

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

  7. #7
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Je suis vraiment désolé mais je ne comprends pas du tout ce que vous me dites....
    je vois pas a quoi sert de donner des coordonnées a l'image puis a les multiplier avec la taille....

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Neant34 Voir le message
    Je suis vraiment désolé mais je ne comprends pas du tout ce que vous me dites....
    je vois pas a quoi sert de donner des coordonnées a l'image puis a les multiplier avec la taille....
    Si vous codez le déplacement d'un cheval dans un jeu d'échec, un cheval à la case (i, j) peut effectuer les déplacements relatifs [(-2, 1), (-2, -1), (2, 1), (2, -1), (1, -2), (-1, -2), (1, 2), (-1, 2)] - modulo que les i, j résultants soient dans 0..7.
    Une telle représentation de l'échiquier aide à calculer les déplacements possibles sans trop vous planter car, c'est une représentation de l'échiquier.

    La représentation que vous faites avec PyGame est une autre représentation de l'échiquier ou vous avez bien trop de pixels par cases pour savoir si elle est occupé et où on peut déplacer la pièce qui est dessus.
    L'intérêt de l'exercice est d'arriver à jongler entre ces deux représentations: traduire ce que l'utilisateur voit et fait en une représentations en cases pour savoir où on est et ou on va.

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

  9. #9
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Si vous codez le déplacement d'un cheval dans un jeu d'échec, un cheval à la case (i, j) peut effectuer les déplacements relatifs [(-2, 1), (-2, -1), (2, 1), (2, -1), (1, -2), (-1, -2), (1, 2), (-1, 2)] - modulo que les i, j résultants soient dans 0..7.
    Une telle représentation de l'échiquier aide à calculer les déplacements possibles sans trop vous planter car, c'est une représentation de l'échiquier.

    La représentation que vous faites avec PyGame est une autre représentation de l'échiquier ou vous avez bien trop de pixels par cases pour savoir si elle est occupé et où on peut déplacer la pièce qui est dessus.
    L'intérêt de l'exercice est d'arriver à jongler entre ces deux représentations: traduire ce que l'utilisateur voit et fait en une représentations en cases pour savoir où on est et ou on va.

    - W
    Jusqu'ici j'ai compris mais je ne vois pas comment je vais pourvoir ma pièce...
    Je suis désolé je débute vraiment dans la programmation...

Discussions similaires

  1. Projet Jeu d'échec
    Par Layla dans le forum Langage
    Réponses: 10
    Dernier message: 23/12/2010, 13h06
  2. [IA] jeu d'échec
    Par Leinhardt dans le forum Intelligence artificielle
    Réponses: 7
    Dernier message: 01/04/2008, 21h33
  3. L'empereur de Chine et le jeu d'échecs
    Par momo1367 dans le forum Pascal
    Réponses: 1
    Dernier message: 04/01/2008, 02h08
  4. Serveur de jeu d'échec en PHP
    Par S_Xavier dans le forum Langage
    Réponses: 3
    Dernier message: 20/10/2007, 15h02
  5. Jeu d'échec borland soap
    Par rpoulin dans le forum Web & réseau
    Réponses: 2
    Dernier message: 20/10/2005, 05h02

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