Karlson - Mi 12.01.05 18:00
Speichere die einzelnen Buchstaben des Worts doch in einem Array. z.B. so:
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..6] of 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 - 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
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 -
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..6] of 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:
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:
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 - Mi 26.01.05 20:47
Also wenn du es ohne Zuffalsgenerator schreiben willst würde ich in einem Timer schreiben:
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; 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.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| begin if edit1text = 'wort' then begin
timer1.enabled := false; ShowMessage('Gratulation!'); end; end; |