Bonjour,

Voila le problème peut sembler être simple à résoudre, mais il n'en est rien. Je suis censé faire un Black Jack comme projet de fin d’année (malgré le confinement) et donc viens le moment fatidique où je m'attaque à L'IA du croupier. Comme vous le savez (ou pas) au BJ le croupier est censé tiré jusqu’à que la somme des valeurs des cartes de sa main soit égale ou supérieure à 16.

Vous l'aurez deviné, c'est là ou est le problème, le croupier ne sait pas faire de somme. Terrible me diriez vous ! Puisque en soit, c'est moi qu'il lui donne des instructions. En effet mais je ne comprend pas où est le problème

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
 
  While (SommeC<16) Do  //Le croupier dois tirer jusqu'a qu'il ait 16 minimum
    BEGIN
      A:=Nombre2CarteC;  //J'enregistre son nombre de carte pour qu'une fois qu'il tire une carte (il y a une condition pour tirer une carte : voir si elle a pas été tiré auparavant)
      While (A=Nombre2CarteC) DO
        BEGIN
          X:=Random(52)+1;          //Tirage aléatoire dans le paquet
          VerificationC(X);               //Fonction qui permet de vérifier si la carte n'a pas déjà été tiré + L'affiche sur le canvas
        end;                                  //Ne fonctionne visiblement pas pck ce con tire 7 fois a la suite
      SommeC:=0;                       //Je remet la valeur de la somme de ses cartes a 0 pour refaire le compte
      For I:=1 to 7 DO                  //Il recalcule la somme
          BEGIN
            SommeC:=MainC[I]+SommeC;  //Le formule est bonne je suppose vu qu'elle à toujours fonctionné
            Memo1.lines.append(inttostr(SommeC));  //Je lui demande d'écrire à chaque carte, le calcul de la somme de ses mains pour voir comment il compte
          end;
    end;
Et là, c'est le drame ! Vous avez vu la dernière ligne de la boucle je lui demande d'afficher ce qu'il compte, et c'est bien la le problème ! Effectivement, le croupier affiche toujours 7 en premier, peut importe la valeur de sa première carte, et ensuite 45 et donc il devrait en toute logique sortir de cette boucle, mais il n'en est rien puisque le memo affiche de nouveau 7 puis 45 puis 7...

Une boucle infini que je ne comprend pas. Ensuite je suis partit voir si il y avait des problème dans la fonction qui est appelé VerificationC(), mais bon elle fonctionne bien pour l'autre IA qui joue en tant que joueur et elles sont sensiblement identique mais je vous les mets là on sait jamais :

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
 
procedure TForm3.VerificationC(A2 : integer);           //Verification de si il peut tirer la carte + appeler la fonction qui dessine + notes de ce que l'IA tire
BEGIN
    if (TableauVerification[A2]=false) then
     BEGIN
       distribCroupier(Nombre2CarteC,A2);               //L'IA considère l'AS comme un 1 pour que le comptage soit plus facile
       MainC[Nombre2CarteC]:=TableauValeur[A2];
       Nombre2CarteC:=Nombre2CarteC+1;
       TableauVerification[A2]:=true;
       Memo1.Lines.append('Le croupier a tiré un ' + inttostr(TableauValeur[A2]));
       Memo1.Lines.append('');
     end;
end;
 
procedure TForm3.VerificationI(A3 : integer);           //Verification de si il peut tirer la carte + appeler la fonction qui dessine + notes de ce que le croupier tire
BEGIN
    if (TableauVerification[A3]=false) then            //L'AS n'est pas encore fais (soit 1 soit 11)
     BEGIN
       distribIA(Nombre2CarteIA,A3);
       MainI[Nombre2CarteIA]:=TableauValeur[A3];
       Nombre2CarteIA:=Nombre2CarteIA+1;
       TableauVerification[A3]:=true;
       Memo1.Lines.append('L''IA a tiré un ' + inttostr(TableauValeur[A3]));
       Memo1.Lines.append('');
     end;
end;
 
//Je vous met aussi la fonction qui dessine
 
procedure TForm3.distribIA(X1,Y1 : integer);                //Fonction pour dessiner les cartes de l'IA
BEGIN
  if (X1=1) then
     BEGIN
       image9.Picture.LoadFromFile(TableauImage[Y1]);
     end;
  if (X1=2) then
     BEGIN
       image10.Picture.LoadFromFile(TableauImage[Y1]);
     end;
  if (X1=3) then
     BEGIN
       image11.Picture.LoadFromFile(TableauImage[Y1]);
     end;
  if (X1=4) then
     BEGIN
       image12.Picture.LoadFromFile(TableauImage[Y1]);
     end;
  if (X1=5) then
     BEGIN
       image13.Picture.LoadFromFile(TableauImage[Y1]);
     end;
  if (X1=6) then
     BEGIN
       image14.Picture.LoadFromFile(TableauImage[Y1]);
     end;
  if (X1=7) then
     BEGIN
       image15.Picture.LoadFromFile(TableauImage[Y1]);
     end;
end;
 
