Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Random Probelm (https://www.delphipraxis.net/84268-random-probelm.html)

Crazymodder 14. Jan 2007 13:42


Random Probelm
 
So hi habe wieder ein Problem und hoffe hier auf Hilfe.
Ich möchte folgendes erreichen:
Das Programm soll immer random buchstaben ausgeben!
Lösung:
Ich habe einen Timer genommen der jede Minute "zuschlägt".
Delphi-Quellcode:

procedure Timer.....
begin
Randomize;
Zufall := random (51) + 1;
if Zufall = 1 then
Keybd_Event(ord('A),0,0,0);
if Zufall = 2 then
Keybd_Event(ord('B'),0,0,0);
....... usw.
end;
So also er soll ebend die Buchstaben immer im random ausgeben cool wäre noch wenn ihr mir erklären könnten wie ich den timer auch noch über random "steuern" kann. Also in ner zeitspanner von 1 sekunde bis 3 min.

zecke 14. Jan 2007 13:46

Re: Random Probelm
 
Nun zuerst solltest Du ein ' nach A bei "Keybd_Event(ord('A),0,0,0);" hinzufügen.

Der Timer besitzt eine Einstellung Intervall (im OI). Diese gibt die Zeit in ms an.

ste_ett 14. Jan 2007 13:47

Re: Random Probelm
 
Über die Property "Intervall" der Instanz der TTimer-Klasse kannst du das Intervall setzen, bis das nächste Mal die Prozedur ausgeführt wird. :)

Delphi-Quellcode:
Name.Intervall := (Random(180) +1) * 1000; // 180 Sekunden = 3 Min
Das setzt du entweder einmal, damit das Intervall fest ist, oder am Ende jedes Prozedur-Aufrufs, dann verändert sich das Intervall jedes Mal.

fwsp 14. Jan 2007 13:48

Re: Random Probelm
 
auch solltest du das randomize nur einmal aufrufen, am besten im OnCreate der Form.
es gibt auch noch die case anweisung, damit sparst du dir die ganzen ifs.

Eichhoernchen 14. Jan 2007 13:53

Re: Random Probelm
 
du könntest dir die ganzen If Anweisungen sparen indem du den Randombereich auf die ASCII Zeichen einschränkst..so:

Delphi-Quellcode:
procedure Timer.....
begin
Randomize; //nur 1mal aufrufen pack das ins OnCreate
Zufall := random (26) + 65; //Alle Großbuchstaben aus der ASCII-Tabelle von 65 bis 90
Keybd_Event(Zufall, 0, 0, 0);
end;
du kannst das natürlich noch erweitern: Ascii-Tabelle

Ich hoffe das hilft dir....

Crazymodder 14. Jan 2007 13:58

Re: Random Probelm
 
Ja super thx für die schnelle Antwort. Aber wie sage ich ihm den wann er welchen Buchstaben drücken soll also hab hier irgendwas von case Anweisung gelsesen wäre nett wenn jmd das nochmal kurz erklären könnte. Also wie ich ihm nun sage wenn die Zufallszahl 7 ist soll er z.B K schreiben oder so?
Danke in Vorraus
Crazymodder

Eichhoernchen 14. Jan 2007 14:04

Re: Random Probelm
 
ich dachte es ist schnuppe, welchen Buchstaben er schreibt, ich denke das soll Zufall sein?

Der Befehl Ord('X'), gibt im Endeffekt 88 Zurück, was wiederum in der ASCII-Tabelle steht.
Also generierst du dir einfach eine Zahl aus der ASCII-Tabelle und das umformen sparst du dir dann, genauso wie die ganzen IF oder Case Anweisungen, weil du musst nicht mehr Prüfen, wenn 7 dann mach nen K, sondern wir generieren gleich das Ord('K').
Du kannst auch den ganzen Zeichensatz so benutzen, dazu machste dir nen Constantes Array mit allen ASCII-Werten die du willst du sprichst das dann per Random an.

Falls du aber alles einzeln machen willst, nimm Case, dass funktioniert so:

Delphi-Quellcode:
case VARIABLE of
  WERT1:
    begin
      ...
    end;
  WERT2: ...
  WERT3: ...
  ...
  WERTN: ...
  else ...
end;

Klaus01 14. Jan 2007 14:07

Re: Random Probelm
 
[quote="Crazymodder"]
Delphi-Quellcode:

procedure Timer.....
begin
Randomize;
Zufall := random (51) + 1;
if Zufall = 1 then
Keybd_Event(ord('A),0,0,0);
if Zufall = 2 then
Keybd_Event(ord('B'),0,0,0);
....... usw.
end;
Mir ist nicht so recht klar warum Du
bei random einen Maximalwert von 51 nimmst.

Du könntest doch auch mit der Funktion
randomRange arbeiten:

Delphi-Quellcode:
procedure Timer.execute
var
 zufall:Integer;
begin
  zufall:=randomRange(ord('A'),ord('Z'));
  keybd_Event(zufall,0,0,0);
end;
Dann schenkst Du dir die ganzen if oder case Abfragen.

Grüße
Klaus

Crazymodder 14. Jan 2007 14:12

Re: Random Probelm
 
Gut okay ich glaube ich weiß jetzt wie aber ich will ja nur bestimmt buchstaben nämlich a,s,d,w,lerrzeichen,o,p,c,y und die sollen random gedrückt werden und manchmal halt auf 2 oder 3 gleichzeitig
Hierzu wäre ne kleine Hilfestellung nochmal ganz nett
Danke im Vorruas
Crazymodder

Eichhoernchen 14. Jan 2007 14:19

Re: Random Probelm
 
dann machdas doch so:

Delphi-Quellcode:
procedure mach;
const
  chars: array[0..8] of integer = (97, 100, 115, 119, 32, 111, 112, 99, 121);
begin
 Keybd_Event(chars[random(9)],0,0,0);
end;

was du aber mit dem Gleichzeitig meinst, weiß ich net... soll das nen Bot für nen PC spiel werden? Damit du AFK gehen kannst? Die Tasten könnten passen....


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:53 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