Après 3 heures d'archarnement, j'ai enfin réussi à gagné une partie.
Sub0, bravo c'est du beau travail!
Version imprimable
Après 3 heures d'archarnement, j'ai enfin réussi à gagné une partie.
Sub0, bravo c'est du beau travail!
il est un peu plus puissant que celui que j'ai fait (le tien doit valoir 1400elo soit un niveau relativement correct pour amateur et plutôt moyen pour un joueur de club ^^
sympa en tout cas :)
euh je me disais, au lieu de me taper 20 heure ou + de temps à taper les ouvertures, quelqu'un saurait-il où je pourrais trouver une bibliothèque d'ouverture ? (sous un format que je puisse traiter avec un algo, dans un fichier texte par exemple)
merci d'avance !
Salut!
Je n'ai pas encore développé les ouvertures...
Je comptais le faire prochainement en me basant sur cette lib :
http://sub0.developpez.com/delphi/gnuchessbook.txt
Au final, j'aimerais pouvoir donner au programme une série de fichiers PGN et qu'il se charge de les utiliser pour calculer les ouvertures. Cela pourrait-être sympa je pense de préparer quelques séries des grands joueurs. On obtiendrait alors les ouvertures diverses et ciblées où le joueur pourrait choisir le style de "son adversaire"...
à+
merci :)
oui genre choisir "jouer contre kasparov" avec la bibliothèque des parties jouées par kasparov ^^
mais à mon avis il faut aussi insérer dans la biliothèque, les "mauvais" coups d'ouverture, avec la réponse adéquate, comme ça l'ordinateur répondra correctement à un mauvais coup du joueur ! (mais si on fait ça il faudra ajouter une notion de force à chaque coup, c'est à dire 2 pour bon, 1 pour moyen, 0 pour mauvais, et l'ordinateur lui ne choisirait que les branches valant 1 ou 2, mais aurait quand même les réponses aux mauvais coups valant 0 joués par le joueur)
j'ai un exemple concret : e2e4 e7e5 g1f3 et la : f7f6 est un mauvais coup auquel on répond f3e5 qui semble dénué de sens ^^
en fait en développant ses pièces trankilou on gagne sans trop de pb, mais c'est du beau boulot quand même! il ne donne pas de pièces betement, voit les menaces..etc.
J'essaye aussi de faire une IA d'échecs en ce moment, mais j'ai un bug pendant l'analyse des coups (java.util.ConcurrentModificationException (dsl si je ne suis pas sur le bon forum ;o)), et les seules parties que je peux faire se jouent en profondeur d'analyse 1 demi coup ;o)
Salut!Je ne sais pas si tu as remarqué, mais il ya une trackBar à gauche de la fenêtre, sous la liste, qui permet de définir le temps de reflexion accordé à l'IA. Perso, j'arrive limite à le battre avec un temps de reflexion d'une seconde... alors j'imagine avec un temps plus long ! ;)Citation:
Envoyé par Ben0007
A propos de Java, j'avais aussi essayé plusieurs démos et programmes d'échecs réalisés avec Java, mais aucun d'entre eux ne m'a convaincu d'utiliser Java pour développer le mien. Ils ont tous plus ou moins bugués au même niveau -> la recherche du meilleur coups à jouer... Cela est finalement compréhensible puisque Java est une surcouche système, il prend déjà pas mal de ressources en étant un intermédiaire de plus. Pour obtenir les meilleurs résultats possibles, il faut s'attaquer directement au système (langage machine, genre l'assembleur). Malgré tout, ne te décourage pas, le développement d'une IA d'échec est vraiment très intéressant, ça vaut le coups de se prendre la tête avec le code (voir les liens donnés dans les posts précédents concernants les techniques de recherche), à+
Bon alors il ma fait 3 fois échecs de la même façons et nulle, alors que j'était mal barré. Sinon, faudrait qu'il varie plus souvent ses ouvertures, répondre pratiquement toujours C5 à E4, ça devient lassant...
Sinon il se débrouille bien...
Sinon pour gagner plus facilement, il faut vite sortir du début et éviter les finales, ne pas échanger de pièces, c'est dans ces moments que les ordis ont le plus de mal à calculer...
En effet, je dois encore programmer la fonction des ouvertures (voir les messages précédents)... Au niveau de la force du jeu, c'est encore plus facile avec un Pentium 2 ou en surchargeant le proc avec d'autres tâches. On peut aussi interrompre la recherche en cours pour forcer L'IA à jouer en cliquant sur le bouton gauche de la souris... En ce qui concerne le pat suite à la répétition d'un même coups, je vais regarder si je peux améliorer l'algo; Dans le cas où l'IA possède une meilleure position que son adversaire, elle doit éviter le pat, sinon, chercher le nul me semble mieux que la défaite, non ?
Merci. ;)
dans la fonction qui évalue la position tu dois tenir compte des coups précédents !
si 3 positions identiques, ou 50 coups sans prise, l'évaluation doit devenir = 0, et donc automatiquement si l'ordi est en avantage il ne cherchera pas le nul, contrairement au cas ou il serait en train de perdre !
l'algo du minmax fait le reste, y'a juste l'évaluation de la position qu'il faut changer selon moi !
En fait, je possède une fonction pour déterminer si la partie est (ou devient nulle) :Pour le moment, cette fonction sert juste à l'arbitre et à interrompre la recherche...Code:Function DrawGame: Boolean;
Je vais donc l'utiliser pour l'évaluation, exactement comme tu me l'as conseiller.
J'avais récemment ajouté une pénalité pour la perte de la position du roque.
Le code à ajouter pour le pat se situe au même niveau. Je regarderai ça demain tranquillement...
Merci et bonne nuit ;)
He bien , quand je pense que j'en ai vu la genése de ce jeu , félicitation , tu as fais quelque chose de tres estetitque et de tres bien ficelé .
oué! :D D'ailleurs si tu te sens toujours de faire un M3D... :D
à+
Version 0.2d
Win XP pro SP2
N'a pas fonctionné les 3 premiers lancements.
1er et 2eme -> erreur "messages"
3ème -> "Application windows 16 bits: mémoire insuffisante"
Depuis, ça fonctionne.
Salut!
Tout d'abord je te souhaite la bienvenue dans les forums de Developpez.com. ;)
Merci pour ton test, cependant j'ai arrêté le développement de cette version "16bits" il ya presque un an...
J'ai traduis le code en 32 bits pour obtenir pour le moment cette version :
http://sub0.developpez.com/delphi/exe/TableB5.zip
Ce programme est également compatible avec les émulateurs Windows sous Linux (Wine & CrossOver). Il possède la particularité d'être redimensionnable, on peut naviguer dans la liste des coups, on peut régler la luminosité et le contraste, etc... Prochainement, on pourra choisir l'image (texture) pour la table. Je dois encore terminer de programmer les ouvertures et le tchat, mais maintenant que j'ai repris le travail, je n'ai plus trop de temps à consacrer au développement du jeu, mais je reste motivé.
Encore merci, à+
Je suis pas vraiment nouveau, regarde ma date d'inscription :wink:Citation:
Envoyé par Sub0
Mais c'est vrai que ça fait pas mal de temps que je n'avais pas posté, par manque de temps. Désolé d'avoir testé la mauvaise version, j'suis vraiment à l'ouest parfois :?
moi je suis partant , il faut que emaile moi , et on regarde ca !!! :D
Salut !Je t'ai déjà tout expliqué ce que je voulais -> au plus simple !Citation:
Envoyé par charly
Les détails ne sont pas un souci lorsqu'on n'a même pas le minimum.
Je t'ai donné l'échiquier, les pièces, les textures... Il ne reste plus qu'à l'implémenter avec Delphi.
Si possible, je souhaite intègrer un moteur 3D avec Direct3D et OpenGL que l'utilisateur puisse choisir.
Si cela ne te dis rien, alors tanpis, à+
rebonjour sub0 ça fait longtemps que je ne suis plus venu ...
:D
tu as bien avancer dans ton projet c'est extra ^^
juste un truc tu as abandonné l'IA ou tu la remettra plus tard...?
edit: a non j'avais pas vu les case a cocher een bas ;-) c'est bon... :wink:
Salut!
Non, l'IA est suffisemment forte, il suffit de paramètrer le temps de reflexion selon la puissance désirée (et fonction de la puissance du pc également). Manque surtout les ouvertures, pouvoir choisir le style de jeu (choix d'un grand joueur par exemple), le calcul des Elos... Et restera enfin le tchat pour jouer sur internet plus quelques options graphiques. Faudra aussi que je m'occupe de réaliser un site, un forum pour ce projet. Tu trouveras la dernière version ici, comme d'hab, et les sources de l'arbitre ici. ;)
à+
je ne comprend pas comment configurer le temps de reflexions de l'IA...
http://quentinenforce.ath.cx/echec.JPG
ou fait on cela?
En effet, l'option n'est pas présente dans cette interface. Pour l'instant, je règle le temps de reflexion dans le code, je l'ai mis à 3 secondes. Je l'ai donc ajouté dans une nouvelle version archivée ici :
http://sub0.developpez.com/delphi/exe/TableB5.zip
J'ai simplement remplacé la barre de réglage de transparence par le réglage du temps de reflexion de l'IA (3ème barre tout en bas). Tu remarqueras que les 1er coups joués en début de partie sont très rapides, la recherche commence vraiment au bout de 4 ou 5 coups... A gauche, juste au dessous de la liste des coups, il ya une petite barre de progression qui indique le temps restant à l'IA pour jouer. Je rappelle d'ailleurs qui il est possible d'interrompre cette recherche en cliquant sur le bouton gauche de la souris, à+
Ya un bug assez énorme et simple à régler :
Quand tu joues sur le temps de réflexion de l'IA, tu peux monter, pas de pb, par contre, tu peux aussi mettre 0.
Et là, il apparait un "division par zéro" pas joli joli...
Par contre, il est plutôt bien conçu.
Pour les débutants, proposer les coups possibles, c'est bien, mais on devrait avoir la possibilité d'enlever ça ?
Sinon, joli boulot quand même car c'est complexe à réaliser.
Tu as utilisé des méthodes "classiques", non ?
J'entends par là que tu n'as pas tenté l'approche algo génétique ou autre chose ?
Salut Progman! ;)oops, comme j'ai ajouté l'option rapidement pour Quentin en force, je n'ai pas fait gaffe à ça.Citation:
Envoyé par progman
Je corrige le bug immédiatement. Merci.
Oui, ya une case à décocher... "conseils activés" (la 3ème en partant de la gauche).Citation:
Envoyé par progman
La méthode de recherche de l'IA est classique :Citation:
Envoyé par progman
Une fonction d'évaluation utilisant Min-Max, Alpha-Beta et PVS (Principal Variation Search).
On en avait déjà parlé dans ce sujet, page 5 :
http://www.developpez.net/forums/vie...689053#1689053
...mais toutes vos suggestions sont les bienvenues ! ;)
Bonjour à tous! ;)
Juste un petit up pour vous dire que je continu le développement du programme. Dernièrement, j'ai changé les graphismes des pièces par des jeux de meilleures qualité (dessin plus fin) et la possibilité de lancer le programme en plein écran si celui-ci a été fermé agrandi. Il est également possible de changer la résolution de l'écran sans que le programme soit altéré (les nouvelles dimensions sont immédiatement prises en compte). A présent, je prépare le dialogue pour définir ses propres skins. On pourra y choisir les couleurs, la teinte, luminosité, contraste des pièces, indépendemment ou non de l'échiquier, choisir également la texture des cases (bois, marbre, métal ou import d'image), les dimensions du cadre de l'échiquier, les marges, la police des coordonnées, etc... Bref, les graphismes de ce jeu seront redéfinissables au maximum et l'utilisateur pourra sauver les paramètres dans un fichier (skin perso) pour pouvoir le rappeller quand il le souhaite.
Pour la suite, il me restera à implémenter les ouvertures, le calcul des ELOs, et le tchat. Je vous ai d'ailleurs préparé une petite démo de l'interface graphique du tchat pour ceux qui veulent voir à quoi il va ressembler et surtout si vous trouvez des bugs, avertissez-moi ! ;)
http://sub0.developpez.com/delphi/exe/rv1.zip
Merci.
dire que j'avais jamais vu ce post... je vais tester la derniere version pour la peine :P
Etant un ancien champion d'echec (junior et departemental, faut pas rever non plus :mrgreen: ), je vais essayer de lui tenir tête 8-)
(sens qu'il va se prendre une taule :aie: )
Génial. :ccool:
N'oubli pas qu'il ya une barre de réglage tout en bas pour définir le temps de reflexion accordée à l'IA. A chaque fois que l'IA perd, cette valeur augmente automatiquement d'une demi seconde. Je rappel également que les ouvertures ne sont pas encore implémentées. La dernière version est toujours dispo à cette même adresse :
http://sub0.developpez.com/delphi/exe/TableB5.zip
à+
salut c'est très cool ton programme je l'aime bien; cependant lorsque je gagne il affiche "game over". et puis il faudrait donner la possibilité d'annuler un pas précédement effectué dans un delai imparti au joueur. ton est très reussi j'aimerais que tu m'indique comment tu fais , car je suis debutant en programmation et j'utilise delphi et de plus jsuis un amateur des jeux déchec
bonne continuation:P
salut c'est très cool ton programme je l'aime bien; je l'ai testé sur un pc avec un pII 233 Mhz et 96 Mo de Ram
bonne continuation:P
Salut heistein ! :D
Tu as raison :
• Le jeu est capable de savoir quel camps a gagné la partie. Même dans le cas d'un pat, il peut savoir quel camps possède les pièces les plus fortes. D'ailleurs, cela est nécessaire pour le calcul des ELOs... Je penserai à ajouter l'affichage pour indiquer quel camps à gagné.
• C'est prévu de pouvoir revenir en arrière lorsque le jeu sera en ligne; Le joueur pourra revenir sur un coups (avec le bouton droit) dans un délai de 1 seconde, les hologes des joueurs seront arrêtées à ce moment là. Autrement dit, le programme attendra 1 seconde avant d'envoyer le mouvement au serveur. Par contre, je ne l'avais pas envisagé lorsqu'on joue contre l'IA...
Comment je fais ? La programmation et les échecs ont toujours été une passion, c'est ce qui motive. Je programme les éléments séparément avant de tout fusionner. Par exemple, j'ai d'abord programmé le jeu d'échecs sans IA. Tu trouveras les sources en cliquant sur le lien suivant :
http://sub0.developpez.com/delphi/Table5m.zip
Pour l'IA au départ, je suis parti du code d'un jeu nomé OWLChess disponible avec Turbo Pascal pour Windows (le tout 1er Delphi). J'ai extrais uniquement le code de l'IA pour en faire un éxécutable 16bits. Puis avec Delphi, j'ai réalisé l'interface graphique à partir du code dont le lien est donné ci-dessus. Les programmes communiquent alors via les messages windows. Voici le résulat :
http://sub0.developpez.com/delphi/chess2d.zip
Ensuite, j'ai décidé de convertir le code de l'IA en 32bits pour pouvoir l'intégrer directement dans mon programme Delphi. Je suis reparti du début avec l'expérience que j'avais eu de mes programmes précédents. Important : Je teste autant que possible mes programmes avec différentes config Windows (surtout avec un vieux PC), et sous différentes plate-formes (émulateurs sous Linux), etc. Cela permet de rendre mon code plus propre et le plus compatible possible.
Mon conseil si tu veux te lancer dans la programmation : Pense toujours à découper ton projet en petits sous-programmes et met au point chacun de ces éléments séparément avant de tout assembler. Si ton projet est un jeu d'échecs, je te conseille la lecture de ce topic en entier car il ya pleins de bons conseils et de nombreux liens très intérressants, à+
Bonjour,
Gavé de me faire ramasser par le jeu d'echec chess2d, j'ai quitté sauvagement le jeu. A savoir g bindé un bouton sur ma souris pour quitter directement.
ET la c'est le drame
Ca a du quitter vraiment a l'arrache, car j'aice message d'erreur qui se repete a l'infini....
http://img361.imageshack.us/img361/6...ss2dit3.th.jpg
Cordialement
Merci pour l'info skipou. :ccool:
Le développement du programme Chess2d est arrêté car ce jeu utilise 2 programmes éxécutés simultannément :
- L'interface graphique réalisée avec Delphi (32bits)
- L'intelligence artificielle réalisée avec BPW (16bits)
Les 2 programmes communiquent via les messages windows et il suffit qu'un message soit mal envoyé ou reçu pour générer un bug...
J'ai depuis porté l'IA sur Delphi et repartir sur des bases plus propres.
Le jeu en cours de développement est disponible à cette adresse :
http://sub0.developpez.com/delphi/exe/TableB5.zip
à+
Salut!
Je me pose quelques questions, pouvez-vous m'aider svp ?
La 1ère est une question concernant la partie nulle (pat).
Dans les règles officielles, il est dit ceci (article 10.4) :Je n'ai pas bien saisi la condition c) :(Citation:
The game is drawn when one of the following endings arises:
(a) king against king;
(b) king against king with only bishop or knight;
(c) king and bishop against king and bishop, with both bishops on diagonals of the same colour.
This immediately ends the game.
La seconde question concerne aussi la partie nulle, plus exactement les 3 mêmes mouvements répétés 3 fois de suite : En fait, mon arbitre actuel recherche dans tous les coups joués depuis le début, si le même tour de jeu s'est répété 3 fois. Ainsi, même si l'on a joué autre chose entre ces mouvements, la partie est déclarée nulle, ce qui me semble pas être correcte. J'ai donc cherché sur le net, et voici ce que j'ai trouvé :Et voici ce qui est dit dans les règles officielles (article 10.10) :Citation:
Si la même disposition de pièces se reproduit trois fois lors d'une partie (avec le même joueur devant jouer), le joueur dont c'est le tour de jouer peut déclarer la partie nulle. (Lorsque le droit de roquer a été perdu entre deux de ces situations, alors ces situations ne sont pas considérées comme étant identiques. Pour les points de détail de cette règle, se reporter aux Règles officielles des Échecs.)
Et dans une autre page du web :Citation:
The game is drawn, upon a claim by the player having the move, when the same position, for the third time:
(a) is about to appear, if he first writes the move on his scoresheet and declares to the arbiter his intention of making this move; or
(b) has just appeared, the same player having the move each time.
The position is considered the same if pieces of the same kind and colour occupy the same squares, and if all the possible moves of all the pieces are the same, including the rights to castle [at some future time] or to capture a pawn "en passant".
J'ai du mal à saisir cette règle et je n'ai pas trouvé d'explications claires à ce sujet... :(Citation:
Si la même position arrive 3 fois (pas obligatoirement d'affilée), les joueurs ont le droit (pas une obligation) de demander la nulle. Une position n'est pas la même si les possibilités de roque ou de prise en passant ne sont pas les mêmes dans ces positions. Le trait doit également être le même.
Merci de votre aide.
Pour la règle c), si les 2 ont un roi et un fou et si en plus les fous sont sur la même couleur, il y a partie nulle.
Pour l'autre règle, si on passe 3 fois par la même position dans le jeu et si les possibilités de roquer sont identiques les 3 fois - jeu donc strictement identique -, un des joueurs peut déclarer la partie nulle.
Merci Miles ! Au moins c'est clair. :ccool:
Cela m'oblige donc à prévoir un dialogue pour que le joueur puisse éventuellement demander le nul...
En fait si j'ai bien saisi, pour résumé, il faut que je compare la position des pièces jouées et tous les mouvements possibles de l'échiquier; Si je retrouve 3 fois cette même configuration dans la partie, le pat devient possible.
J'ai la possibilité de savoir qui est en train de gagner la partie (et à quel niveau), quel joueur provoque ces répétitions et quel joueur subit les attaques de l'autre. Je pense me servir de ces informations pour déterminer, dans le cas d'un pat possible, si l'IA va ou non déclarer la partie nulle; Il faut que l'IA se garde de provoquer ce genre de situation si elle veut matter son adversaire, parce que pour le moment, je suppose que l'IA n'en tient pas compte. Elle pourrait donc se faire pièger. Et dans le cas contraire, que l'IA recherche le pat plutôt que de perdre la partie...
:merci: à+
ps: Toutes vos remarques & suggestions sont les bienvenues.
Oui j'ai vu après coup que le dev a été arreté ... mea cupla, je lirais tout le sujet la prochaine fois :pCitation:
Envoyé par Sub0
Salut Sub, et félicitations pour le travail. J'ai vu dans la discussion que tu as trouvé les codes sources C d'un jeu d'échecs (2400ELO) mais a aucun endroit tu n'indiques le lien (Je l'ai peut être raté mais j'ai a peu pres tout lu). Pourrai-tu s'il te plait me le communiquer par mail? Je te remercie d'avance. Bonne continuation.
Salut NiKaBOT*** et bienvenue dans les forums de Developpez.com ;)
Ce message commence à dater, je sais pas si je vais retrouver ce code C surtout que je ne suis pas chez moi en ce moment, il faudra attendre que je rentre à Lyon (peut-être ce week-end).