Autor Beitrag
Danzig.Bln
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mi 12.01.05 17:45 
auf wunsch , mach ich neuen thread ...

also ich hab ein edit feld. da steht ein wort drin , was man erraten muss .
wenn dieses wort erraten wurde , soll das wort in ein label ausgegeben werden .
weiterhin soll eine zeit nebenbei ablaufen und nach einer gewissen zeit soll immer ein buchstabe hinzugefügt werden .
und ich hab jetzt das problem , dass ich nicht weiss wie ich nach gewisser zeit die einzelnen buchstaben in mein label krieg .
das muss irgendwie mit randomize gehen weil die reihenfolge der buchstaben nicht festgelegt werden soll .... aber mir fehlt so ein wenig der ansatz ...


Beispiel :

edit1.text= 'wort'

label nach 5 sekunden = --r-
label nach 10 sekunden = w-r-
label nach 15 sekunden = w-rt
Karlson
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 2088



BeitragVerfasst: Mi 12.01.05 18:00 
Speichere die einzelnen Buchstaben des Worts doch in einem Array. z.B. so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
const
 dasWort : String = 'Delphi';
var
 Ch : Array [1..6of String;

procedure Create;
var i : integer;
begin
 for i := 1 to lenth(daswort) do
  begin
   ch[i] := Daswort[i];
  end;
end;

procedure Random;
var za : integer;
begin
 za := Random(lenth(daswort)) - 1;


weiter komm ich nicht, weil ich jetzt weg muss, aber da ist dein ansatz ;)
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Mi 12.01.05 18:03 
ui.. ich verstehe was du meinst. als erstes:
randomize; ist ein befehl der dafür sorgt dass die folgenden aufrufe von random auch wirklich dem zufall entsprechen.
random(range:integer) ist eine funktion die dir einen zufälligen wert zwischen 0 und range-1 zurückliefert. (oder wenn ohne parameter benutzt einen wert zwischen 0 und 1 (real).
du könntest dein wort in einer String variable auslagern und dann per
ausblenden Delphi-Quelltext
1:
2:
i:=random(wortlänge+1);
MyWort[i]
auf den buchstaben zugreifen :gruebel: das ist recht kompliziert... da du auf einzelne buchstaben des edits nicht schreiben, sondern nur lesen kannst (Edit.Text[3]:='x'; klappt nicht...)
jo! mit einem array of string gehts ^^ (vll bietet sich ein dynamischer array an, da man seine länge verändern kann, je nach wort...)
schnapp dir 2 arrays, den ersten mit dem entsprechenden wort, den 2. mit lauter -
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
const   
 dasWort : String = 'Delphi';
var   
 Wort,Striche : Array [1..6of String;   

procedure Create;   
var i : integer;   
begin   
 for i := 1 to lenth(daswort) do   
  begin   
   Wort[i] := Daswort[i];
   Striche[i]:='-';
  end;   
end;

als nächstes schreibst du den ganzen Striche array in edit1.Text:
ausblenden Delphi-Quelltext
1:
2:
Edit1.Text:='';
for i:=0 to length(dasWort) do Edit1.Text:=Edit1.Text+Striche[i];

wenn dann einige sekunden vergangen sind, wählst du eine zufällige zahl aus (i) und:
ausblenden Delphi-Quelltext
1:
Striche[i]:=Wort[i];					

als nächstes nochmal den ganzen striche array in das edit übertragen (siehe oben). du musst natürlich überprüfen, ob der Buchstabe schoneinmal freigegeben wurde, speichere alle i werte in ein dynamisches array und überprüfe alle, bevor du die zahl verwendest. falls sie schoneinmal benutzt wurde, einfach nochmal random benutzen...

(dabei bin ich die ganze zeit vom EDIT als ausgamefeld mit strichen ausgegangen... einfach das edit1.text mit label1.caption (oder wie auch immer) ersetzen ^^)

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Hack Gott
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 409

Windows Vista
Delphi 2005 Personal, Delphi 7
BeitragVerfasst: Mi 26.01.05 20:47 
Also wenn du es ohne Zuffalsgenerator schreiben willst würde ich in einem Timer schreiben:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var wortlaenge : integer;
begin
  if wortlaenge = 0 then label1.caption := label1.captio + 'w'
  else if wortlaenge = 1 then label1.caption := label1.caption + 'o'
  else if wortlaenge = 2 then label1.caption := label1.caption + 'r'
  else if wortlaenge = 3 then label1.caption := label1.caption + 't'
  else if wortlaenge = 4 then ShowMessage('Sie haben das Wort leider nicht in erraten es war ' + label1.caption + '.')
  else ShowMessage('Es ist ein Unbekannter Fehler aufgetreten.');
  wortlaenge := wortlaenge + 1{Zählt einen Buchstaben hinzu}
end;


Damit du dann natülich auch den Timer Stopst wenn das Wort richtig ist gibst du am besten das hier in einem neuen schneller ausgeführten timer ein.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
begin
if edit1text = 'wort' then
begin
{Das hier führt er aus wenn man das Passwort richtig eingegeben hat}
timer1.enabled := false; //timer1 mit wird gestoppt
ShowMessage('Gratulation!');
end;
end;

_________________
"Je mehr Käse, desto mehr Löcher; Je mehr Löcher, desto weniger Käse. Daraus folgt: Je mehr Käse desto weniger Käse!"