Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

JEU D'ECHECS AVEC IA


Information sur la source

Catégorie :Jeux Niveau : Initié Date de création : 07/04/2004 Date de mise à jour : 08/04/2004 09:30:46 Vu / téléchargé: 5 852 / 1 496

Note :
9,33 / 10 - par 3 personnes
9,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (28)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Salut a tous,
Pour faire bref, j'ai dans la cadre d'un projet réalisé un jeu d'echecs avec Intelligence Artificielle. Bon, la vérité c'est que l'IA est pas très forte et que ya des conneries (genre interface reseau, take back quand on joue contre l'ordi) et deux trois autres trucs qui fonctionnent mal et que je dois corriger. L'IA se met aussi parfois en echecs toute seule (donc c pas cool)!!! mais le jeu est entierement fonctionnel en mode 2 joueurs, et presque entierement contre l'ordi.  Ne soyez pas trop severes, je ne suis qu'un petit debutant du C++ ;) mais j'ai quand meme passé 3 mois assez intensifs pour en arriver la.
Bon voila assez parlé, j'espere que cette source pourra aider des gens... ou simplement faire plaisir aux currieux ;).
PS: Désolé pour ceux qui ne comprennent pas l'anglais... mais j'étais obligé de programmer tout en anglais dans la mesure ou je fais mes etudes en angleterre.
PPS: Les sources sont tres peu commentées et je vais essayer d'améliorer ca aussi.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de LordBob le 07/04/2004 19:12:20

ca a l'air vraiment tout ca, je vais vite regarder !!!

signaler à un administrateur
Commentaire de MoDDiB le 07/04/2004 20:21:38

visual 7 grrr :(

signaler à un administrateur
Commentaire de bubble44 le 07/04/2004 20:44:16

Dommage qu'il y ai pas un executable, j'aurais bien aimé y jouer, mais j'ai pas C++ ou C++.net d'installer pour compiler.

: (

signaler à un administrateur
Commentaire de WhiteSpi le 08/04/2004 09:35:28

J'ai rajouté comme demandé pas bubble44 l'exe au zip, donc pour ceux ke ca interesse vous pouvez vous procurer la nouvelle version du ZIP.
Le jeu est effectivement développé a l'aide de Visual C++ .NET, bien que je n'ai pas utilisé les classes .NET
Voilà, bonne journée tout le monde ;)

signaler à un administrateur
Commentaire de WhiteSpi le 08/04/2004 09:36:19

J'ai rajouté comme demandé pas bubble44 l'exe au zip, donc pour ceux ke ca interesse vous pouvez vous procurer la nouvelle version du ZIP.
Le jeu est effectivement développé a l'aide de Visual C++ .NET, bien que je n'ai pas utilisé les classes .NET
Voilà, bonne journée tout le monde ;)

signaler à un administrateur
Commentaire de LeDesassembleur le 08/04/2004 10:06:27

salut !

C'est sans doutes un bon prog mais je tente de tester l'exe et j'ai un zoli mesage : manque : msc71.dll...

Dommage.

je réessaierai ce soir de chez moi car là au moins j'ai le .net
C'est un comble... ;-)

signaler à un administrateur
Commentaire de WhiteSpi le 08/04/2004 10:40:07

Ouais je pense que c'est une question de framework .NET, il faut qu'il soit installé sur la machine... VC++ .NET oblige...

signaler à un administrateur
Commentaire de Kirua le 08/04/2004 14:12:54

Pareil, mais je pense que mon pack .NET RT est installé. Ça peut venir d'autre chose? Ce serait qd même bête que les exes ne soient pas autonomes. C probablement pas ça.

---------------------------
WinChessFighter.exe - Composant introuvable
---------------------------
Cette application n'a pas pu démarrer car MFC71.DLL est introuvable. La réinstallation de cette application peut corriger ce problème.
---------------------------
OK  
---------------------------

signaler à un administrateur
Commentaire de WhiteSpi le 08/04/2004 16:27:40

OK OK,
Bon j'ai rajouté dans le ZIP toutes les DLL qui devraient etre necessaires so.... enjoy now ;)

++
WhiteSpi

signaler à un administrateur
Commentaire de jugar le 08/04/2004 21:50:59

Salut,
impressionnant... grosse entreprise que de faire une IA d'echec.

J'ai fait une petite partie avec l'ordi... et il a pas vu que je le mettai en echec :(  (avec ma reine en a4 et son roi en position initiale)
A la limite c pas grave... mais il m'a interdit de manger son roi.

Encore un ou deux petits bugs... bon boulot en tout cas.

continu bien! A+

PS: question graphique tu pourais faire un petit indicateur pour savoir a qui le tour

signaler à un administrateur
Commentaire de WhiteSpi le 08/04/2004 22:31:07

Ouais je suis désolé pour ce bug... je l'ai eu moi oci.. en fait le fait ke tu puisses pas bouffer le roi c paske j'ai fait cette restriction. Aux echecs normallement tu bouffes pas le roi adverse...et puis a l'epoque ou ct autorisé dans mon programme... si jamais tu le faisais ct big crash et debugger ;)
Il fo juste que je trouve pourkoi il se laisse foutre le roi en echecs.. mais je pense ke si tu augmentes la profondeur ca doit resoudre le probleme puiskil voit kil peut se faire bouffer son roi (=15O) dans mon prog.

Pour savoir le tour tu as un indicateur graphique en haut a droite juste en dessus de la liste des coups.

Voila

++
WhiteSPi

signaler à un administrateur
Commentaire de bubble44 le 09/04/2004 11:41:42

"OK OK,
Bon j'ai rajouté dans le ZIP toutes les DLL qui devraient etre necessaires so.... enjoy now ;)'

------

vous les voyez ou vos dll dans le zip ? bon j'arrete de boire, et je reviens dans qqs heures, p'etre que j'y verrais + clair.

;-)

signaler à un administrateur
Commentaire de WhiteSpi le 09/04/2004 12:39:24

RHAA
BON.... je viens de comprendre effectivement pourquoi les dll n'etaient pas dans le zip... c'est CPPfrance qui refuse mon nouveau zip car ce dernier est trop gros.
Alors je sais pas trop comment faire... bon je vous file juste le nom des 3 dll necessaires, elles doivent se trouver un peu partout: mfc71.dll, msvcp71.dll, msvcr71.dll.

Bonne chance ;)

++

signaler à un administrateur
Commentaire de ramboana le 09/04/2004 14:40:42

je ne sais pas quoi dire

signaler à un administrateur
Commentaire de bubble44 le 09/04/2004 15:10:49

Bon avec :

http://win6.jp/misc/mfc71.zip

y a les 3 dll dedans, ca semble marcher.
j'essaye le programme now.

signaler à un administrateur
Commentaire de bubble44 le 09/04/2004 15:32:11

Bon ben niveau 1, le programme joue n'importe comment, j'ai essayé le niveau 11, ca repondait pas trop, alors j'ai essayé de fermer le programme (essayer est le mot).

Niveau 4 c'etait mieux, sauf qu'il a joué les memes coups que niveau 1, pis a un moment ca a ecrit : memoire virtuelle insuffisante (mes 128 mo de ram + swap disk ?).

Voila, bonne continuation lol.

signaler à un administrateur
Commentaire de jugar le 09/04/2004 19:48:56

Re-salut,

grace à cppfrance.fr, tu as la chance d'avoir l'équipes de debuggage la plus grosse, la plus exigeante et la plus chiantes du moooooonde!

On va te le tester, te l'éprouver ce prog...

donc je confirme a partir de depth 3-4, memoire insuffisante.
( WinXP, celeron 2.4ghz avec 192Mo, je sais pas bcp de mem mais c un poratble )

Je suppose que tu fais un parcours d'arbre pour ton IA. Ben essaye de reduire la tailles des noeuds. Ou ne sauvegarde que les coups (4 characteres == int) et non la position complète du plateau (si tu ne le fait pas). est-ce que tu efface les noeuds deja explorés et les branches evaluées comme mauvaises? Ah je t'avais dis c du boulot cette connerie de jeu d'echec!!!

En attendant, question de l'indicateur de joueur: il est tout le temps sur "white" car dès que je pose ma pièce, le prog fonce dans ses calculs tête baissé. Tu devrais mettre à jour le coup joué, l'affichage, etc,... juste avant de lancer l'IA.

Et enfin, les coups joué par noir ne s'affiche pas dans l'historique.

Voili, en esperant ne pas trop te saouler, A+

signaler à un administrateur
Commentaire de WhiteSpi le 10/04/2004 03:21:25

Merci a tous pour vos conseils :)