procedure TForm3.distribCroupier(X1,Y1 : integer);         //Fonction pour dessiner les cartes du croupier
BEGIN
  if (X1=1) then
     BEGIN
       image16.Picture.LoadFromFile(TableauImage[Y1]);
     end;
  if (X1=2) then
     BEGIN
       image17.Picture.LoadFromFile(TableauImage[Y1]);
     end;
  if (X1=3) then
     BEGIN
       image18.Picture.LoadFromFile(TableauImage[Y1]);
     end;
  if (X1=4) then
     BEGIN
       image19.Picture.LoadFromFile(TableauImage[Y1]);
     end;
  if (X1=5) then
     BEGIN
       image20.Picture.LoadFromFile(TableauImage[Y1]);
     end;
  if (X1=6) then
     BEGIN
       image21.Picture.LoadFromFile(TableauImage[Y1]);
     end;
  if (X1=7) then
     BEGIN
       image22.Picture.LoadFromFile(TableauImage[Y1]);
     end;
end;
Si vous savez comment régler mon petit problème je suis preneur. Et au passage je suis désolé pour toutes les fautes d'orthographe que j'ai pu faire.

PS : Voici le tableau des valeurs qui correspond bien aux valeurs des cartes. Je l'ai mit dans TFormCreate. C'est le lien des images qui est ajouté en plus.

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
41
42
43
44
45
46
47
48
49
50
51
52
53
 
  TableauImage[1]:='Images\1.png';TableauValeur[1]:=1;  //Comme j'ai mit coupé les cartes moi meme sur un logiciel (j'ai pris une image ou il y avait toutes les cartes de meme dimensions) j'ai mit les AS de 1 à 4 les 2 de 5 a 8...
  TableauImage[2]:='Images\2.png';TableauValeur[2]:=1;
  TableauImage[3]:='Images\3.png';TableauValeur[3]:=1;
  TableauImage[4]:='Images\4.png';TableauValeur[4]:=1;
  TableauImage[5]:='Images\5.png';TableauValeur[5]:=2;
  TableauImage[6]:='Images\6.png';TableauValeur[6]:=2;
  TableauImage[7]:='Images\7.png';TableauValeur[7]:=2;
  TableauImage[8]:='Images\8.png';TableauValeur[8]:=2;
  TableauImage[9]:='Images\9.png';TableauValeur[9]:=3;
  TableauImage[10]:='Images\10.png';TableauValeur[10]:=3;
  TableauImage[11]:='Images\11.png';TableauValeur[11]:=3;
  TableauImage[12]:='Images\12.png';TableauValeur[12]:=3;
  TableauImage[13]:='Images\13.png';TableauValeur[13]:=4;
  TableauImage[14]:='Images\14.png';TableauValeur[14]:=4;
  TableauImage[15]:='Images\15.png';TableauValeur[15]:=4;
  TableauImage[16]:='Images\16.png';TableauValeur[16]:=4;
  TableauImage[17]:='Images\17.png';TableauValeur[17]:=5;
  TableauImage[18]:='Images\18.png';TableauValeur[18]:=5;
  TableauImage[19]:='Images\19.png';TableauValeur[19]:=5;
  TableauImage[20]:='Images\20.png';TableauValeur[20]:=5;
  TableauImage[21]:='Images\21.png';TableauValeur[21]:=6;
  TableauImage[22]:='Images\22.png';TableauValeur[22]:=6;
  TableauImage[23]:='Images\23.png';TableauValeur[23]:=6;
  TableauImage[24]:='Images\24.png';TableauValeur[24]:=6;
  TableauImage[25]:='Images\25.png';TableauValeur[25]:=7;
  TableauImage[26]:='Images\26.png';TableauValeur[26]:=7;
  TableauImage[27]:='Images\27.png';TableauValeur[27]:=7;
  TableauImage[28]:='Images\28.png';TableauValeur[28]:=7;
  TableauImage[29]:='Images\29.png';TableauValeur[29]:=8;
  TableauImage[30]:='Images\30.png';TableauValeur[30]:=8;
  TableauImage[31]:='Images\31.png';TableauValeur[31]:=8;
  TableauImage[32]:='Images\32.png';TableauValeur[32]:=8;
  TableauImage[33]:='Images\33.png';TableauValeur[33]:=9;
  TableauImage[34]:='Images\34.png';TableauValeur[34]:=9;
  TableauImage[35]:='Images\35.png';TableauValeur[35]:=9;
  TableauImage[36]:='Images\36.png';TableauValeur[36]:=9;
  TableauImage[37]:='Images\37.png';TableauValeur[37]:=10;
  TableauImage[38]:='Images\38.png';TableauValeur[38]:=10;
  TableauImage[39]:='Images\39.png';TableauValeur[39]:=10;
  TableauImage[40]:='Images\40.png';TableauValeur[40]:=10;
  TableauImage[41]:='Images\41.png';TableauValeur[41]:=11;
  TableauImage[42]:='Images\42.png';TableauValeur[42]:=11;
  TableauImage[43]:='Images\43.png';TableauValeur[43]:=11;
  TableauImage[44]:='Images\44.png';TableauValeur[44]:=11;
  TableauImage[45]:='Images\45.png';TableauValeur[45]:=11;
  TableauImage[46]:='Images\46.png';TableauValeur[46]:=11;
  TableauImage[47]:='Images\47.png';TableauValeur[47]:=11;
  TableauImage[48]:='Images\48.png';TableauValeur[48]:=11;
  TableauImage[49]:='Images\49.png';TableauValeur[49]:=11;
  TableauImage[50]:='Images\50.png';TableauValeur[50]:=11;
  TableauImage[51]:='Images\51.png';TableauValeur[51]:=11;
  TableauImage[52]:='Images\52.png';TableauValeur[52]:=11;