         
---------------------------------------------------------------------------------
Verification bug
-------------------------------------------------------------------------------
- modifier le makefile qui gnre la page man avec help2man
  help2man nest pas trouv si configure est lanc avec un repertoir
  courantt autre que ec.
- modifier l'adress email pour les po
-chnage le message ce n'est pasvotre tour par : ce n'est pas le tour des blanc
 ou ce n'est pas le tour des noires.

- nouveu bug avec hash: resultat prise leaf pas cohrent avec resltat
  sans hash.
- il faut aussi tester une reproduction de trait faite par l'adversaire
  avant de tester celle faite ou a faire par soit mme.
- dans note2 ke point d'exclamation (taken at leaf)  n'est pas affich 
- supprimer le message nbre de hash
- verification que les fonction sont bien toutes declare.
_ verification utilisation de cop_val_xx_ca est bien utilise.
  pourquoi seulement ca (camp adverse) dans ec_jou?
_ Verification que le rock a bien ete tester pour la comparaison des traits
  detection nul.
__________________________________________________________________________________
Amelioration algorithme choix meilleut mvt:
----------------------------------------------------------------------------------

-- lorsque le temps de calcul sera un paramtre de la prise de decision
   esayer de prendre une decision avec ce qui est sur 
   puis utiliser le temps restant  pour recalculer  les resultats incertains.
   (il faudra probablement  qqchose de plus compliqu) 
   en attendant possibilit de calculer un temps restant arbitraire.

-- avec la note remonter 2 octet comportant la liste sous forme binaire 
   des pieces prises dans chaque camp.ajoutet la pice dans la liste
   en faisant un 'and' binaire :
	define  CAV_GAUCH_BL 010000000
	list_piece_blanche &= CAV_GAUCH_BL
   voir comment dclarer la variable dans GNU chess
  
-- s'il la note en fin de branche devait ne pas tre prise en compte alors
   il faudrait le faire seulement si le mouvement en fin de branche est 
   fait par son propre camp, dans ce cas la note ne correspondrait
   qu'  un nomre paire de mouvements.( reflchire)
-- il ne faut pas remonter type mvt prise s'il il eu un prise au dernier
   niveau sans qu'il est eu une prise  tout les niveaux.
-- il faut prendre en compte le type mbt prise aux dernier niveaux 
   lors de la mmoridation de la meilleur note pendant la remonte.

--- il faudrait voir la possibilite de rajouter la prise en compte de donne 
    supplementaires pendant la remontee de la note. Cad incorprore certaine
    donnee dans la note (en gardant a la note actuelle sont caratere 
    preponderant)
    en fait il y aurait deux note: 
    une note bilan de prise 
    et 
    une note autre (nbre de prise, nbre d'echecs, positions.... )
    voir l'integration avec le system de hash.
-- etant donne que le hash ne permet pas de sauvegarder les donnee globales
   du mouvement initial, on pourrait peut-etre ne collecter que sur 3 ou 
   quatre niveaux avant d'entamer la recherche profonde.
   les donnees perdes progressivement leur pertinance avec la profondeur 
   parcequ'elles sont noyee dans l'ensemble definit par le mvt initial.
   Il n'y a que lorsque les niveaux superieur sont proche de zero 
   que les donnee collecte plu profondement sont prise en compte.
   (plus on descent plus le nombre de mouvement pour le niveau est important,
   et ce nombre est utilise pour ponderer les chiffres)
   une precollecte est deja faite de toute faon.
    
--- il faudrait avoir deux note prises une acquise (sur) et l'autre pour 
    celle correspondant  une prise en bout de branche
    lorsque je remonte si il y a une prise en bout de branche je cumule dans
    le nouveau total et ds qu'il y a un mouvement non prise je cumule
    dans le total existant pour faire le choix du meilleur, je me base
    sur les deux totaux avecen priorit le total acquis.
--- !!!!!!!!    ne pas faire de cut si la profondeur est un nombre impair 
    1--2--3--4--5--6--7--8
          !     !     !        !pas ce dut !!!!!!!
--- !!!!!!!!   si une prise a lieu en bout d'arbre alors ne pas attacker (cad ne pas jouer le coup
    s'il faut tout de suite faire une prise.
--- revoir les tables de positionement
--- s'il n'y a qu'une seule rponse positive  pendant l'analse rapide
    la prendre 
--- en niveau high harcoder les ouverture mme la rponse 
    peut l'tre


- en niveau high1 ne de vrait pas utiliser A7A6 ni B7B6 en ouverture
 
- when evaluating the position and when at end of game should use a dynamic table 
 or simply a function without table to put the piece near the king or i position to 
 rech him easily.
- % de mvt avec note negatves donne une bonne idee de la situation ???
- dans remone du type de mvt pris ou non : la pomotion n'est pas pise en compte
   l faut creer une nouvelle table typ_mvt_gain qui inclus les prise et les
   promotions.
_ voir si possibilite de na pas tester le pofondeur mais plutot un drapeaux prepositione
  de la meme facon que effet de bord.(attention la profondeur a peut etre ete mise en registre!)
  le gain n'est pas sur: se reserver retour en arriere.
_ remonter l'information (flag) indiquant que le mvt le plus profond est une prise 
_ Faire une presimulation de niveau 2  pour detecter mat avant de faire simulation a 
  la profondeur prevue.
_ essayer d'ameliorer evaluation couverture des pieces (prise en compte que, meme si 
  une piece est couverte, elle peut etre reprise a nouveau ) 
