| 12
 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