2012-10-01 1 views
1

J'apprends wxPython pour créer une interface utilisateur d'échecs, mais je ne sais pas exactement comment cela doit être fait, quels widgets utiliser. Je pense que je fais chaque carré d'un bouton avec l'image de la pièce, puis je les place sur le tableau les uns à côté des autres, j'ai donc 64 boutons sur le tableau. Quand je bouge une pièce, je mets le bouton sur le carré de la cible et le carré d'origine est alors remplacé par un bouton qui représente un carré vide.Modélisation d'un échiquier en wxpython

Est-ce la bonne façon de le faire dans wxPython? Je suis vraiment coincé ici, car il n'y a pas d'exemples sur le web pour une interface graphique d'échecs dans wxPython.

+0

On dirait que vous avez une bonne idée de la façon de l'implémenter, et que vous avez juste besoin de confiance pour aller de l'avant. Nous croyons en vous :-) – Kevin

+0

c'est beaucoup trop large ... mais non je ne ferais pas ça ... J'utiliserais le DrawingDC pour faire le tableau et ensuite j'installerais chaque morceau dans son propre panneau et le déplacerais le tableau –

Répondre

2

Ah, créer un programme d'échecs avec wxPython, c'est comme ça que j'ai appris la programmation python, il y a une dizaine d'années ;-) Bonne chance.

D'abord, vous devrez dessiner la grille pour le tableau. C'est facile. Ensuite, vous aurez besoin d'une infrastructure de données pour se souvenir des positions de toutes les pièces. Pour cela j'ai utilisé le module ici: http://www.alcyone.com/pyos/chess/. Ensuite, vous avez besoin d'une routine qui donné un Board va dessiner les pièces aux endroits appropriés.

Pour déplacer les pièces d'échecs, vous voudrez probablement utiliser le glisser-déposer. De cette façon, vous pouvez faire glisser un carré (ou la pièce dessinée sur ce carré). Vous aurez besoin d'une routine pour calculer le carré à partir des coordonnées de votre écran, par exemple. screen_to_board(). Sur l'événement drop, vous calculerez le carré cible en utilisant cette même routine. Ensuite, vous mettez simplement à jour l'état de la carte (utilisez Board.move()) et redessinez l'écran.

+0

Merci beaucoup. Mais comment pourrais-je dessiner la grille? Ce que j'ai de la difficulté à comprendre, c'est comment devrais-je représenter les pièces d'échecs (ou les 64 carrés qui ont des images). Comme des boutons? – geekkid

+0

Je n'utiliserais pas de boutons. J'ai simplement dessiné la grille sur une toile. Cela peut être fait en obtenant le contexte de l'appareil, puis en appelant 'DrawLine()' et 'FillSquare()' à plusieurs reprises. (Je cite de mémoire.) Pour les pièces d'échecs, j'ai pris les images dans les paquets de winboard/Xboard et les ai simplement dessinées au-dessus de la grille sur la toile. Je pense que j'ai utilisé quelque chose comme 'dc.DrawBitmap()'. –

+0

+1: J'aime l'idée d'un système où vous pouvez faire glisser et déposer les pièces, ce qui nécessiterait une toile, comme dans DragImage dans la démo wx. (Les boutons pourraient fonctionner si vous vouliez seulement cliquer, mais ce qui devrait arriver quand vous cliquez.) Les pièces veulent être déplacées.) – tom10