Marcher OK, a améliorer !

This commit is contained in:
adri 2018-01-06 16:56:46 +01:00
parent e4be7fd6d0
commit 3aa5ca08cc
5 changed files with 155 additions and 27 deletions

View File

@ -88,6 +88,11 @@ namespace Bonhomme02
cooMY += H.Y; cooMY += H.Y;
int xx = (int)Math.Round(cooMX); int xx = (int)Math.Round(cooMX);
int yy = (int)Math.Round(cooMY); int yy = (int)Math.Round(cooMY);
if(Double.IsNaN(a) || Double.IsNaN(b))
{
return Millieux.Coordonnee;
}
else
return new Point(xx, yy); return new Point(xx, yy);
} }
catch(Exception e) catch(Exception e)
@ -96,7 +101,7 @@ namespace Bonhomme02
return new Point(0, 0); return new Point(0, 0);
} }
} }
public void Bouger(int X, int Y) public void BougerBas(int X, int Y)
{ {
Point nouveauPtBas = new Point(Bas.X + X, Bas.Y + Y); Point nouveauPtBas = new Point(Bas.X + X, Bas.Y + Y);
Point nouveauPtMillieux = TouverPointMillieux(nouveauPtBas); Point nouveauPtMillieux = TouverPointMillieux(nouveauPtBas);
@ -106,12 +111,32 @@ namespace Bonhomme02
Millieux.Angle = TrouverAngleMillieux(nouveauPtBas); Millieux.Angle = TrouverAngleMillieux(nouveauPtBas);
} }
} }
public void BougerXHaut(int x, ref Bonhomme bonhomme)
{
Point oldPtBas = Bas.Coordonnee;
Vecteur oldVecteurHautBas = new Vecteur(Bas.Coordonnee, Haut.Coordonnee);
Vecteur newVecteurHautBas;
Point newCooHaut = TrouverPointSurCerlceSelonX(Bas.Coordonnee, oldVecteurHautBas.ABS, Haut.Coordonnee.X + x);
bonhomme.Coordonnee = new Point(newCooHaut.X, (int)Math.Round(newCooHaut.Y - bonhomme.longueur.ABS));
Point nouveauPtMillieux = TouverPointMillieux(oldPtBas);
if (nouveauPtMillieux.X != 0 || nouveauPtMillieux.Y != 0)
{
Haut.Angle = TrouverAngleHaut(nouveauPtMillieux);
Millieux.Angle = TrouverAngleMillieux(oldPtBas);
}
}
public void SetAngle(double h, double m, double b) public void SetAngle(double h, double m, double b)
{ {
Haut.Angle = h; Haut.Angle = h;
Millieux.Angle = m; Millieux.Angle = m;
Bas.Angle = b; Bas.Angle = b;
} }
public Point TrouverPointSurCerlceSelonX(Point centre, double rayon, int nouveauX)
{
double racine = Math.Sqrt(rayon * rayon - nouveauX * nouveauX + 2 * centre.X * nouveauX - centre.X * centre.X);
double y = -(racine - centre.Y);
return new Point(nouveauX, (int)Math.Round(y));
}
} }
} }

View File

@ -57,5 +57,12 @@ namespace Bonhomme02
jambe2.Cacher(handle); jambe2.Cacher(handle);
bras.Cacher(handle); bras.Cacher(handle);
} }
public void InterevrtirJambe()
{
Jambe tmp;
tmp = jambe1;
jambe1 = jambe2;
jambe2 = tmp;
}
} }
} }

View File

