hoby500
Messages postés86Date d'inscriptionmardi 25 février 2003StatutMembreDernière intervention26 mai 2019
-
9 mars 2013 à 01:52
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 2021
-
14 mars 2013 à 18:50
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 14 mars 2013 à 18:50
@cirec:
oui, j'avais noté,il faudrait que les déplacements soient paramètrables afin de les faire coincider avec
ceux qui pourraient être utiles dans l'utilisation de certains jeux.
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 14 mars 2013 à 12:44
Voilà, le zip a été vidé de ses fichiers inutiles.
Sinon c'est plus qu'un simple code pour déplacer la souri,
il reproduit le déplacement humain, ce qui dans certain cas
peut être utile dans le développement de jeux ...
@++
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 11 mars 2013 à 13:04
ça serait bien également de mettre des commentaires
dans le code puisque ce source est destiné aux débutants
Personnellement, je fais et je utiliser ce module. Je ne serai heureux que si elle est fondée sur quelqu'un écrit quelque chose de plus parfait.
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 11 mars 2013 à 10:32
quelques optimisations :
function IsMouseButtonHeld(button: TClickType): boolean;
begin
Result := false; // à ajouter
case button of
mouse_Left: Result := (GetAsyncKeyState(VK_LBUTTON) <> 0);
mouse_Middle: Result := (GetAsyncKeyState(VK_MBUTTON) <> 0);
mouse_Right: Result := (GetAsyncKeyState(VK_RBUTTON) <> 0);
end;
end;
procedure ClickMouse(button: TClickType);
var
a, b, c: integer;
begin
{ Eventually, should be made to just use Integers }
a := 0; // à ajouter
GetMousePosition(b, c);
HoldMouse(b, c, Button);
repeat
Sleep(20 + Random(30));
a := a + 1;
until (a > 4);
GetMousePosition(b, c);
ReleaseMouse(b, c, Button);
Sleep(50 + Random(50));
end;
à supprimer lastdist := dist;
procedure SleepAndMoveMouse(Time: Integer);
var
Moving: Boolean;
mx, my: Integer;
x, y, xv, yv: Extended;
gx, gy: Extended;
T: Integer;
begin
xv := 0; // à ajouter
yv := 0; // idem
GetMousePosition(mx, my);
x := mx;
y := my;
if (Random(2) = 0) then
Moving := False
else
Moving := True;
gx := 130 + Random(500);
gy := 130 + Random(300);
T := GetTickCount;
repeat
Sleep(10);
if (Moving) then
begin
if (gx > x) then
xv := xv + 0.1
else
xv := xv - 0.1;
if (gy > y) then
yv := yv + 0.1
else
yv := yv - 0.1;
x := x + xv;
y := y + yv;
MoveMouse(Round(x), Round(y));
end;
if (Random(100) = 0) then
Moving := not Moving;
if (Random(30) = 0) then
begin
gx := 130 + Random(500);
gy := 130 + Random(300);
end;
until (Abs(GetTickCount - T) >= Time);
end;
TDist := Distance(Round(xs), Round(ys), Round(xe), Round(ye));
if (TDist < 1) then
TDist := 1;
repeat
dist := hypot(xs - xe, ys - ye);
wind := min(wind, dist);
if (dist < 1) then
dist := 1;
PDist := (dist / TDist);
if (PDist < 0.01) then
PDist := 0.01;
{
These constants seem smooth to me, but
feel free to modify these settings however
you wish.
}
if (PDist >= 0.15) then //15% (or higher) dist to destination
begin
D := Round(Round((Round(dist) * 0.3)) / 5);
if (D < 20) then
D := 20;
//D := RandomRange(15, 25); {Original}
end else if (PDist < 0.15) then
begin
if ((PDist <= 0.15) and (PDist >= 0.10)) then //10%-15%
D := RandomRange(8, 13)
else if (PDist < 0.10) then //< 10%
D := RandomRange(4, 7);
end;
if (D <= Round(dist)) then
maxStep := D
else
maxStep := Round(dist);
if dist >= targetArea then
begin
windX := windX / sqrt3 + (random(round(wind) * 2 + 1) - wind) / sqrt5;
windY := windY / sqrt3 + (random(round(wind) * 2 + 1) - wind) / sqrt5;
end else
begin
windX := windX / sqrt2;
windY := windY / sqrt2;
end;
if (lastX <> Round(xs)) or (lastY <> Round(ys)) then
MoveMouse(Round(xs), Round(ys));
W := (Random(Round(100 / MSP))) * 6;
if (W < 5) then
W := 5;
W := Round(W * 1.2);
Sleep(W);
// lastdist := dist;
until (hypot(xs - xe, ys - ye) < 1);
if (Round(xe) <> Round(xs)) or (Round(ye) <> Round(ys)) then
MoveMouse(Round(xe), Round(ye));
MouseSpeed := MSP;
end;
Cela me paraît un peu compliqué pour un simple déplacement de souris
mais l'idée (qui n'est pas neuve..) est néanmoins intéressante et pourra servir de base
à de futures sources plus élaborées.
7/10
14 mars 2013 à 18:50
oui, j'avais noté,il faudrait que les déplacements soient paramètrables afin de les faire coincider avec
ceux qui pourraient être utiles dans l'utilisation de certains jeux.
14 mars 2013 à 12:44
Sinon c'est plus qu'un simple code pour déplacer la souri,
il reproduit le déplacement humain, ce qui dans certain cas
peut être utile dans le développement de jeux ...
@++
11 mars 2013 à 13:04
dans le code puisque ce source est destiné aux débutants
11 mars 2013 à 12:22
11 mars 2013 à 10:32
function IsMouseButtonHeld(button: TClickType): boolean;
begin
Result := false; // à ajouter
case button of
mouse_Left: Result := (GetAsyncKeyState(VK_LBUTTON) <> 0);
mouse_Middle: Result := (GetAsyncKeyState(VK_MBUTTON) <> 0);
mouse_Right: Result := (GetAsyncKeyState(VK_RBUTTON) <> 0);
end;
end;
procedure ClickMouse(button: TClickType);
var
a, b, c: integer;
begin
{ Eventually, should be made to just use Integers }
a := 0; // à ajouter
GetMousePosition(b, c);
HoldMouse(b, c, Button);
repeat
Sleep(20 + Random(30));
a := a + 1;
until (a > 4);
GetMousePosition(b, c);
ReleaseMouse(b, c, Button);
Sleep(50 + Random(50));
end;
à supprimer lastdist := dist;
procedure SleepAndMoveMouse(Time: Integer);
var
Moving: Boolean;
mx, my: Integer;
x, y, xv, yv: Extended;
gx, gy: Extended;
T: Integer;
begin
xv := 0; // à ajouter
yv := 0; // idem
GetMousePosition(mx, my);
x := mx;
y := my;
if (Random(2) = 0) then
Moving := False
else
Moving := True;
gx := 130 + Random(500);
gy := 130 + Random(300);
T := GetTickCount;
repeat
Sleep(10);
if (Moving) then
begin
if (gx > x) then
xv := xv + 0.1
else
xv := xv - 0.1;
if (gy > y) then
yv := yv + 0.1
else
yv := yv - 0.1;
x := x + xv;
y := y + yv;
MoveMouse(Round(x), Round(y));
end;
if (Random(100) = 0) then
Moving := not Moving;
if (Random(30) = 0) then
begin
gx := 130 + Random(500);
gy := 130 + Random(300);
end;
until (Abs(GetTickCount - T) >= Time);
end;
procedure BrakeWindMouse(xs, ys, xe, ye, gravity, wind, minWait, maxWait, targetArea: extended);
var
veloX, veloY, windX, windY, veloMag, dist, randomDist {, lastDist}: extended;
lastX, lastY, MSP, W, maxStep, D, TDist: integer;
sqrt2, sqrt3, sqrt5, PDist: extended;
begin
veloX := 0;
veloY := 0;
windX := 0;
windY := 0;
d := 0; // à ajouter
MSP := MouseSpeed;
sqrt2 := sqrt(2);
sqrt3 := sqrt(3);
sqrt5 := sqrt(5);
TDist := Distance(Round(xs), Round(ys), Round(xe), Round(ye));
if (TDist < 1) then
TDist := 1;
repeat
dist := hypot(xs - xe, ys - ye);
wind := min(wind, dist);
if (dist < 1) then
dist := 1;
PDist := (dist / TDist);
if (PDist < 0.01) then
PDist := 0.01;
{
These constants seem smooth to me, but
feel free to modify these settings however
you wish.
}
if (PDist >= 0.15) then //15% (or higher) dist to destination
begin
D := Round(Round((Round(dist) * 0.3)) / 5);
if (D < 20) then
D := 20;
//D := RandomRange(15, 25); {Original}
end else if (PDist < 0.15) then
begin
if ((PDist <= 0.15) and (PDist >= 0.10)) then //10%-15%
D := RandomRange(8, 13)
else if (PDist < 0.10) then //< 10%
D := RandomRange(4, 7);
end;
if (D <= Round(dist)) then
maxStep := D
else
maxStep := Round(dist);
if dist >= targetArea then
begin
windX := windX / sqrt3 + (random(round(wind) * 2 + 1) - wind) / sqrt5;
windY := windY / sqrt3 + (random(round(wind) * 2 + 1) - wind) / sqrt5;
end else
begin
windX := windX / sqrt2;
windY := windY / sqrt2;
end;
veloX := veloX + windX;
veloY := veloY + windY;
veloX := veloX + gravity * (xe - xs) / dist;
veloY := veloY + gravity * (ye - ys) / dist;
if hypot(veloX, veloY) > maxStep then
begin
randomDist := maxStep / 2.0 + random(round(maxStep) div 2);
veloMag := sqrt(veloX * veloX + veloY * veloY);
veloX := (veloX / veloMag) * randomDist;
veloY := (veloY / veloMag) * randomDist;
end;
lastX := Round(xs);
lastY := Round(ys);
xs := xs + veloX;
ys := ys + veloY;
if (lastX <> Round(xs)) or (lastY <> Round(ys)) then
MoveMouse(Round(xs), Round(ys));
W := (Random(Round(100 / MSP))) * 6;
if (W < 5) then
W := 5;
W := Round(W * 1.2);
Sleep(W);
// lastdist := dist;
until (hypot(xs - xe, ys - ye) < 1);
if (Round(xe) <> Round(xs)) or (Round(ye) <> Round(ys)) then
MoveMouse(Round(xe), Round(ye));
MouseSpeed := MSP;
end;
Cela me paraît un peu compliqué pour un simple déplacement de souris
mais l'idée (qui n'est pas neuve..) est néanmoins intéressante et pourra servir de base
à de futures sources plus élaborées.
7/10
11 mars 2013 à 08:55
9 mars 2013 à 01:52
vous ne pensez pas qu'il est utile de virer les fichiers backup *.~* de votre zip ?