| Autor |
Beitrag |
Stread
      
Beiträge: 188
Win 7
Delphi XE
|
Verfasst: Fr 15.05.09 15:29
Hi
ich möchte mich gerne an ein neues Delphi Projekt wagen und mit eurer Hilfe schaffe ich es hoffentlich.
Also: Ich habe in meinem Programm einen weißen Hintergrund und alle 5 sec kommt ein Rechteck in einer anderen Farbe. Wenn ein grünes kommt soll die Maus auf das Rechteck gehen und darauf klicken. Wenn ein rotes kommt soll auf einen festen Button gehen und darauf klicken.
Wie funktioniert das und wie ist das für einen Anfänger leicht umzusetzen?
Danke
Stread
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 15.05.09 15:34
Moin!
Nette Idee (für ein Einsteiger-Projekt), das sollte mit ein paar Zeilen Code machbar sein.
Wenn du dann noch die durchschnittliche Zeit bestimmst, die man zum Klicken braucht, haste auch gleich einen Wert für die Bestenliste.
@all: Bitte, keine fertigen Codes liefern - er hat ja nichtmal danach gefragt...
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 15.05.09 15:36
Per Timer ein Rechteck zufällig bestimmen und in einem Feld des Formulars speichern, dann PaintBox.Invalidate aufrufen. Delphi-Quelltext 1: 2: 3: 4:
| type TForm... private CurrentRect: TRect; | Dann kannst du eine TPaintBox und OnPaint benutzen und darin das jeweils aktuelle Rechteck zeichnen.
In OnClick der TPaintBox prüfst du mit PtInRect ob in das aktuelle Rechteck geklickt wurde.
Da so als grober Umriss. 
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 15.05.09 15:41
Moin!
jaenicke hat folgendes geschrieben : | Dann kannst du eine TPaintBox und OnPaint benutzen und darin das jeweils aktuelle Rechteck zeichnen.
In OnClick der TPaintBox prüfst du mit PtInRect ob in das aktuelle Rechteck geklickt wurde. |
Klar, geht.  Wäre auch "sauber", aber ich glaube als Anfänger vielleicht ein Ticken zu schwer...
Mein Vorschlag: - Panel als Klickfläche nehmen (dann kann man auch die "Daneben-Klicks" zählen und vom Score abziehen"
)
- Im Timerereignis ein Shape in der Größe/Position/Farbe setzen (kann ja immer das gleiche Objekt sein, einfach per .Visible verstecken), dessen OnMouseDown liefert das "Angeklickt"-Ereignis
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 15.05.09 15:43
Narses hat folgendes geschrieben : | Wäre auch "sauber", aber ich glaube als Anfänger vielleicht ein Ticken zu schwer...  |
Naja, wenn man es erst einmal verstanden hat wie das logisch abläuft, dann geht das.
Ich meine viel Quelltext ist es ja nicht, und wenn man OnPaint und so einmal ausprobiert, sollte das schon gehen.
|
|
ffgorcky
      
Beiträge: 573
WIN XP/2000 & 7Prof (Familie:Win95,Win98)
|
Verfasst: Fr 15.05.09 15:45
Stread, wenn ich Dich gerade richtig verstanden habe, dann möchtest Du ein Reaktionsprogramm selber schreiben - oder?
Oder möchtest Du einem Reaktionsprogramm damit eins "auswischen", indem Du immer einen Mausclick darauf innerhalb einer Millisekunde simulierst?
Wenn es denn das erste ist, dann könntest Du das ganze doch mit einem Panel machen, dessen OnClick(Sender) Du dann als getroffen-Ereignis nimmst.
Die Veränderung der Position kannst Du mit random(clientHeight-Panel.Heigth) und random(clientWidth-Panel.Width) bestimmen.
Reicht das als Erklärung?
- Oder war das jetzt schon zu viel? (Ich hoffe nicht!)
|
|
Stread 
      
Beiträge: 188
Win 7
Delphi XE
|
Verfasst: Fr 15.05.09 16:05
Eure Idee mit einem Reaktionsprogramm ist auch gut aber ich meinte eher dass das Programm die Maus selbstständig auf das Rechteck bewegt und dann daraufklickt. Also: Ich klicke auf den Start Button und es kommen im Anstand von 3sec 4 verschiedenfarbige Rechtecke. Wenn eins davon grün ist soll die Maus daraufgehen und es anklicken.
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 15.05.09 16:18
Moin!
Stread hat folgendes geschrieben : | | aber ich meinte eher dass das Programm die Maus selbstständig auf das Rechteck bewegt und dann daraufklickt. Also: Ich klicke auf den Start Button und es kommen im Anstand von 3sec 4 verschiedenfarbige Rechtecke. Wenn eins davon grün ist soll die Maus daraufgehen und es anklicken. |
Das Programm soll gegen sich selbst spielen (bei so einer typischen Menschen-Aufgabe)?  Was macht das für einen Sinn...
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Stread 
      
Beiträge: 188
Win 7
Delphi XE
|
Verfasst: Fr 15.05.09 16:23
Ich habe nie etwas von Mensch-Aufgabe oder Reaktionstest geschrieben. Auch nie etwas von Punkten oder Highscore. Ich möchte nur dass das Programm die Unterschiedlichen Farben (später auch an unterschiedlichen Positionen) erkennt und bei einer Farbe die Maus auf diese Farbe ausrichtet.
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 15.05.09 17:25
Das verstehe ich nicht. Sind die Farben zufällig? Wenn nicht, weißt Du ja, wann grün kommt (schließlich musst Du das ja selbst befehlen), da gibt es nichts zu erkennen.
|
|
Stread 
      
Beiträge: 188
Win 7
Delphi XE
|
Verfasst: Fr 15.05.09 17:44
Mensch, ist das denn so schwer zu verstehen? Das soll einfach nur ein einfaches Programm sein um den richtigen Code zu lernen
Delphi-Quelltext 1: 2: 3:
| Schaue ob die Farbe grün irgendwo in dem Bild vorkommt. Wenn ja: Richte den Mauszeiger darauf aus und betätige linke Maustaste. Wenn nein: mache nichts. |
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 15.05.09 17:45
Moin!
Stread hat folgendes geschrieben : | | Ich habe nie etwas von Mensch-Aufgabe oder Reaktionstest geschrieben. Auch nie etwas von Punkten oder Highscore. |
Das ist richtig, da waren wir wohl etwas schnell mit der Phantasie dabei...
Stread hat folgendes geschrieben : | | Ich möchte nur dass das Programm die Unterschiedlichen Farben (später auch an unterschiedlichen Positionen) erkennt und bei einer Farbe die Maus auf diese Farbe ausrichtet. |
Tja, auch hier frage ich mich: was soll das bringen? Sollen wir jetzt eine Klick-Bot-Vorlage für dich entwickeln?  Wäre die einzige Anwendung, der mir dazu einfällt... (nämlich eben in einem Bild zu suchen, das nicht von deiner Anwendung erzeugt wurde) Das wiederum ist nach meiner Ansicht überhaupt kein gutes Einsteigerprojekt. Und einfach ist es auch nicht. und wenn ich so richtig drüber nachdenke, ist es auch für sonst niemanden ein gutes Projekt, weil es eigentlich viel zu viele illegale/unfaire Szenarien dafür gibt...
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 15.05.09 17:51
Zumal "grün" erst einmal definiert werden muss, ohne Toleranzschwelle wird das sowieso nichts.
|
|
FinnO
      
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: Fr 15.05.09 18:17
das ginge ja sehr einfach mit
Delphi-Quelltext 1: 2: 3: 4:
| RGB(R,G,B:Byte); GetRValue(Col:TColor); GetGValue(Col:TColor); GetBValue(Col:TColor); |
ich glaub so hießen die
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 15.05.09 18:24
Klar heißen die so, aber was heißt jetzt grün? Du brauchst Schwellenwerte.
|
|
Stread 
      
Beiträge: 188
Win 7
Delphi XE
|
Verfasst: Fr 15.05.09 18:29
Darf mann denn hier überhaupt nichts mehr fragen weil es vielleicht in Erwägung gezogen werden könnte dass der User damit vielleicht etwas böses anstellen könnte?
Narses meinst du mit deinem Szenario einen Aimbot? Keine Sorge das will ich nicht, aber das haben alle wahrscheinlich gesagt
Man kanns mit der Sicherheit auch übertreiben.
Nein, es ist nicht mein erstes Projekt.
Narses hat folgendes geschrieben : |
Tja, auch hier frage ich mich: was soll das bringen? |
Spaß? Da ich noch am Anfang stehe suche ich mir halt immer neue Projekte aus. Und diesmal wollte ich etwas mit Mausbewegungen und Farben machen.
Wenn das automatische erkennen von Farben zu schwer ist könnte man ja auch den Kontrast schwarz/weiß nehmen. Oder eben genau die Nummer der Farbe die man verwendet hat.
Wenn ich mich jetzt noch einmal rechtfertigen muss frage ich halt woanderst nach. 
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 15.05.09 18:31
So nochmal: grün ist nicht gleich grün. Um das zu erkennen, musst Du "grün" zunächst definieren (in einem Bereich von bis).
|
|
FinnO
      
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: Fr 15.05.09 18:51
ja mein Gott und das kann er ja mit den Funktionen machen. Das wird er dann ja feststellen, dass grün eher sowas wie
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| function IsGruen(Col:TColor) : Boolean; begin Result := GetGValue(Col) in [200..255] and GetRValue(Col) in [0..200] and GetBValue(Col) in [0..200]; end; |
ist. Wenn sich jetzt jemand aufregt, dass das vollständiger Quelltext ist, dann möge Gott mir verzeihen und ich nehm das wieder raus;)
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 15.05.09 18:54
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 15.05.09 18:55
Genau das habe ich ja mit Schwellenwerten gemeint, einfach so mit "=" vergleichen klappt in den wenigsten Fällen.
|
|