@ -37,7 +37,7 @@ namespace Bonhomme02
{ {
bonhomme.Cacher(this.TV.Handle); bonhomme.Cacher(this.TV.Handle);
bonhomme.coordonnee = new Point(bonhomme.coordonnee.X + 3, bonhomme.coordonnee.Y + 0); bonhomme.coordonnee = new Point(bonhomme.coordonnee.X + 3, bonhomme.coordonnee.Y + 0);
bonhomme.jambe1.Bouger(+3, -3); bonhomme.jambe1.BougerBas(+3, -3);
bonhomme.Afficher(this.TV.Handle); bonhomme.Afficher(this.TV.Handle);
} }
} }
@ -61,7 +61,7 @@ namespace Bonhomme02
bonhomme.Afficher(this.TV.Handle); bonhomme.Afficher(this.TV.Handle);
marche = new Marcher(ref bonhomme, this.TV.Handle, this.Sol.Location.Y-this.TV.Location.Y); marche = new Marcher(ref bonhomme, this.TV.Handle, this.Sol.Location.Y-this.TV.Location.Y);
Thread.Sleep(1000); Thread.Sleep(1000);
Task.Factory.StartNew(() => marche.Avancer(5)); Task.Factory.StartNew(() => marche.Avancer(10));
//this.btnStopDeplacerCTick.Enabled = true; //this.btnStopDeplacerCTick.Enabled = true;
// this.timerImage.Start(); // this.timerImage.Start();

View File

