Bonjour!!
J'ai un problème très bizarre. Voilà je vous explique. J'ai un tableau rempli de 0 qui correspond à une carte. Sur cette carte se trouve des 1 par ci par-là autour desquels je dessine un disque vert. Les pixels peints en vert deviennent égaux à 2. J'ai donc des disques verts de centre 1 et dont les points appartenant aux disques sont 2. Les autres sont égaux à 0. Je veux dessiner autour d'un de ces disques, une dizaine de petits cercles rouges mais il faut que ces petits cercles apparaissent sur des pixels choisis au hasard.
Pour ce faire: J'ai les coordonnées du centre d'un des disques. J'analyse les pixels autour de ce point: s'ils sont égaux à 1 ou 2 je ne fais rien; s'ils sont égaux à 0, je stocke les coordonnées des pixels dans un tableau. J'ai donc un tableau de coordonnées correspondant aux places possibles où peuvent apparaître mes petits cercles rouges.
A l'aide d'une boucle, j'effectue un random (10 fois) sur ces coordonnées et je trace un cercle sur 10 d'entre elles.
A l'exécution, un seul des cercles apparaît. J'ai vu et revu ma boucle je ne vois pas ce qui cloche.
J'ai mis un ShowMessage pour contrôler la valeur de ma variable itérative (ici s). Et là miracle: s prend bien les valeurs de 1 à 10 et surtout à chaque appui de ma part sur 'ok' du ShowMessage un petit cercle apparaît et j'obtiens bien mes 10 cercles!!! (alors que je n'ai rien changé au code hormis le ShowMessage).
Pourriez-vous s'il vous plaît m'expliquer pourquoi les cercles ne s'affichent pas d'eux-mêmes???
Merci d'avance
P.S: Voici le code correspondant.
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
36
37
38
39
40 Procedure CCelluleInfectee.expulsion(ListBox1: TListBox; Charge:CChargeVirale; MaBiblio:CBibliotheque;map: TPaintbox; carte: CCarte; a,b:integer); var tableau: array [1..9036, 1..3] of integer; i,j,k,u,s,t:integer; V:CVirus; Begin k:=ListBox1.ItemIndex; map.canvas.Brush.Color:=ClWhite; map.Canvas.pen.Color:=Clred; u:=0; For i:=a-50 to a+50 do begin For j:=b-50 to b+50 do begin If carte.Structure[i,j]=0 then begin u:=u+1; tableau[u,1]:= u; tableau[u,2]:= i; // Inventaire des places possibles dans un tableau tableau[u,3]:= j; end; end; end; s:=0; For i:=1 to 10 do begin ShowMessage('s= ' + InttoStr(s)); // le showMessage dont je parle Randomize; t:= random(u)+1; // Choix au hasard de dix couples de coordonnées V:= CVirus.Create((MaBiblio.Objects[k] as CVirus).GetNom, (MaBiblio.Objects[k] as CVirus).GetCheminImg, (MaBiblio.Objects[k] as CVirus).GetVirulence, (MaBiblio.Objects[k] as CVirus).GetTpsGeneration, // Création d'un virus sur chacune de ces coordonnées (MaBiblio.Objects[k] as CVirus).GetResistance1); (MaBiblio.Objects[k] as CVirus).Setx(Tableau[t,2]); (MaBiblio.Objects[k] as CVirus).Sety(Tableau[t,3]); Charge.AddObject(V.GetNom,V); // Ajout des virus à une liste map.Canvas.Ellipse(round(Tableau[t,2]-2),round(Tableau[t,3]-2),round(Tableau[t,2]+2),round(Tableau[t,3]+2)); end; end;![]()
Partager