Jeu d'echec / chessgame

Soyez le premier à donner votre avis sur cette source.

Vue 60 774 fois - Téléchargée 3 752 fois

Description

ChessGame / Jeu D'Echec en C#

REMARQUE: J'AI MIS UNE NOUVELLE LIBRAIRIE EN LIGNE QUI OFFRE BEAUCOUP PLUS DE FONCTIONNALITE ET QUI CORRIGE CERTAINS BUGS. TELECHARGEZ-LA ICI: http://www.csharpfr.com/codes/CHESS-GAME-CORE-LIBRAIRIE-JEU-ECHEC-CSHARP_50090.aspx

Etant donné qu'il n'y avait encore aucun jeu d'échec sur le site, je me suis lancé dans ce petit projet.
La mise au point n'est pas extrêmement complexe, mais il faut tout de même organiser un peu les choses pour ne pas s'y perdre.
J'ai essayé de documenter au maximum le code pour que ça soit le plus facile à comprendre.

Voilà ce qu'on trouve principalement dans cette source :

- Utilisation de GDI+ (principalement dans le projet ChessCtrl)
- Utilisation de Xml (sans sérialization pour une fois :D)(dans le projet ChessGame)
- Utilisation de l'héritage et de tout ce que ça implique (classe et méthode abstraite, etc)(dans le projet ChessLib)
- Event/Delegate
- Generics
- Drag & Drop
- Utilisation d'un Web Service (ici, pour gérer une AI distante)

Programmer un jeu d'échec, ce n'est pas une révolution (il en existe plein à droite et à gauche). La plupart des jeux que j'ai pu essayer, testent la validité d'une position lorsqu'on pose la pièce sur l'échiquier. Ce que mon programme fait (je précise que ce n'est pas une révolution, mais moins courant) c'est qu'il contrôle au fur et à mesure qu'on drag la pièce, si on peut la poser sur l'endroit actuel ou pas.
Le web service utilise la notation de Forsyth-Edwards pour l'état du jeu. Je l'ai pour l'instant un peu simplifié (j'ai supprimé la règle des 50 coups, et la prise en passant). Autrement dit, l'AI ne demandera jamais un match nul et ne fera jamais de prise en passant (mais l'utilisateur, peut le faire).

Conclusion :


J'ai mis une AI locale basique en place (joue des coups au bol), je pense utiliser l'algorithme Alpha-Beta pour faire quelques chose de correct quand j'aurai le temps.
Sinon, je pense aussi faire qu'on puisse jouer en réseau... Tout dépendera donc du temps que j'ai à dispositon...

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
1
Date d'inscription
samedi 18 octobre 2008
Statut
Membre
Dernière intervention
30 juin 2009

bonjour,

J'ai 13 ans je connais vb et c# et aussi asp.net et je cherche aussi a faire un jeu d'echec tes exemples mon enórmement aider.
et surtout CHAPEAU, j'en connais pas beaucoup des personne qui savent faire un jeux d'echec.

merci.
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
58
Si tu avais regardé le code, tu aurais vu que l'ordi joue un coup au hasard ;-)
Si tu veux vraiment te mesurer à lui, règle "web-service" dans les options du jeu (en espérant qu'il soit toujours en fonction...)
Messages postés
4
Date d'inscription
lundi 17 octobre 2005
Statut
Membre
Dernière intervention
15 janvier 2009

un travail bon structuré,felecitation.
bon, je sais pas si tu joue les echecs mais j ai battu ton programme par un simple coup de berger 3 fois consecutive tout en etant au niveau 5 !!!!

coups de berger :4 mouvements !!
Messages postés
9
Date d'inscription
lundi 19 mars 2007
Statut
Membre
Dernière intervention
15 juillet 2009

J'ai téléchargé le projet pour voir un peu, et je trouve vraiment que c'est du bon travail :)
Il y a certaines choses à revoir (la création des pièces dans le game.cs par ex.) et des petits bugs (par exemple lorsque tu test si une piece doit etre "freeze", tu met une condition incomplete :"PieceMovecontinue.cs => FreezePiece() =>
if (!(otherPiece is Queen || otherPiece is Bishop || (Math.Abs(X) == 1 && otherPiece is Pawn) "
ce qui fait que si avec un fou ou une dame,on se met juste derrière un pion qui doit etre "freeze" pour éviter un échec, et bien le pion peut tout de meme bouger (cool on peut manger le roi du coup xd) :)
perso j'ai changé pour : (!otherPiece.AvailablePositions.Contains(base.CurrentPosition)).

Sinon c'est vraiment bien détaillé et on comprend très rapidement, ce qui est assez rare pour être dit.
Merci beaucoup pour tout ce travail :)
Messages postés
1
Date d'inscription
mercredi 8 août 2007
Statut
Membre
Dernière intervention
4 janvier 2008

Bonjour,

J'ai téléchargé le zip ce matin.
Pour une raison que je ne peux expliquer (je ne suis pas un geek), l'aide en ligne ne fonctionnait pas, créant en fait une erreur système.
J'ai donc modifié la ligne de code

Ancien code:
private void mnuAboutHelp_Click(object sender, EventArgs e)
{
System.Diagnostics.Process.Start("http://www.iechecs.com");
}

Nouveau code:
private void mnuAboutHelp_Click(object sender, EventArgs e)
{
System.Diagnostics.Process.Start("IExplore.exe","http://www.iechecs.com");
}

Il y avait peut-être une autre solution, mais je ne la connaissait pas.


Pour le reste, très chouette, je me régale ...
Beaucoup de commentaire, code très lisible ... etc ...

A plus
Afficher les 37 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.