Moi aussi j'ai tiqué... et en fait je ne comprends pas ce que veux faire Bruno... c'est pour ça que je ne suis pas intervenu.
le parcour des cases libres du damiers ne se fait pas dans l'ordre (a1, a2, a3 .... h8), mais selon l'importance strategique des cases ( a1 a8 , h1 , h8 .......g7) quand une case est joué elle n'est plus libre (la palice) et donc est retirée des cases libres.
au cour d'une recherche alpha-beta le cases sont retirées et reinserées au grès du parcour de l'arbre de recherche (cela doit etre rapide).
ce tableau (qui est trompeur), squareList emptiesList[62]; // 60 cases libres chainées + 2 sentinels ,ne sert qu'a alouer en memoire la liste.
celui ci, squareList* positionToEmpties[64]; // les 64 cases du damier, 4 cases a referencer les elements de la liste en fonction de leur positions (valeur position)
ex positionToEmpties[g4] retourne un pointeur sur l'element de la liste chainées qui a pour valeur (position) g4 et ceci qu'il soit encore inseré ou retiré de la liste, les pointeur previous et next conserve les references de deux elements auquels il etait (est) lié avant d'etre retiré de la liste.
voila en esperant etre clair. non affectées
Mickaël Wolff <mickael.wolff@laposte.net> wrote:
Moi aussi j'ai tiqué... et en fait je ne comprends pas ce que veux
faire Bruno... c'est pour ça que je ne suis pas intervenu.
le parcour des cases libres du damiers ne se fait pas dans l'ordre (a1,
a2, a3 .... h8), mais selon l'importance strategique des cases ( a1 a8 ,
h1 , h8 .......g7) quand une case est joué elle n'est plus libre (la
palice) et donc est retirée des cases libres.
au cour d'une recherche alpha-beta le cases sont retirées et reinserées
au grès du parcour de l'arbre de recherche (cela doit etre rapide).
ce tableau (qui est trompeur),
squareList emptiesList[62]; // 60 cases libres chainées + 2 sentinels
,ne sert qu'a alouer en memoire la liste.
celui ci,
squareList* positionToEmpties[64]; // les 64 cases du damier, 4 cases
a referencer les elements de la liste en fonction de leur positions
(valeur position)
ex positionToEmpties[g4] retourne un pointeur sur l'element de la liste
chainées qui a pour valeur (position) g4 et ceci qu'il soit encore
inseré ou retiré de la liste, les pointeur previous et next conserve les
references de deux elements auquels il etait (est) lié avant d'etre
retiré de la liste.
Moi aussi j'ai tiqué... et en fait je ne comprends pas ce que veux faire Bruno... c'est pour ça que je ne suis pas intervenu.
le parcour des cases libres du damiers ne se fait pas dans l'ordre (a1, a2, a3 .... h8), mais selon l'importance strategique des cases ( a1 a8 , h1 , h8 .......g7) quand une case est joué elle n'est plus libre (la palice) et donc est retirée des cases libres.
au cour d'une recherche alpha-beta le cases sont retirées et reinserées au grès du parcour de l'arbre de recherche (cela doit etre rapide).
ce tableau (qui est trompeur), squareList emptiesList[62]; // 60 cases libres chainées + 2 sentinels ,ne sert qu'a alouer en memoire la liste.
celui ci, squareList* positionToEmpties[64]; // les 64 cases du damier, 4 cases a referencer les elements de la liste en fonction de leur positions (valeur position)
ex positionToEmpties[g4] retourne un pointeur sur l'element de la liste chainées qui a pour valeur (position) g4 et ceci qu'il soit encore inseré ou retiré de la liste, les pointeur previous et next conserve les references de deux elements auquels il etait (est) lié avant d'etre retiré de la liste.
voila en esperant etre clair. non affectées
Pierre Maurette
Bruno Causse, le 21/10/2008 a écrit :
bonjour,
struct squareList { int position; // de 0 a 63 struct squareList* previous; struct squareList* next; } squareList;
.../...
squareList emptiesList[62]; // 60 cases libres chainées + 2 sentinels squareList* positionToEmpties[64]; // les 64 cases du damier, 4 cases non affectées
.../...
au depart squareList est une liste doublement chainée des case libres du damier, echiquier, othellier....
en fonction des coups des elements sont retirés de la liste.
lors d'une recherche "alphabeta" des elements sont retirés puis reinserés (demier retiré / premier reinseré)
voila ,
j'aimerai pouvoir cloner la liste a un instant T.
je ne code rien de tres propre :-(
Il me semble que vous pourriez remplacer previous et next par des offsets dans emptiesList ou positionToEmpties, ou des indices. Et ensuite cloner par malloc() et memcpy().
-- Pierre Maurette
Bruno Causse, le 21/10/2008 a écrit :
bonjour,
struct squareList {
int position; // de 0 a 63
struct squareList* previous;
struct squareList* next;
} squareList;
.../...
squareList emptiesList[62]; // 60 cases libres chainées + 2 sentinels
squareList* positionToEmpties[64]; // les 64 cases du damier, 4 cases
non affectées
.../...
au depart squareList est une liste doublement chainée des case libres du
damier, echiquier, othellier....
en fonction des coups des elements sont retirés de la liste.
lors d'une recherche "alphabeta" des elements sont retirés puis
reinserés (demier retiré / premier reinseré)
voila ,
j'aimerai pouvoir cloner la liste a un instant T.
je ne code rien de tres propre :-(
Il me semble que vous pourriez remplacer previous et next par des
offsets dans emptiesList ou positionToEmpties, ou des indices. Et
ensuite cloner par malloc() et memcpy().
struct squareList { int position; // de 0 a 63 struct squareList* previous; struct squareList* next; } squareList;
.../...
squareList emptiesList[62]; // 60 cases libres chainées + 2 sentinels squareList* positionToEmpties[64]; // les 64 cases du damier, 4 cases non affectées
.../...
au depart squareList est une liste doublement chainée des case libres du damier, echiquier, othellier....
en fonction des coups des elements sont retirés de la liste.
lors d'une recherche "alphabeta" des elements sont retirés puis reinserés (demier retiré / premier reinseré)
voila ,
j'aimerai pouvoir cloner la liste a un instant T.
je ne code rien de tres propre :-(
Il me semble que vous pourriez remplacer previous et next par des offsets dans emptiesList ou positionToEmpties, ou des indices. Et ensuite cloner par malloc() et memcpy().
-- Pierre Maurette
pasdespam
Pierre Maurette wrote:
l me semble que vous pourriez remplacer previous et next par des offsets dans emptiesList ou positionToEmpties, ou des indices. Et ensuite cloner par malloc() et memcpy().
eh, pas bete du tout :-)
je vais voir cela
Pierre Maurette <maurettepierre@wanadoo.fr> wrote:
l me semble que vous pourriez remplacer previous et next par des
offsets dans emptiesList ou positionToEmpties, ou des indices. Et
ensuite cloner par malloc() et memcpy().
l me semble que vous pourriez remplacer previous et next par des offsets dans emptiesList ou positionToEmpties, ou des indices. Et ensuite cloner par malloc() et memcpy().