AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Farben erkennen

Ein Thema von freq.9 · begonnen am 11. Dez 2005 · letzter Beitrag vom 12. Dez 2005
Antwort Antwort
Benutzerbild von freq.9
freq.9

Registriert seit: 12. Nov 2003
Ort: Beckum
37 Beiträge
 
Delphi 7 Professional
 
#1

Farben erkennen

  Alt 11. Dez 2005, 20:28
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?
Jan Pieper
  Mit Zitat antworten Zitat
Benutzerbild von hibbert
hibbert

Registriert seit: 26. Aug 2003
Ort: Berlin
262 Beiträge
 
Delphi 2005 Personal
 
#2

Re: Farben erkennen

  Alt 11. Dez 2005, 20:52
Mach doch ein Screenshot, lade diesen in dein Cheat-Programm (am Besten in ein Image) ind dann mit
image1.canvas.pixel[x,y] überprüfen.

hibbert
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#3

Re: Farben erkennen

  Alt 11. Dez 2005, 20:55
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
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von freq.9
freq.9

Registriert seit: 12. Nov 2003
Ort: Beckum
37 Beiträge
 
Delphi 7 Professional
 
#4

Re: Farben erkennen

  Alt 11. Dez 2005, 22:37
Ö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.
Jan Pieper
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#5

Re: Farben erkennen

  Alt 12. Dez 2005, 14:52
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
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:54 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