IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Free Pascal Discussion :

Création d'un programme d'échecs en Free Pascal


Sujet :

Free Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Avatar de glegat
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2015
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Avril 2015
    Messages : 61
    Par défaut Création d'un programme d'échecs en Free Pascal
    Après une interruption de plusieurs dizaines d'années (je suis à la retraite !) je reprends goût à la programmation (j'ai débuté comme beaucoup de personnes de ma génération sur un Oric), comme je suis en même temps passionné par les échecs j'ai décidé de programmer un logiciel d'échecs.

    Mon projet est dans un premier temps de réaliser un programme simple, sans interface graphique et dont le moteur ne ferait qu'une analyse sur deux demi-coups. Il faudra donc optimisé l'évaluation de la position pour obtenir des réponses cohérentes avec les principes du jeu.

    Je m'inspire des programmes développés par Roland Chastain qui a présenté son travail sur ce site "conception d'un jeu d'échecs en Pascal". Je suis loin d'avoir le niveau requis pour réaliser un fort programme (je débute en Pascal), et mon but est simplement d'apprendre le Pascal en réalisant un logiciel sur un thème qui me passionne.

    Au fur et à mesure des résultats obtenus, le projet évoluera et on pourra envisager de pousser l'analyse beaucoup plus loin en utilisant le principe de l'Alpha-beta bien connu des programmeurs de jeux d'échecs.

    De mon ancienne passion ressuscitée je conserve des livres qui me seront utiles :

    • Echecs et C de Yann Takvorian (Initiation à l'analyse et à la programmation du jeu d'échecs)
    • Techniques de programmation des jeux de David Lévy
    • Chess Skill in man and machine edited by Peter W. Frey
    • Computer in Chess de M. Botvinnik
    • The Chess computer handbook de David Levy
    • Algorithmes for Games de Adelson-Velsky, Ariazarov et donskoy

    On pourrait d'ailleurs commencer la discussion par les sources d'information autour de la programmation du jeu d'échecs. Je suis aussi nouveau sur ce forum et ce projet a été commencé très récemment le 15 avril 2015, donc je ne suis pas encore familiarisé avec l'ouverture d'une discussion et j'apporterai des éléments d'informations au fur et à mesure.

    Merci à tous de vos contributions.

    Gérard

  2. #2
    Membre confirmé
    Avatar de glegat
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2015
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Avril 2015
    Messages : 61
    Par défaut Début programmation
    Je précise que j'ai commencé mon programme et que je viens de terminer le générateur de coups plausibles, je suis en phase de test pour valider définitivement cette procédure. Il a fallut pour cela résoudre le problème de la représentation de l'échiquier dans le programme et j'ai choisis d'utiliser un tableau de 119 cases définit ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     tDoska119             : array[0..119] of integer;
    J'ai mis en pièce jointe l'échiquier avec la numérotation des cases, les coordonnées et les vecteurs de déplacement des pièces.
    Images attachées Images attachées

  3. #3
    Membre Expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 568
    Par défaut
    Salut

    Bon retour à la programmation et bon courage.

    Commencer par un jeu d'échec est un défi, ce n'est pas ce qu'il y a de plus simple.

    Cdlt

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  4. #4
    Membre confirmé
    Avatar de glegat
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2015
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Avril 2015
    Messages : 61
    Par défaut Premier résultat
    Commencer par un jeu d'échec est un défi, ce n'est pas ce qu'il y a de plus simple.

    Oui j'en suis conscient et j'espère arriver au bout.

    Mais les premiers résultats sont encourageants et je m'amuse déjà comme un fou avec ce que mon programme peut déjà faire.

    Voici l'affichage de mes tests actuels. Je saisie au clavier les coups et Kempelen Proto (c'est le nom de mon programme) affiche les coups plausibles en fonction de la position, pour les Blancs et pour les Noirs suivant le trait.

    Dans la pièce jointe c'est l'écran de résultat obtenu après la séquence de coups suivante : 1 - e2e4 e7e5 2 - Cg1f3 Cb8c6 3 - Ff1b5

    Premier constat, ce qui m'a demandé le plus de mal c'est la génération des coups de pion (à mon sens c'est la pièce la plus difficile à programmer) et encore je n'ai pas terminé la règle de la prise en passant.

    Merci de votre intérêt,

    ConsoleTest1.pdf

  5. #5
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    8 052
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 8 052
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Chouette, un passionné !

    Citation Envoyé par glegat Voir le message
    Premier constat, ce qui m'a demandé le plus de mal c'est la génération des coups de pion (à mon sens c'est la pièce la plus difficile à programmer)
    Ah tiens, voilà qui m'étonne. Quelles difficultés offre le pion par rapport aux autres pièces ?
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  6. #6
    Membre confirmé
    Avatar de glegat
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2015
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Avril 2015
    Messages : 61
    Par défaut
    Ah tiens, voilà qui m'étonne. Quelles difficultés offre le pion par rapport aux autres pièces ?
    Le pion est une pièce exceptionnelle dans ses déplacements par rapport aux autres pièces il présente plusieurs particularités :

    1 - Il ne recule jamais
    2 - Il avance d'une seule case sauf lorsqu'il est dans sa case d'origine il peut dans ce cas avancer d'une ou de deux cases d'un coup sauf s'il y a une pièce (noir ou blanche) située entre sa case départ et sa case d'arrivée.
    3 - Son déplacement est modifié lorsqu'il prend une pièce, il avance tout droit mais ne peut prendre que les pièces situées sur les cases diagonales situées à sa gauche et à sa droite
    4 - Lorsqu'il arrive sur la dernière rangée il peut se transformer en Dame, Cavalier, Fou, Tour, c'est la seule pièce qui offre cette particularité
    5 - La prise en passant : Encore une particularité de prise, lorsqu'un pion adverse avance de deux cases en partant de sa case d'origine et passe par l'une des diagonales contrôlées par le pion il peut prendre le pion après le déplacement de celui-ci . La règle est en elle-même pas facile à expliquer.

    Voici pour comparer les règles de déplacement des autres pièces :
    Tour : se déplace d'une ou plusieurs cases de manière horizontale ou verticale. Pas de cas particulier
    Fou : se déplace d'une ou plusieurs cases en diagonale (uniquement sur les cases de sa couleur). Pas de cas particulier
    Roi : se déplace d'une seule case à la fois tout autour de lui, un cas particulier le roque.
    Dame : Identique au déplacement du roi mais d'une ou plusieurs cases à la fois. Pas de cas particulier.
    Cavalier : se déplace en L (deux cases devant une case sur le coté gauche ou droit ou deux cases sur le coté et une case vers l'avant ou vers l'arrière etc. Pas de cas particulier.

    On le voit à l'énoncé de ces règles le pion comporte de nombreuses exceptions à sa règle de base et cela entraine dans la programmation la prise en compte de plusieurs paramètres pour vérifier la validité de toutes ces possibilités. L'autre pièce difficile est le roi à cause du cas particulier du roque.

    Les pions sont l'âme des échecs disait Philidor ( compositeur et joueur d'échecs français 1726-1795).

    Quelqu'un pourrait-il me conseiller un (ou plusieurs) bons livres sur la programmation en Pascal (j'utilise Free Pascal) ? Accessible pour un faux débutant mais le plus complet possible.

    Gérard

  7. #7
    Membre expérimenté

    Homme Profil pro
    Diverses
    Inscrit en
    Février 2014
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Diverses

    Informations forums :
    Inscription : Février 2014
    Messages : 122
    Par défaut
    Citation Envoyé par glegat Voir le message
    Je précise que j'ai commencé mon programme et que je viens de terminer le générateur de coups plausibles, je suis en phase de test pour valider définitivement cette procédure. Il a fallut pour cela résoudre le problème de la représentation de l'échiquier dans le programme et j'ai choisis d'utiliser un tableau de 119 cases définit ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     tDoska119             : array[0..119] of integer;
    J'ai mis en pièce jointe l'échiquier avec la numérotation des cases, les coordonnées et les vecteurs de déplacement des pièces.
    Je n'y connais pas grand chose aux échecs et encore moins à la programmation d'un jeu d'échec. Ma question est donc peut être idiote mais, pourquoi utiliser un tableau à une dimension pour représenter un échiquier à deux dimensions ?

  8. #8
    Membre confirmé
    Avatar de glegat
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2015
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Avril 2015
    Messages : 61
    Par défaut
    Je n'y connais pas grand chose aux échecs et encore moins à la programmation d'un jeu d'échec. Ma question est donc peut être idiote mais, pourquoi utiliser un tableau à une dimension pour représenter un échiquier à deux dimensions ?
    En fait je ne maîtrise pas encore bien le Pascal et pour l'instant j'utilise des tableaux simples standards,mais il se trouve que le tableau tdoska119 convient à l'usage que j'en fait et ne pose pas de problème de manipulation pour en retirer l'information souhaitée. De plus j'ai repris l'idée sur d'autres programmes qui utilisent ce même type de tableau.

    Si l'échiquier est en deux dimensions chaque case est en fait identifiée par ses coordonnées, la première case s'appelle la case a1 (a coordonnée horizontale et 1 coordonnées verticales) elle correspond à un numéro de case qui est l'indice de la variable, la variable indique quelle pièce est sur la case au cours de la partie (un fou, un pion ou rien dutout etc..) ou tout autre information si on utilise ce même type de tableau pour savoir si une case est contrôlée par l'adversaire etc..., il n'y a pas besoin d'autre forme de représentation.

    Avez-vous consulté la pièce jointe représentant le tableau ? Peut-être que cela vous éclairera.

  9. #9
    Membre expérimenté

    Homme Profil pro
    Diverses
    Inscrit en
    Février 2014
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Diverses

    Informations forums :
    Inscription : Février 2014
    Messages : 122
    Par défaut
    Je comprends le principe de la représentation d'un échiquier par un tableau de 120 entiers mais je ne vois pas l'avantage que ça peut avoir sur un tableau à 2 dimensions.

    On peut faire des choses amusantes en pascal. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      // 3 façons de représenter un échiquier
      TEchiquier1 = array['a'..'h', 1..8] of integer; 
      TEchiquier2 = array[1..8, 1..8] of integer;
      TEchiquier3 = array[0..9, -1..10] of integer;  // pour avoir des cases extérieures à l'échiquier
    Et on peut faire encore bien mieux en utilisant un type énuméré à la place des entiers.

    Si vous voulez un bouquin d'initiation au pascal en français et pas cher : Programmer en Turbo Pascal 7.0 de Claude Delannoy. C'est un vieux livre qu'on trouve d'occasion pour moins de 10€ sur amazon ou price minister mais vous y apprendrez à utiliser les tableaux, les types enumérés et les types structurés. Ce sont vraiment des choses à connaître pour écrire des programmes plus simples et plus lisibles. Si vous lisez l'anglais ceci aussi pourrait vous servir : http://code-sd.com/books/startprog/.

  10. #10
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 172
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par yamer Voir le message
    Je comprends le principe de la représentation d'un échiquier par un tableau de 120 entiers mais je ne vois pas l'avantage que ça peut avoir sur un tableau à 2 dimensions.
    L'un des avantages qu'on peut y voir, c'est une certaine concision dans l'écriture. Exemple d'une façon de trouver toutes les cases que peut atteindre le cavalier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      case damier[a] * trait of
        cCavalier:
          for i := 1 to 8 do
          begin
            b := a + mCavalier[i]; // Une simple addition suffit à obtenir la case d'arrivée
    Mais peut-être pourrait-on obtenir la même chose avec un tableau à deux dimensions, en définissant un type coordonnée et en surchargeant l'opérateur + ?

    Citation Envoyé par yamer Voir le message
    On peut faire des choses amusantes en pascal. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      // 3 façons de représenter un échiquier
      TEchiquier1 = array['a'..'h', 1..8] of integer; 
      TEchiquier2 = array[1..8, 1..8] of integer;
      TEchiquier3 = array[0..9, -1..10] of integer;  // pour avoir des cases extérieures à l'échiquier
    Et on peut faire encore bien mieux en utilisant un type énuméré à la place des entiers.
    J'aime bien la première possibilité. J'avais essayé une fois de commencer un programme sur cette base mais je m'étais vite retrouvé bloqué au moment de faire certaines opérations (par exemple l'équivalent du code que j'ai donné plus haut).

  11. #11
    Membre confirmé
    Avatar de glegat
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2015
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Avril 2015
    Messages : 61
    Par défaut
    Si vous voulez un bouquin d'initiation au pascal en français et pas cher : Programmer en Turbo Pascal 7.0 de Claude Delannoy. C'est un vieux livre qu'on trouve d'occasion pour moins de 10€ sur amazon ou price minister mais vous y apprendrez à utiliser les tableaux, les types enumérés et les types structurés. Ce sont vraiment des choses à connaître pour écrire des programmes plus simples et plus lisibles. Si vous lisez l'anglais ceci aussi pourrait vous servir : http://code-sd.com/books/startprog/.

    Pour la question sur le tableau Roland Chastaing a mieux répondu que je ne saurai le faire.

    Merci pour les références des bouquins et notamment celui téléchargeable gratuitement qui est sans doute exactement ce que je cherchais et même si je ne maitrise pas bien l'anglais il me rendra service.

  12. #12
    Membre très actif
    Avatar de joreveur
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2010
    Messages : 293
    Par défaut
    Citation Envoyé par glegat Voir le message
    Je précise que j'ai commencé mon programme et que je viens de terminer le générateur de coups plausibles, je suis en phase de test pour valider définitivement cette procédure. Il a fallut pour cela résoudre le problème de la représentation de l'échiquier dans le programme et j'ai choisis d'utiliser un tableau de 119 cases définit ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     tDoska119             : array[0..119] of integer;
    J'ai mis en pièce jointe l'échiquier avec la numérotation des cases, les coordonnées et les vecteurs de déplacement des pièces.
    Bonjour,

    Comme projet, c'est un projet ambitieux, mais c'est tout à ton honneur.
    je m'abonne à ce sujet car j'avais réfléchi, il y longtemps, à réaliser, un petit moteur de jeu. Mais je n'avais pas assez de connaissances (pas beaucoup plus maintenant d'ailleurs) pour y parvenir.
    En tous cas je testerai tes réalisations et ça me permettra de rejouer un peu aux échecs en passant (comme le pion )

    Nb ton tableau ne fait pas 119 mais 120 cases

    Bien à toi.

Discussions similaires

  1. Réponses: 0
    Dernier message: 12/06/2015, 16h25
  2. Réponses: 10
    Dernier message: 31/01/2006, 11h36
  3. Réponses: 2
    Dernier message: 30/01/2006, 22h19
  4. Optimisation d'un programme d'échecs
    Par Erickann dans le forum x86 32-bits / 64-bits
    Réponses: 8
    Dernier message: 23/11/2005, 20h23
  5. Création installer pour programme
    Par yanndublanche dans le forum Windows
    Réponses: 7
    Dernier message: 11/10/2005, 00h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo