![]() |
Farben erkennen
Ich möchte mir für ein kleines einfaches Minigolf-Spiel nen kleines Cheat-Programm basteln ;) Da das Spiel selbst aber keine Exe oder so ist, sondern im Browser gespielt wird, brauche ich eine Komponente oder ähnliches mit der ich den Browser oder alles was ich aufm Monitor "scannen" kann. Dann muss ich die Farben so interpretieren dass das Tool weiß, wo der Ball lang kann und wo nicht. So will ich dann, dass mir dieses Tool sagt, welches die optimalen Schussrichtungen sind.
Wie mache ich dieses Scannen des Bildschirms? |
Re: Farben erkennen
Mach doch ein Screenshot, lade diesen in dein Cheat-Programm (am Besten in ein Image) ind dann mit
Delphi-Quellcode:
überprüfen.
image1.canvas.pixel[x,y]
hibbert |
Re: Farben erkennen
also erstmal machst du dir einen Screenshot
![]() Dann lädst du das ganze in ein TBitmap o.ä. ![]() dann baust du dir ein Array [1..x,1..y] of Byte um darin abzulegen, welcher untergrund das ist
Delphi-Quellcode:
und dann gibt es mehrere möglichkeiten.
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; 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:
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)
for Winkel:=Anfang to Ende (Step genauigkeit) do
for Stärke=Min to Max do 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 ;) |
Re: Farben erkennen
Öhm mein Delphi rennt mal wieder nicht. Kannst erst garnicht starten. Keine Ahnung was da wieder los ist. Muss ich wohl neu installieren. Naja nun hab ich das mal in VC++ angefangen aber der Code von dir, natürlich in VC++ umgeschrieben, ergibt mir so Werte wie 255 (rot), 958990, 15329769 aber was mach ich damit? Ich verstehe auch nicht, wieso Schwarz einmal 0 ist und ein Pixel weiter 131586 ist. Das dumme ist nämlich, dass ich alle verschiedenen Farbcodes kennen muss.
|
Re: Farben erkennen
also...
du musst die Zahlen mit einem Geieigneten Programm in einen Hexadezimalwert umformen. dann bekommst du einen Wert wie $53F4A54D dies ist ein RGB Farbwert. Zwei stellen sind ein Byte, also eine Zahl von 0 bis 255 $AABBGGRR A ist der Alpha-Wert B ist Blau G ist Grün R ist Rot Rot wäre $000000FF = 255 Grün wäre $0000FF00 = 255*256 Blau wäre $00FF0000 = 55*256*256 Schwarz ist $00000000 = 0 Weiss wäre $00FFFFFF = 255 + 255*256 + 255*256*256 such mal in der codelib nach geeigneten Verfahren das aufzusplitten |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz