Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Farben erkennen (https://www.delphipraxis.net/58729-farben-erkennen.html)

freq.9 11. Dez 2005 19:28


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?

hibbert 11. Dez 2005 19:52

Re: Farben erkennen
 
Mach doch ein Screenshot, lade diesen in dein Cheat-Programm (am Besten in ein Image) ind dann mit
Delphi-Quellcode:
image1.canvas.pixel[x,y]
überprüfen.

hibbert

glkgereon 11. Dez 2005 19:55

Re: Farben erkennen
 
also erstmal machst du dir einen Screenshot Hier im Forum suchenScreenshot
Dann lädst du das ganze in ein TBitmap o.ä. Hier im Forum suchenTBitmap

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 ;)

freq.9 11. Dez 2005 21:37

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.

glkgereon 12. Dez 2005 13:52

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 10:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz