|
Publicité ' | ||||||||||||||||||||||||
|
|
#41 | ||||
|
Membre Expert
![]() ![]() Roland ChastainInscription : décembre 2011 Messages : 693 ![]() |
Merci pour ces explications. Cette fois (mis à part certaines connaissances qui me manquent) je crois que j'ai compris.
Autrement après une journée de recherches j'ai fini par trouver mon erreur : car c'était bien une vilaine erreur de ma part, à savoir une fonction qui s'appelait elle-même. Code :
Voici la version corrigée, avec une variable en plus : Code :
__________________
L'Art est long et le Temps est court. |
||||
|
|
00
|
|
|
#42 | ||
|
Membre Expert
![]() ![]() Roland ChastainInscription : décembre 2011 Messages : 693 ![]() |
Bonjour !
J'ai réécrit la partie du programme qui calcule les coups possibles. J'ai essayé de tirer profit des conseils donnés par Alcatîz et par Paul TOTH concernant les paramètres. Voici l'en-tête de la fonction : Code :
__________________
L'Art est long et le Temps est court. |
||
|
|
00
|
|
|
#43 | ||||
|
Expert Confirmé Sénior
![]() ![]() Paul TOTHFreelance Inscription : novembre 2002 Messages : 4 432 ![]() |
voici deux petites remarques rapides
1) pour compiler le projet sous Delphi il suffit de faire ceci Code :
Code :
__________________
Developpez.com: Mes articles, forum FlashPascal Entreprise: Execute SARL Produits : UPnP, RemoteOffice, FlashPascal Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5% |
||||
|
10
|
|
|
#44 | |
|
Membre Expert
![]() ![]() Roland ChastainInscription : décembre 2011 Messages : 693 ![]() |
Je peux donc compiler mon code Turbo Pascal sous Delphi ? Bon à savoir !
Mais je n'ai pas encore vraiment pris en main Delphi, mis à part me servir de l'éditeur pour taper mon code. J'ai téléchargé l'unité Delphi Crt, mais je n'ai réussi à compiler aucune des deux unités contenues dans le dossier. Dans les deux cas j'obtiens un message d'erreur : Citation:
J'ai bien compris l'idée de ne restaurer que les valeurs qui ont changé. C'est même comme ça que je faisais dans mes premiers programmes, mais j'y ai renoncé. S'il n'y avait que des mouvements ordinaires, cette solution irait très bien, mais le coup simulé peut être aussi : un pion se changeant en dame, un roque, une prise en passant. Il faut donc détecter ces coups spéciaux, et enregistrer les valeurs qui ont changé mais qui ne sont pas les mêmes dans chaque cas. C'est très faisable, mais c'est un peu casse-tête et ça complique le code. Ce sera peut-être plus rapide à l'exécution, mais je me pose la question, vu les tests qu'il faut ajouter.
__________________
L'Art est long et le Temps est court. |
|
|
|
00
|
|
|
#45 | ||||
|
Expert Confirmé Sénior
![]() ![]() Paul TOTHFreelance Inscription : novembre 2002 Messages : 4 432 ![]() |
Citation:
mais en effet j'ai utilisé Delphi 6 et non XE2 avec ces chaînes Unicode. Citation:
mais il y a une autre astuce possible: Code :
__________________
Developpez.com: Mes articles, forum FlashPascal Entreprise: Execute SARL Produits : UPnP, RemoteOffice, FlashPascal Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5% |
||||
|
10
|
|
|
#46 | |
|
Membre Expert
![]() ![]() Roland ChastainInscription : décembre 2011 Messages : 693 ![]() |
Je viens de faire l'essai : impeccable. Je vais pouvoir commencer à travailler sous Delphi.
![]() C'est vrai, merci pour la précision. Citation:
__________________
L'Art est long et le Temps est court. |
|
|
|
00
|
|
|
#47 | ||
|
Membre Expert
![]() ![]() Roland ChastainInscription : décembre 2011 Messages : 693 ![]() |
Bonjour !
Voici l'état actuel de mon projet. C'est un programme qui calcule toutes les variantes possibles sur un ensemble de quatre "demi-coups", soit deux "plis". Les variantes défilent à l'écran et sont enregistrées dans un fichier texte. Pour la profondeur en question, cela donne un peu plus de 196 000 combinaisons. Sur ma machine, le programme prend une trentaine secondes pour s'exécuter. N.B. Pour que le programme fonctionne, il faut modifier cette ligne qui se trouve tout au début : Code :
__________________
L'Art est long et le Temps est court. |
||
|
|
00
|
|
|
#48 | |
|
Membre Expert
![]() ![]() Roland ChastainInscription : décembre 2011 Messages : 693 ![]() |
Citation:
En choisissant la configuration Release (au lieu de Debug) dans le gestionnaire de projet, la taille de l'exécutable passe à 134 ko. EDIT Et si on se passe de l'unité SysUtils, on obtient un exécutable de 28 ko.
__________________
L'Art est long et le Temps est court. |
|
|
|
00
|
|
|
#49 |
|
Membre Expert
![]() ![]() Roland ChastainInscription : décembre 2011 Messages : 693 ![]() |
Bonjour !
Je m'étais promis de finir un programme pour TP7. C'est chose faite. Le code que je propose est une réécriture d'un programme que j'ai trouvé sur cette page parmi d'autres sources de jeux d'échecs en Pascal. Maintenant je suis décidé à changer de compilateur, et j'ai choisi Free-Pascal pour continuer ce projet. Peut-être que j'ouvrirai une nouvelle discussion, si besoin est.
__________________
L'Art est long et le Temps est court. |
|
|
00
|
|
|
#50 | |
|
Membre émérite
![]() anthony Enseignant Inscription : avril 2005 Messages : 1 033 ![]() |
Très intéressant le lien... merci
__________________
Citation:
|
|
|
|
00
|
|
|
#51 |
![]() ![]() Inscription : avril 2002 Messages : 2 275 ![]() |
Pourquoi ne pas avoir continué ton propre code ? Ca avait l'air prometteur !
__________________
M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal |
|
|
00
|
|
|
#52 | |
|
Membre Expert
![]() ![]() Roland ChastainInscription : décembre 2011 Messages : 693 ![]() |
Citation:
et des pièces : Code :
cavalier: array[1..8] of shortint = (12, 21, 19, 8, -12, -21, -19, -8); Code :
tablier: array[0..7, 0..7] of shortint Code :
if (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1) = 5 then
__________________
L'Art est long et le Temps est court. |
|
|
|
00
|
|
|
#53 | ||
|
Membre Expert
![]() ![]() Roland ChastainInscription : décembre 2011 Messages : 693 ![]() |
Donc j'ai repris mon programme depuis le début pour y apporter d'importantes modifications et, à cette occasion, je passe au compilateur Free-Pascal.
La première modification importante est le type utilisé pour représenter le tablier, à savoir un vecteur de 120 éléments. J'ai constaté que ce type était souvent utilisé dans les programmes d'échecs. Effectivement il est commode. J'essaie de mieux organiser mon code, notamment en mettant à part tout ce qui concerne l'affichage, de façon à ce que le programme puisse être utilisé depuis une autre interface sans qu'on ait besoin de le modifier. Code :
__________________
L'Art est long et le Temps est court. |
||
|
|
00
|
|
|
#54 |
![]() ![]() Inscription : avril 2002 Messages : 2 275 ![]() |
Petite remarque. L'utilisation de types "commodes" peut s'avérer être une solution pour la réalisation d'un programme, mais je pense que leur utilisation n'est pas toujours adéquate, en terme de lisibilité et de compréhension du code.
Relire des programmes qu'on a écrit des années après, en ayant utilisé ces commodités, peut être plus difficile avec des types "commodes" mais ne représentant pas la réalité. Chacun sa façon de penser, mais personnellement je suis pour utiliser des types qui représentent la réalité au plus près. Un damier est fait de 8 cases sur 8, alors pourquoi utiliser un vecteur qui va de -10 à 109. Ca n'engage que moi, mais ca me parait aberrant. De plus, même si l'écriture est compliquée, le compilateur saura de toutes façons faire les bonnes optimisations lors de la compilation du code.
__________________
M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal |
|
|
10
|
|
|
#55 |
|
Expert Confirmé
![]() ![]() Inscription : août 2006 Messages : 3 416 ![]() |
Loe,
+1 sur l'utilisation des types "commodes". Ça se termine habituellement par un code incompréhensible, y compris pour l'auteur s'il doit y revenir plus tard (le "plus tard" correspondant à un délai variable, selon l'auteur et la taille du code)
__________________
Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir. |
|
|
10
|
|
|
#56 | |||||||
|
Membre Expert
![]() ![]() Roland ChastainInscription : décembre 2011 Messages : 693 ![]() |
Citation:
Je suis plutôt d'accord avec ce que tu dis. Seulement j'ai observé une grande différence de vitesse entre mes précédents programmes et celui que j'ai adapté, et il m'a semblé que cette différence vient principalement du type utilisé pour la représentation de l'échiquier. Entrons dans le détail. Par convention, les cases de l'échiquier correspondent aux numéros d'index 11 à 18, 21 à 28, 31 à 38 etc. Code :
Code :
Et puis il y a aussi la façon de générer les coups. Dans mes précédents programmes, j'examinais toutes les combinaisons de cases possibles pour ne retenir que les combinaisons vérifiant telle ou telle équation. Au lieu de cela, le programme dont je m'inspire utilise pour chaque pièce un ensemble de nombre relatifs représentant les mouvements possibles. Le plus grand de ces nombres, en valeur absolue, est 21 (qui est un mouvement du cavalier). C'est pourquoi l'index va de 11-21=-10 à 88+21=109. Du coup, au lieu de passer au crible toutes les combinaisons possibles, je vais directement aux bonnes cases. Si le coup tombe en dehors de l'échiquier, la variable prend simplement la valeur horsJeu. C'est vrai que je pourrais utiliser ce système avec des coordonnées. C'est à étudier. Le problème que tu soulèves (la représentation de la réalité) est très intéressant. Moi aussi je préfère la représentation la plus fidèle, mais je me suis aperçu qu'elle ne va pas toujours avec l'efficacité. Un exemple encore à ce sujet. Aux échecs, comme chacun sait, on ne prend jamais le roi. Au début j'étais horrifié quand je voyais dans une routine tant de points attribués à la prise du roi. Code :
__________________
L'Art est long et le Temps est court. |
|||||||
|
|
00
|
|
|
#57 | |
|
Expert Confirmé
![]() ![]() Inscription : août 2006 Messages : 3 416 ![]() |
Zei,
Citation:
Mat signifie que le roi est en prise et qu'il n'y a aucun moyen de l'en sortir, ce qui n'est pas tout à fait la même chose.
__________________
Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir. |
|
|
|
00
|
|
|
#58 | |
|
Membre Expert
![]() ![]() Roland ChastainInscription : décembre 2011 Messages : 693 ![]() |
Citation:
Cependant il est avantageux, pour la prévision et l'évaluation, de ne pas faire cette distinction et de considérer le roi comme une pièce ordinaire, qui a simplement plus de valeur que les autres. Cela simplifie beaucoup les choses, sans rien changer au résultat, si ce n'est que la prévision peut s'étendre plus loin puisqu'elle emploie moins d'opérations.
__________________
L'Art est long et le Temps est court. |
|
|
|
00
|
|
|
#59 |
|
Expert Confirmé
![]() ![]() Inscription : août 2006 Messages : 3 416 ![]() |
Joe,
J'avais bien compris le but, c'était juste pour rectifier l'expression.
__________________
Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir. |
|
|
00
|
|
|
#60 | |||
|
Membre Expert
![]() ![]() Roland ChastainInscription : décembre 2011 Messages : 693 ![]() |
Citation:
Voici la suite : une fonction qui détecte l'échec. D'après le test inclus dans le programme, elle paraît fonctionner correctement. Code :
__________________
L'Art est long et le Temps est court. |
|||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com