Bubble concernant tes tests...
Le niveau c la depth, c'est a dire la profondeur de recherche de chaque coup.. donc en gros soyons clair.... dans la mesure ou le programme est loin d'etre optimisé.. si tu lui fais une depth de 11, et qu'on dit qu'il y a en moyenne 30 coups possible sur chaque position... ca fait 30^11=beaucoup beaucoup, et objectivement ca marchera pas. Du coup le processeur part a taquet et tu peux plus fermer le programme paske t'as plus la main => plantage.
Convernant les problemes de memoire... je t'avouerais que j'ai 756 MO de RAM donc... ca posait pas trop de problemes chez moi ;)
Cela dit le probleme doit venir, comme l'a souligné jugar du minimax. En effet, je genere l'arbre possible en entier avant de le supprimer... ce qui fait que si la profondeur est grande tu satures vite ta mémoire, fodrais ke je m'y penche aussi.
A propos d'afficher les coups joués... je suis carrement d'accord ;) mais le probleme c ke j'avais un vieux bug kan je permettais a l'ordi de rentrer ses coups dans la liste et j'ai pas le temps de chercher immediatement puisk le projet je le rends dans une semaine ;);) alors je suis sur le rapport lol. Cela dit dans le mode 2 joueurs la liste marche correctement.

Enfin merci a tous ca fait super plaisir... je me demandais si j'allais le continuer ou le laisser en etat... mais vous etes en train de me motiver a l'ameliorer ;)

++
WhiteSpi

signaler à un administrateur
Commentaire de eldered le 10/04/2004 13:06:43

Salut, je n'ai pas encore essayé ton programme, ms j'ai lu tous les commentaires, et ça a l'air lourd ... je pense que tu devrais utiliser des heuristiques pour faire jouer le cpu, parceque un parcourt exploratoire explose vite la machine ... de plus j'ai l'impression que tu mélange un petit peu tout, tu parle de ce parcourt pour détécter si le roi est en échéc : "... mais je pense ke si tu augmentes la profondeur ca doit resoudre le probleme ..." mais moi je pense, même si j'ai jamais coder un jeu d'échec, k'il fodrait dans un premier temps tester chacune des figures adverses présentes sur ton échiquier et regarder si elles mettent en périle tel ou tel figure  {tps de calcul rapide ...} et ensuite par rapport a sa, tu test si tu dois défendre tes figures privilégiées, ou alors attaqué avec une / des heristiques, et c'est en découpant le probléme comme ça que tu pourras reduire les tps de calculs ... diviser pour reigner ;)

Voila, aprés j'avoue que je n'ai pas lu le code et que je me trompe certainement car je n'y ai pas réfléchit longtps, ms ça peut etre une piste pour continuer ;) !!! En tout cas bon courage !!! ++

signaler à un administrateur
Commentaire de PiX3L le 10/04/2004 18:36:55

Salut, je n'ai pas tester ton programme mais tu parles de niveau de profondeur pour les calculs. Sache que pour une IA d'échecs ça sert a rien de calculer pleins de coups à l'avance. Tout d'abord il vaut mieux lui apprendre toutes les ouvertures possibles (enfin les plus courantes) afin que le début de jeu soit le mieux possible. Ensuite faut que tu fasses des tests si la piece peut etre prise, est-ce qu'elle est protegée, y a t-il un risque de fourchette, d'échec à la découverte etc...
Bonne continuation  :) !

signaler à un administrateur
Commentaire de MetalDwarf le 11/04/2004 11:33:16

Tu te trompes PiXL.Ca peut servir de calculer des ouvertures et des choses comme ca, mais la base d une IA d echec est et restera pour longtemps l etude de tous les coups possibles. Bien sur il y a mieux que l algorithme bete et mechant (mini-max), comme alpha-beta, negamax,...
Mais essaye d implementer ton modele d IA et tu verras que ca ne marche pas (ce n est pas pour rien que Deep Blue est un monstre...).

signaler à un administrateur
Commentaire de PiX3L le 11/04/2004 15:27:00

Bon il est vrai que je n'ai jamais essayé de faire une IA pour un jeu d'echecs mais en temps que joueurs, je sais bien que ça sert completement a rien de prevoir 10 coups a l'avance, mais vraiment a rien du tout.
Après peut etre que la demarche est différente lorsqu'il s'agit d'une IA car justement on peut calculer bcp de choses grâce a la vitesse des processeurs mais je suis pas du tout persuadé de l'utilité d'autants de calculs.
Voila :)

signaler à un administrateur
Commentaire de WhiteSpi le 12/04/2004 00:02:20

En fait la difference entre un humain et un ordi c'est que l'humain joue grace a son experience... donc en gros il regarde la position et sait les coups bons et pas bons. Tu peux pas fare comprendre ca a l'ordinateur et donc tu bourrines sur la profondeur de recherche.
Par contre s'il y'en a qui sont intéréssés j'ai actuellemnt un probleme. Ce probleme c'est celui evoqué plus haut a savoir que avec 128 Mo de ram par example ca ne suffit pas. Ce probleme est lié au fait que la mémoire ne se libere pas come il faut lorsque je detruit l'arbre. Je ne vois vraiment pas la raison. S'il y'en a qui on tla moindre idée ou la moindre envie de resoudre ce probleme ca serait super cool.
J'ai mis un post a cette adresse :
http://www.cppfrance.com/forum.v2.aspx?ID=209791
Merci a tous.

WhiteSpi

signaler à un administrateur
Commentaire de lamiseb le 15/04/2004 10:09:32

Au sujet de Deep Blue, je voudrais faire un commentaire : il calcule près de 200 millions de positions à la seconde. Et même comme ça s'il calculait tout, il mettrait une dizaine de secondes à calculer à trois coups de profondeur (un coup = un coup blanc et un coup noir), donc pour descendre à 4 coups, on multiple par 30 au carré, et on a le temps d'attente. Là où ça se complique le plus c'est qu'il faut savoir éliminer le plus de variantes possibles pour ne garder que celles qui en valent la peine. Quand à stocker le plus possibles d'ouvertures en mémoire, c'est toujours possible de mettre les plus courantes, mais si quelqu'un arrive à faire quelque chose d'exhaustif, qu'il me le dise...
Bon courage.

signaler à un administrateur
Commentaire de jugar le 18/04/2004 22:12:06

Re-salut tous le monde...

Je vous entend parler des logiciels d'échecs et des histoires de base de connaissances sur les ouvertures.

A ce propos, je vous conseil de jeter un coup d'oeil sur "Chess Master 7000". Ce jeu à une base de donnée DEMENCIELLE !!! Il prend 2 CD entiers (rien que ça!!!). Et là, y'a toute les ouvertures possibles (avec la variante de Machinkov jouer à Pekin le 31 février 1937 à 14h32... et les réponses de Jordy et M. Jackson correspondantes).

Plus des analyses de parties entieres.

Plus un tutoriel bien foutu. (aprend à utiliser ta tour, comment jouer avec un pion un fou, défendre ...)

Plus une IA de tarré ou tu choisis ton joueur. (un tel joue trop avec la dame, un autre aime faire chier, un autre est stratege, un autre est un attaquant kamikase, ... et le big boss, "Ches Master", te met la rouste de ta vie en moins de vingt coups).

Voili, avec ca vous allez réapprendre les echecs.

Au plaisir...

PS pour whitespi: Bon boulot, en tout cas, pour trois mois de projet. J'espère que ta soutenance c'est bien passée. Salut

signaler à un administrateur
Commentaire de zorlac le 20/04/2004 14:55:44

lut grâce à toi je suis passé de mon bon vieux vc++ 6 à vc++ 7, je passe du com au .net,. Je suis en tout cas d'accord avec "MetalDwarf", car l'intelligence sera plus efficace si elle reste autonome par contre tout en implémentant certains cas de figure, il pourrait se référer à une base de connaissance qu'il aurait construite au fuire et à mesure de ses parts mais au plus il tentera de combinaisons, au plus l'IA sera souple et surprenante pour nos esprit humain ;-) bon boulot en tout cas continue... tu pourrai st'inspiré du prolog pour créer une IA encore plus performante ;-) je c mm si je susi encore jeune le prolog est une vieille riquette mais je pense que c un ebonne base d'observation pour implémenter un system orienté object ;-) enfin bon ...

signaler à un administrateur
Commentaire de skone007 le 21/04/2004 23:38:40

je voudrai  juste dire que c'est bien d'estimer le niveau de l'adversaire et d'adapter le jeu et je voudrai savoir comment t'estime le nniveau des joueurs ?

signaler à un administrateur
Commentaire de WhiteSpi le 22/04/2004 12:28:38

Salut tout le monde,

En fait j'ai pas eu de soutenance, ici c'est juste un memoire qu'ils veulent... mais j'en ai bien chié kan meme ;)
Concernanr le prolog.... je l'ai étudié mais alors faire une IA bonjour la galere... et puis j pense ke le C++ est kan meme beaucoup plus rapide, sans compter que faire cette interface graphique en prolog heu... amuses toi ;)
Pour l'IA si j'ai la motivation, meme sans changer vraiment le programme ya pein d'endroits ou je sais deja que je pourrais optimiser les calculs... et ca demande qu'a etre fait...
Concernant skone007, je comprends pas bien ta question... si tu parles d'etimer le niveau d'un joueur humain ca se fait quand tu joues en club, tu obtiens un classement en jouant contre des joueurs classés. Pour un jeu d'echecs informatique, il faut faire tout plein de tests contre des joueurs classés et voir ses resultats.
Voila, j'ai mis a jour la source qui devrait resoudre beaucoup de bugs.
Le programme ne devrait plus planter, mais restez quand meme en profondeur 2, ya toujours un probleme de liberation de memoire.

Merci a tous!

WhiteSpi

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,50 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS