# Autres langages > Python > GUI > [Python 3.X] Pygame jeu d'checs

## Neant34

Bonjour  tous,

Je suis en terminale avec comme option ISN, notre prof nous a demand de programmer avec pygame de russir  placer un cavalier sur un chquier et de russir  le dplacer avec la souris mais d'autoriser le dplacement 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'chquier mais a partir de ce moment deux problmes se posent a moi : y a-t-il une faon 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 problme et comment interdire les dplaements 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, crer une nouvelle variable lors du clic, vrifi si la diffrence des abscisses est gale a une valeur (ici 80 et 160) et faire de mme avec l'ordonne mais je ne sais si c'est le plus efficace.

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

----------


## Clodion

> Je suis en terminale avec comme option ISN, notre prof nous a demand de programmer avec pygame de russir  placer un cavalier sur un chquier et de russir  le dplacer avec la souris mais d'autoriser le dplacement 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]
> ...


Bonsoir,
Il est souvent nettement plus simple de travailler en "cases" plutt qu'en coordonnes souris.
Quand  la slection de cases possibles, il suffit de coder une fonction qui testera si la position entre dans les possibilits (il n'y a que huit possibilits). Et ces possibilits peuvent tre indiques 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 dplacement par un couple (x, y) de cases et de vrifier la prsence dans la liste
(puis, bien sr, de vrifier que cette case est bien sur l'chiquier et qu'il n'y a pas d'autre pices de mme couleur dessus!!)

Clodion
PS: si le dplacement n'est pas possible (ou invalide) alors il suffit de ne pas le raliser (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 fentre d'dition (reprsent par #).

----------


## Neant34

Je comprends pas comment je peux travailler en cases plutot qu'en coordonnes de souris...

----------


## wiztricks

> Je comprends pas comment je peux travailler en cases plutot qu'en coordonnes de souris...


Si vous avez 10x10 cases de 50=size pixels de ct, les coordonnes (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 mme chose, mais ce sera plus simple de traduire cheval  la case (i, j) et les dplacements qui vont avec.

- W

----------


## Neant34

Je crois comprendre mais pour le dplacement du cheval ensuite se fera comment ?

----------


## wiztricks

> Je crois comprendre mais pour le dplacement du cheval ensuite se fera comment ?


Avec des multiplications de (i, j) par size, on va trouver les (x, y), non?

- W

----------


## Neant34

Je suis vraiment dsol mais je ne comprends pas du tout ce que vous me dites....
je vois pas a quoi sert de donner des coordonnes a l'image puis a les multiplier avec la taille....

----------


## wiztricks

> Je suis vraiment dsol mais je ne comprends pas du tout ce que vous me dites....
> je vois pas a quoi sert de donner des coordonnes a l'image puis a les multiplier avec la taille....


Si vous codez le dplacement d'un cheval dans un jeu d'chec, un cheval  la case (i, j) peut effectuer les dplacements relatifs [(-2, 1), (-2, -1), (2, 1), (2, -1), (1, -2), (-1, -2), (1, 2), (-1, 2)] - modulo que les i, j rsultants soient dans 0..7.
Une telle reprsentation de l'chiquier aide  calculer les dplacements possibles sans trop vous planter car, c'est une reprsentation de l'chiquier.

La reprsentation que vous faites avec PyGame est une autre reprsentation de l'chiquier ou vous avez bien trop de pixels par cases pour savoir si elle est occup et o on peut dplacer la pice qui est dessus. 
L'intrt de l'exercice est d'arriver  jongler entre ces deux reprsentations: traduire ce que l'utilisateur voit et fait en une reprsentations en cases pour savoir o on est et ou on va.

- W

----------


## Neant34

> Si vous codez le dplacement d'un cheval dans un jeu d'chec, un cheval  la case (i, j) peut effectuer les dplacements relatifs [(-2, 1), (-2, -1), (2, 1), (2, -1), (1, -2), (-1, -2), (1, 2), (-1, 2)] - modulo que les i, j rsultants soient dans 0..7.
> Une telle reprsentation de l'chiquier aide  calculer les dplacements possibles sans trop vous planter car, c'est une reprsentation de l'chiquier.
> 
> La reprsentation que vous faites avec PyGame est une autre reprsentation de l'chiquier ou vous avez bien trop de pixels par cases pour savoir si elle est occup et o on peut dplacer la pice qui est dessus. 
> L'intrt de l'exercice est d'arriver  jongler entre ces deux reprsentations: traduire ce que l'utilisateur voit et fait en une reprsentations 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 pice...
Je suis dsol je dbute vraiment dans la programmation...

----------