_ permetre increment note si echec ou  promotion  en reine ou cavalier (a revoir)
_ Evaluation position des pieces sur l'echiquier (dispertion, penetration adversaire, distance ou 
  accessbilite du roi adverse, baricentre )
_ Prevoir simulation suite a mouvement d'une piece choisi dans mvts tries (remontee d'information ds st_mvt_ini).
_ pouvoir modifier et restaurer la valeur d'un des piece  d'un camp suivant la situation
  rapport de force des camps et le camp qui joue.
_ modification dynamique de la profondeur en fonction du temp restant (le cas d'allocation dynamique de memoire
  il faut prevoir un increment de la profondeur)
_ ???? creer un type de mouvement specifique pour le deplacement normal et prise du pion pour pouvoir 
  modifier la force de la piece lorsqu'elle arrive sur les drenieres lignes.
  il faudrait peut-etre aussi evaluer ces chances d'arriver sur la derniere
  ligne???
  Verfier si necessite de modifier la force des piece soit avant de demarrer 
  ou en cours l'eploration (par example s'il ne reste plus que un cavalier et une
  une reine, ou si un pion a des chances de pouvoir atteindre la dreniere ligne)
- positionement des pieces: dans st_pie ou st_ech ajouter une structure qui permette 
  d'acceder une 'note' suivant la position ou la piece.Cette note serait accumule dans
  l'historique pour chaque nieau.
