bonjour à tous
je me représente d'abord (car j'étais inscrit déja ici pseudo logfile mais mais mon ordi a crashé puis j'ai changé de connexion internet)
J'ai 45 ans , je programme en C en autodidacte depuis quelques temps déjà
Mon projet principal est un jeu déchec que j'ai porté sur winboard depuis peu
Mais j'ai un soucis pour effectuer un tri au niveau des coups légaux .
Explicatin
pour enregistrer les coups à chaque niveau de l'arbre j'ai une structure du type :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 typedef struct le_COUP { int dep; /*n°case depart du coup*/ int arr; /*n° case d'arrivee du coup*/ int piece_jouee; /*piece jouee (roi , pion , etc ....*/ int type; /*type de coup (normal ,prise , roque etc...)*/ int ext_type; /*si le coup attaque le roi , ---> = ATTAQUE_ROI*/ int ep; /*case de prise en passant (VIDE ou n°case)*/ int val; /*valeur du coup*/ } COUP;
a chaque niveau , je déclare une table locale liste_coups[200]
l'accès à chaque coup est :
liste_coups[i].dep ,etc ....
Je voudrais trier ces listes de coups pour analyser le "meilleur coup" d'abord et ainsi par ordre
décroissant
Si j'apelle ma procédure de tri en envoyant le nombre de coups légaux et l'adresse
du 1er élèment de ma liste : tri(ctr_coups,&liste_coups[0]);
le tri s'effectue bien dans la procédure mais au retour , les coups sont toujours dans
le même ordre ! Comme je ne maitrise pas bien les pointeurs , je suis
un peu perdu ...
Si quelqu'un avait des idées ou suggestions
Car ce problème me bloque depuis un bon moment
edit :
j'ajoute mon code de tri (qui ne fonctionne pas en l'état : erreur de compilation : D:\ECHECS\JARS\divers.c In function `tri':
124 D:\ECHECS\JARS\divers.c invalid lvalue in assignment )
merci d'avance et à bientot
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 void tri(int x,COUP *p) { int i,j; int n; int m; COUP *tmp; COUP *tmp1; n = x; m = n; tmp = NULL; while(m != 0) { m = m/2; for(j=0;j<=(n-2);j++) { i = j; onze: if(p->val < (p+1)->val) { tmp = (p+1); (p+1) = p; p = tmp; i = i-1; if(i >= 1) goto onze; } } } }
Partager