also erstmal machst du dir einen Screenshot
Screenshot
Dann lädst du das ganze in ein TBitmap o.ä.
TBitmap
dann baust du dir ein Array [1..x,1..y] of Byte um darin abzulegen, welcher untergrund das ist
Delphi-Quellcode:
for x:=1 to Bild.Width do
for y:=1 to Bild.Height do
begin
Case Bild.Canvas.Pixels[x,y] of
clBlack: Data[x,y]:=0; //Rand
clGreen: Data[x,y]:=1; //Rasen
//....
end;
end;
und dann gibt es mehrere möglichkeiten.
a)
du kannst versuchen zu berechnen (wenigstens näherungsweise) wo du hinspielen musst. Dies wäre am sinnvollsten, aber auch stylistisch am schönsten.
wie das gehen könnte habe ich ehrlich gesagt keine idee
b)
du simulierst in bestimmten Rastern die abschläge, und tastest dich so an den korrekten Schlag an.
Das wäre wahrscheinlich relativ einfach zu programmieren, braucht aber im zweifel mehr zeit und ist
imho stylistisch sehr unschön (sagt dir Brute-Force was?
)
das könnte wie folgt aussehen:
du machst ein Schleifenkonstrukt wie folgt:
Delphi-Quellcode:
for Winkel:=Anfang to Ende (Step genauigkeit) do
for Stärke=Min to Max do
indem du einfach mit einer gewissen genauigkeit alle schläge im Winkel "Winkel" mit der stärke "Stärke" durchprobierst (für das eigentliche Simulieren musst du halt jeweils gucken was für felder du überquerst, und demnach abbremsung, beschleunigung und ablenkung draufhauen)
beim durchprobieren prüfst du jedesmal, wie weit der ball vom Loch entfernt ist. die kleinste Distanz speicherst du.
Dann nimmst du dir die Winkel und die Stärken der beiden Durchläufe mit der kleinsten Distanz und fängst mit den neuen Grenzen von vorne an.
wenn diese Distanz klein genug ist, das der ball im Loch landet, kannst du natürlich aufhören