- pour remonter l'integalitte du chemin utilise pour la  note  (cela pouait aussi etre utilise pour
  aute chose comme la note elle meme ou d'autre donnee utilisee pour choisir la meilleur decision )
  utiliser une liste chainer (on evite comme cela de  recopier les donnees a chaque remontee.

-----------------------------------------------------------------------------
-- ec_menu affichage echiquier : il faut mmoriser la longueur du tableau lib
    pour viter erruer de segmentation

-- reprogrammer completement eva.c le mieux serait du C++
   le problme c'est: comment acceder  une class C++  partir du C?
   pvoir aussi peut tre un accs aux donne collect par le moteur 
    partir d'un autre langage.

-- conditioner par un #ifdef TEST le code inutile en fonctionement normal 
   dans ec_hash.c et le code correspondant dans ec_global.h

-- rajouter une option en entre de pgm pour pouvoir forcer les paramtres
   getttext (repertoire des fichiers de traduction et langue  utiliser)
   utile pour une version  cygwin limit  (juste les DLL).  .

-- il faudrait peut-etre pouvoir instancier le module eva pour pouvoir
   faire jouer le pgm contr lui meme. et prevoir aussi l'accesibilite 
   des donnee collecte a un plugin. 
   La structure du module eva est de toute faon a revoir

--- l'acces direct aux donnee echiquier et piece ne devrait se faire que 
    pour le debugging.
    implication : ou mettre le source et  le code d'appel des
    fonctions d'impression
    module chargeable ?

--- voir possibilit de supprimer la table message en mmoire et 
    la remplacer par une lecture fichier
    utiliser la table dans un pgm  part pour gnrer le fichier.	

-- conditioner par un #ifdef TEST le code inutile en fonctionement normal 
   dans ec_hash.c et le code correspondant dans ec_global.h

-- rajouter une option en entre de pgm pour pouvoir forcer les paramtres
   getttext (repertoire des fichiers de traduction et langue  utiliser)
   utile pour une version  cygwin limit  (juste les DLL).  .

-- il faudrait peut-etre pouvoir instancier le module eva pour pouvoir
   faire jouer le pgm contr lui meme. et prevoir aussi l'accesibilite 
   des donnee collecte a un plugin. 
   La structure du module eva est de toute faon a revoir

--- l'acces direct aux donnee echiquier et piece ne devrait se faire que 
    pour le debugging.
    implication : ou mettre le source et  le code d'appel des
    fonctions d'impression
    module chargeable ?

--- voir possibilit de supprimer la table message en mmoire et 
    la remplacer par une lecture fichier
    utiliser la table dans un pgm  part pour gnrer le fichier.	


_ pourquoi des messges warning pendant rpmbuild mais pas pendant make normal? 
_ rpm le .spec doit avoir le nom de la version

_ reverifier les constantes toute les constante ont-elle etes declare constantes?
  revoir declaration pointeur sur constante 
  variable constante: 				const int i=' ';
  pointeur sur cette constante			int * const pc_i;
  pointeur constant sur  constante          	const int *cpc_i;
 
_ les variables locales  une fct  devraient peut-etre declare static pour eviter 
  une confusion avec une variable globale. (contre ca sera plus dure si pour une 
  question de performances je veux rendre ces variables locales globales 
  !!!!!! justement c'est ce que fait static!!!
  par contre il reste une ambiguite sur ce qui se passe avec les fct appelle
  par la fonction contenant la variable static. 
  
  
_ inclure limits.h  si pas deja fait et utiliser les capacite maxi des type de nombre
  actuellement c'est teste pour la note "en dur".
_ pour eviter des sueurs froides revoir systeme de messages et verifier pas de debordement 
  difficile de prevoir la longueur necessaire au stockage du message 
  
  (ok mais aproximation)

  Le mieux serait de ne formater le message que pour l'affichage sans passer par une chaine 
  intermediare (stocker le message eclate) dans ce cas il faut quand meme pouvoir memoriser
  une variable locale apres la fin d'une fonction (par exemple choix du niv/inc)
  En tout cas mieux vaudrait se debrasser immediatement du message en l'imprimant ou en le logant
  qqpart sans qu'un probleme de debordement apparaisse.

_ il serait peut-etre possible (si le passage de parmetre est couteux) de supprimer 
  les parametre passe a tpf_cas_ctl en creant un deuxieme table et en dupliquant les fct.  
_ finir d'installer des macros pour toutes les valeurs numerique (BLANC ok
  direction echec par, coordonnees) . 
_ rstdsk ne devrait pas ecrire des messages directement sur stdin 
_ transformer en static les fonction et variables qui peuvent l'etre
_ utiliser allocation dynamique de memoire.
  lors du traitement des chaines (parametre).
_ ecrire dans un fichier log les messages d'erreur du a un bug programme 
  ou a une erreure system.
_ Penser a traduire libelle colonne et ligne.
_ Utiliser perror pour message d'erreur (sauvegarde disque, ...)
_ Separateur ligne de tiret  dans menu  -> utiliser getttext
_ Mettre en fonction code duplique (est-il necessaire d'avoir duplique les fonction pour la toure?)
_ pour facilter les recherches les nom de fonction devrait commencer par f_ ou autre
	(verifier que prefix pas deje utilise) faire un tableau des prefix utilises
_ Prevoir des declarations typedef (pour les coordonnees entre autre...)
_ angliciser les sources (nom de variables,fonction et commentaires)
_ angliciser la documentation 
_ ????pion restore n'utilise pas fonction standard????
____________________________________________________________________________________
Amelioration des performances:
----------------------------------------------------------------------------------

-- lorsque il y mat  il n'est pas necessaire de continuer la recherche ce niveau 
   il faut faire comme si dir suivant et derniere piece 
_ certaines variable pouraient etre passe en char. il faudrait utiliser des typedef
_ etudier possibiliter d'utiliser register.
_ voir si possibilite de supression de i_pro_sim_act pour hst_pro
_ voir si possibilite de memorisation de l'echiquier dans une variable simple.
_ voir si possibilite d'elimination des parametre de fonction en utilisant
  des variables globale avec prefix specique a la fonction.  	
_ pour des traitements specifique a un niveau on pourrait appeller une fonction a partir
  d'un pointeur place dans hst_pro (test si perte trop grande si niveau > 4)
  Pouvoir configurer des fonctions a appeller durant l'exploration en fonction du mode de 
  fonctionnement ou de la profondeur atteinte
_ voir si plus rapide en regroupant ec_jou  ec_simu ec_ctl dans le meme objet  (pointeur near?)
_ ???? si analyse de la situation est faite pour les mvts initiaux il serait possible de faire 
  reference au mvt initial pour personaliser le traitement.cela permettrait de ne pas 
  avoir a trier les mouvement initiaux (en evitant de de descendres l'arborecence dans 
  certains cas????

_____________________________________________________________________________________
Amelioration interface utilisateur et nouvelle fonctionalitees:
----------------------------------------------------------------------------------
--- lorsque la partie est sauvegard il manque la force, et le ct
--- si tape sur new et que la partie est finie alors sauveagarder
    essayer de revoir pour que les sauvegardes soit faites. 
--- il serait interessant de pouvoir memoriser dans un fichier les donnees 
    collectee voir format html ou xml
    les donnee pourrait etre collecte automatiquement avec un nom global
    pour la collecte (repertoire)
    module chargeable ?

--- essayer la presentation de l'echiquier  de nextboard3

--- sauvegarder statistique sur disque avant chaque mouvement 
    par une option de  cde pour vrifier comment la decision
    est prise, c'est aussi interessant pour analyser une partie


--  pour la date du fichier prendre le momment de l'initialisation de la partie
--  ajouter un enregistrement d'entete dans lasauvegarde de la partie. Si prsent 
    lecharger sinon gaire tratement normal  
    de plus il faudrait aussi pluto faire un tracage de la partie (inclure les retoures, anules
    et autres 
    en cas de ctl c ou de fermture de fentre demander si sauvegarde ou sauvegarder completement.
--- partie analyse  deplacer les pieces selon l'historiqque de la partie et dclencher l'analyse
    pour obtenire une ou plusieurs notes rediriger la sortie ecran sur fichier.


- faire la sauvegarde mme si le programme est interropue par le system 
  ( kill ou fentre de console ferme)
_ envoyer des donnees (si utilisateur d'accord ) par le reseau pour collecter:
  bugs, nombre de joueurs, nombre de parties jouees,  niveau du joueur, parties,
  coup execptionels pour enrichir une  base de donnee d'ouverture.
  ces donnees pourrait etre soit criptes et envoyee par mail ou
  envoye directement sur un serveur.  

_ sauvegarde des parties 
  un fichier pour  sauvegarde de parties a la demande (format png si possible)
_ prise en compte arret  programme du system par interception signal pour sauvegarder la partie 
  en cours et proposer un reload de la partie lors du redemarrage du programme.
_ pour generation d'un bibliotheque d'ouverture  utiliser sauvegarde de donnees complete,
  par exemple toutes les heures pour pouvoir redemarrer en cas d'arret du systeme  

_ sauvegarde des preferences (niveau par defaut ) utiliser XML

_ pour eviter d'avoir toujours les meme parties 
  soit utilsation de random por choix aleatoire parmis les meilleur coups
  soit sauvegarde d'un historique des coups joues (ne pas rejouer un coup 
  si le joueur a pu gagner la partie dans ce cas)  
  
_ Permettre le chargement d'un partie a partir d'une situation d'echiquer au lieu 
  d'un historique de coup ou des deux (situation plus historique)
  Evaluer la situation apres l'initialisation a cause de la prise en compte des 
  echec par demasquage.
  Attention dans ce cas le traitement d'egalite (3 repetition succecive d'une situation
  d'echiquier n'est plus possible)
 
_ Back n mvt ou jum n mvt

_ afficher les coups precedent

_ Evaluer le temps necessaire pour l'exploration.

_ lancer la simu lorsque le joueur reflechi

_ Analyser les parties joues par le joueur dans le but d'ameliorer son jeux,
  de donner une vue de son niveau/de sa progression ou de moduler le niveau 
  qu'il a indique
  
  type d'erreurs comme defaut de couverture, pas vu mat.
  type de jeux agressif/defensif et adaptation a la situation.
  temps de reflexion 
  
_ Il faudrait 4 modes de fonctionement.

1) L'exploration a des fins d'etudes de l'arborescence. 
  amelioration: eliminer les portion d'arbres si un decalage de plus de 
   deux piece majeures existe entre les camps (chois utilisateur ou decision 
   par le simulateur en cours d'exploration)
   avoir le nombre d'echec, mat,pat par profondeur
   connaitre le nombre de prises pour chaque pieces (seulement pour le meilleur coup)
2) Le jeux pour gagner sans limitation de temps (si camp meme)
   avec des niveaux de difficulte
3) Le jeux  pour gagner en temps limite (ne pas jouer plus longtemps que l'adversaire)
   ordonner la simulation en en prenant les coups  detectes au niveau 2 ou 4 les plus interresant en premier.
4) Le jeux pour perdre mais en mettant le joueur dans des poisitions interessante
   par exemple permettre 

_ comment adapter la difficulte au niveau du joueur?
  lui demander son avis (facil, moyen, diffici) et moduler en fonction de son niveau.
_ Donner la possiblite de choisir le comportement de l'ordinateur (pour les enfants entre autre)
  agressif et temerair, timore et prudent, equilibre..