@ -28,14 +28,15 @@ namespace Bonhomme02
this.ySol = ySol; this.ySol = ySol;
resolution = 1; resolution = 1;
deltaXYmax = (int)Math.Round(3*bonhomme.jambe1.longueur.ABS/4); deltaXYmax = (int)Math.Round(3*bonhomme.jambe1.longueur.ABS/4);
//Reset de tous les angle au cas ou //Reset de tous les angle au cas ou
bonhomme.Angle = Math.PI / 2; bonhomme.Angle = Math.PI / 2;
bonhomme.jambe1.SetAngle(Math.PI / 2, Math.PI / 2, 0); bonhomme.jambe1.SetAngle(Math.PI / 2, Math.PI / 2, 0);
bonhomme.jambe2.Cacher(handle); //bonhomme.jambe2.Cacher(handle);
bonhomme.jambe2.Visible = false; // On va d'abord le faire marcher sur une jambe //bonhomme.jambe2.Visible = false; // On va d'abord le faire marcher sur une jambe
bonhomme.bras.Visible = false; bonhomme.bras.Visible = false;
bonhomme.bras.Cacher(handle); bonhomme.bras.Cacher(handle);
if(bonhomme.jambe1.Bas.CSG.Y != ySol) if(bonhomme.jambe1.Bas.CSG.Y != ySol) // On positionne le bonhomme sur le sol
{ {
Graphics gr = Graphics.FromHwnd(handle); Graphics gr = Graphics.FromHwnd(handle);
bonhomme.Cacher(handle); bonhomme.Cacher(handle);
@ -49,18 +50,20 @@ namespace Bonhomme02
public void Avancer(int vitesse) public void Avancer(int vitesse)
{ {
step = 0; step = 0;
double old = 1, neww = 0;
int dejaDeplacer = 0; int dejaDeplacer = 0;
while(step<=32) while(step<=128)
{ {
Console.WriteLine(step + "::" + step % 5);
dejaDeplacer = 0; dejaDeplacer = 0;
switch (step%5) switch (step%5)
{ {
case 0: case 0:
while (dejaDeplacer < deltaXYmax) //Descent corp while (dejaDeplacer < deltaXYmax) //Monte jambe 1
{ {
bonhomme.Cacher(handle); bonhomme.Cacher(handle);
bonhomme.jambe1.Bouger(0, -resolution); bonhomme.jambe1.BougerBas(0, -resolution);
bonhomme.Coordonnee = new Point(bonhomme.Coordonnee.X, bonhomme.Coordonnee.Y + resolution); //bonhomme.Coordonnee = new Point(bonhomme.Coordonnee.X, bonhomme.Coordonnee.Y + resolution);
bonhomme.Afficher(handle); bonhomme.Afficher(handle);
dejaDeplacer += resolution; dejaDeplacer += resolution;
Thread.Sleep(vitesse); Thread.Sleep(vitesse);
@ -68,56 +71,131 @@ namespace Bonhomme02
break; break;
case 1: case 1:
while (dejaDeplacer < deltaXYmax)//avence corp pied fixe while (dejaDeplacer < deltaXYmax)//avence corp + avancer jambe 1 jambe 2 fixe
{ {
bonhomme.Cacher(handle); bonhomme.Cacher(handle);
bonhomme.jambe1.Bouger(-resolution, 0); bonhomme.jambe2.BougerXHaut(resolution, ref bonhomme);
bonhomme.Coordonnee = new Point(bonhomme.Coordonnee.X + resolution, bonhomme.Coordonnee.Y); bonhomme.jambe1.BougerBas(resolution, 0);
bonhomme.Afficher(handle); bonhomme.Afficher(handle);
dejaDeplacer += resolution; dejaDeplacer += resolution;
Thread.Sleep(vitesse); Thread.Sleep(vitesse);
} }
CollerAuSol(ref bonhomme.jambe2);
break; break;
case 2: case 2:
while (dejaDeplacer < deltaXYmax) while (bonhomme.jambe1.Bas.CSG.Y < ySol-1 && old != neww) //Descendre jambe 1 sur sol
{ {
bonhomme.Cacher(handle); bonhomme.Cacher(handle);
bonhomme.jambe1.Bouger(-resolution, 0); bonhomme.jambe1.BougerBas(0, resolution);
//bonhomme.Coordonnee = new Point(bonhomme.Coordonnee.X + resolution, bonhomme.Coordonnee.Y);
bonhomme.Afficher(handle);
dejaDeplacer += resolution;
Thread.Sleep(vitesse);
if (neww != bonhomme.jambe1.Bas.CSG.Y)
{
neww = bonhomme.jambe1.Bas.CSG.Y;
}
else
old = bonhomme.jambe1.Bas.CSG.Y;
}
break;
case 3:
while (dejaDeplacer < (deltaXYmax*2))//Monte&avance jambe 2,avance bonhome
{
bonhomme.Cacher(handle);
bonhomme.jambe1.BougerBas(-resolution, 0);
if(dejaDeplacer < deltaXYmax)
bonhomme.jambe2.BougerBas(resolution, -resolution);
else
bonhomme.jambe2.BougerBas(resolution, 0);
bonhomme.Coordonnee = new Point(bonhomme.Coordonnee.X + resolution, bonhomme.Coordonnee.Y); bonhomme.Coordonnee = new Point(bonhomme.Coordonnee.X + resolution, bonhomme.Coordonnee.Y);
bonhomme.Afficher(handle); bonhomme.Afficher(handle);
dejaDeplacer += resolution; dejaDeplacer += resolution;
Thread.Sleep(vitesse); Thread.Sleep(vitesse);
} }
bonhomme.Cacher(handle); bonhomme.Cacher(handle);
bonhomme.jambe1.Bouger(0, -4); //bonhomme.jambe1.BougerBas(0, 4);
bonhomme.Afficher(handle); bonhomme.Afficher(handle);
break; break;
case 3: case 4:
while (dejaDeplacer < (deltaXYmax*4)) while (bonhomme.jambe2.Bas.CSG.Y < ySol - 1 && old != neww)//Descend jambe 2
{ {
bonhomme.Cacher(handle); bonhomme.Cacher(handle);
bonhomme.jambe1.Bouger(resolution, 0); bonhomme.jambe2.BougerBas(0, resolution);
//bonhomme.Coordonnee = new Point(bonhomme.Coordonnee.X + resolution, bonhomme.Coordonnee.Y); //bonhomme.Coordonnee = new Point(bonhomme.Coordonnee.X + resolution, bonhomme.Coordonnee.Y);
bonhomme.Afficher(handle); bonhomme.Afficher(handle);
dejaDeplacer += resolution; dejaDeplacer += resolution;
Thread.Sleep(vitesse); Thread.Sleep(vitesse);
} }
bonhomme.Cacher(handle); bonhomme.Cacher(handle);
bonhomme.jambe1.Bouger(0, 4); bonhomme.InterevrtirJambe();
bonhomme.Afficher(handle); bonhomme.Afficher(handle);
step+=2;
break; break;
case 4: /*---------------------------------------------T0 DO-----------------------------------------------*/
while (dejaDeplacer < deltaXYmax*4) case 5:
while (dejaDeplacer < deltaXYmax) //Monte pied 1
{ {
bonhomme.Cacher(handle); bonhomme.Cacher(handle);
bonhomme.jambe1.Bouger(-resolution, 0); bonhomme.jambe1.BougerBas(0, -resolution);
bonhomme.Coordonnee = new Point(bonhomme.Coordonnee.X, bonhomme.Coordonnee.Y + resolution);
bonhomme.Afficher(handle);
dejaDeplacer += resolution;
Thread.Sleep(vitesse);
}
break;
case 6:
while (dejaDeplacer < deltaXYmax)//avence corp pied 2 fixe
{
bonhomme.Cacher(handle);
bonhomme.jambe1.BougerBas(-resolution, 0);
bonhomme.Coordonnee = new Point(bonhomme.Coordonnee.X + resolution, bonhomme.Coordonnee.Y);
bonhomme.Afficher(handle);
dejaDeplacer += resolution;
Thread.Sleep(vitesse);
}
break;
case 7:
while (dejaDeplacer < deltaXYmax)
{
bonhomme.Cacher(handle);
bonhomme.jambe1.BougerBas(-resolution, 0);
bonhomme.Coordonnee = new Point(bonhomme.Coordonnee.X + resolution, bonhomme.Coordonnee.Y); bonhomme.Coordonnee = new Point(bonhomme.Coordonnee.X + resolution, bonhomme.Coordonnee.Y);
bonhomme.Afficher(handle); bonhomme.Afficher(handle);
dejaDeplacer += resolution; dejaDeplacer += resolution;
Thread.Sleep(vitesse); Thread.Sleep(vitesse);
} }
bonhomme.Cacher(handle); bonhomme.Cacher(handle);
bonhomme.jambe1.Bouger(0, -4); bonhomme.jambe1.BougerBas(0, -4);
bonhomme.Afficher(handle);
break;
case 8:
while (dejaDeplacer < (deltaXYmax * 4))
{
bonhomme.Cacher(handle);
bonhomme.jambe1.BougerBas(resolution, 0);
bonhomme.Afficher(handle);
dejaDeplacer += resolution;
Thread.Sleep(vitesse);
}
bonhomme.Cacher(handle);
bonhomme.jambe1.BougerBas(0, 4);
bonhomme.Afficher(handle);
break;
case 9:
while (dejaDeplacer < deltaXYmax * 4)
{
bonhomme.Cacher(handle);
bonhomme.jambe1.BougerBas(-resolution, 0);
bonhomme.Coordonnee = new Point(bonhomme.Coordonnee.X + resolution, bonhomme.Coordonnee.Y);
bonhomme.Afficher(handle);
dejaDeplacer += resolution;
Thread.Sleep(vitesse);
}
bonhomme.Cacher(handle);
bonhomme.jambe1.BougerBas(0, -4);
bonhomme.Afficher(handle); bonhomme.Afficher(handle);
step += 3; step += 3;
break; break;
@ -125,5 +203,19 @@ namespace Bonhomme02
step++; step++;
} }
} }
public void CollerAuSol(ref Jambe jambe)
{
if (jambe.Bas.CSG.Y != ySol) // On positionne le bonhomme sur le sol
{
Graphics gr = Graphics.FromHwnd(handle);
bonhomme.Cacher(handle);
Point newCoo;
int longeurTTBonhome = jambe.Bas.CSG.Y - bonhomme.CIG.Y;// de pied.csg à bonhome.cig
newCoo = new Point(bonhomme.Coordonnee.X, ySol - longeurTTBonhome);
bonhomme.Coordonnee = newCoo;
bonhomme.Afficher(handle);
} }
} }
}
}

View File

@ -68,6 +68,10 @@ namespace Bonhomme02
{ {
vecteur = Complex.FromPolarCoordinates(longueur, angle); vecteur = Complex.FromPolarCoordinates(longueur, angle);
} }
public Vecteur(Point origine, Point bout)
{
vecteur = new Complex(bout.X-origine.X, bout.Y - origine.Y);
}
public Vecteur(double longueur, ref Vecteur parent, bool flag) : this(longueur, parent.Angle - Math.PI / 2) public Vecteur(double longueur, ref Vecteur parent, bool flag) : this(longueur, parent.Angle - Math.PI / 2)
{ {
this.parent = parent; this.parent = parent;