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 93 94 95 96
|
// c'est la fonction qui gère la fin de déplacement des billes.
// une autre fonction récupère les valeurs des positions en X et Y de départ avant le déplacement
void __fastcall TfmGame::billeAllEndDock(TObject *Sender, TObject *Target, int X, int Y)
{
TImage *Bille = dynamic_cast<TImage *>(Sender);
Pos_end_X = Bille->Left; //variable de position X après le déplacement
Pos_end_Y = Bille->Top; //variable de position Y après le déplacement
NbCoups++;
fmGame->LaCoups->Caption=NbCoups;
ufmMain->lb_nbcoups->Caption=NbCoups;
La_Pos_end_X->Caption = Pos_end_X;
La_Pos_end_Y->Caption = Pos_end_Y; //jusqu'ici rien d'important
Pos_dif_X = Pos_end_X - Pos_start_X;
Pos_dif_Y = Pos_end_Y - Pos_start_Y; //ici je calcule la diférence des 2 positions pour savoir plus tard si il faut que je déplace la bille en X ou en Y
if(Pos_dif_X < 0)
{
Pos_dif_X_d = Pos_dif_X * (-1);
}
if(Pos_dif_Y < 0)
{
Pos_dif_Y_d = Pos_dif_Y * (-1);
}
if(Pos_dif_X_d > Pos_dif_Y_d) //si la différence en X > que Y alors je prépare à déplacer en X
{
dir=false; //dir = direction => false = X et true = Y
La_dir->Caption="X";
if(Pos_dif_X > 0) //là je calcul le sens du déplacement gauche (-) / droite (+)
{
sens=true;
La_sens->Caption="+";
}
else
{
sens=false;
La_sens->Caption="-";
}
}
else //sinon le déplacement est vertical
{
dir=true;
La_dir->Caption="Y";
if(Pos_dif_Y > 0) // gauche /droite
{
sens=true;
La_sens->Caption="+";
}
else
{
sens=false;
La_sens->Caption="-";
}
}
if((dir==false)&&(sens==false)) //si direction = X et sens = - => je v à gauche et je déplace pile du nombre de pixel qu'il faut pour aller 2 cases plus loin
{
Bille->Left=Pos_start_X - 82;
Bille->Top=Pos_start_Y;
}
if((dir==true)&&(sens==false)) // là je monte
{
Bille->Top=Pos_start_Y - 74;
Bille->Left=Pos_start_X;
}
if((dir==false)&&(sens==true)) // je v à droite
{
Bille->Left=Pos_start_X + 82;
Bille->Top=Pos_start_Y;
}
if((dir==true)&&(sens==true)) // en bas
{
Bille->Top=Pos_start_Y + 74;
Bille->Left=Pos_start_X;
}
if((Pos_dif_X_d < 41) && (Pos_dif_Y_d < 37)) // si le déplacement est inférieure à "une case" je remet sur la case originale
{
Bille->Top=Pos_start_Y;
Bille->Left=Pos_start_X;
}
} |
Partager