Hallo,
ich versuche mich an einem Hangman Spiel.
Das Wort habe ich in ein Array gespeichert (wort2) und nun will ich per Klick auf einen Button mit jeweils einem Buchstaben nach eben diesem im Lösungswort suchen und diesen Buchstaben dann in ein zweites Array (wort2) schreiben, bei dem ich zuvor alle Stellen mit '_'´s ausgefüllt habe, sodass sie nicht angezeigt werden. Ich habe mir gedacht, am besten schreibe ich dazu eine Prozedur, damit ich das Abfrageskript nicht für jeden Button neu schreiben muss. Dann brauche ich nur bei Klick auf den Button die Prozedur aufrufen und den entsprechenden Buchstaben als Parameter übergeben. Danach wird in der Prozedur überprüft, ob der Buchstabe in dem Wort vorkommt, wenn nicht, wird eine Variable inkrementiert. Hat die Variable einen bestimmten Wert erreicht, sollen Hangman-Bilder angezeigt werden (Visible := True). Diese habe ich unter den Namen f1, f2, ... f10 im Programm integriert. Bei der 'suchen'-Prozedur kommt jedoch die Fehlermeldung >>Undefinierter Bezeichner 'f1'<<. Woran liegt das? Kann ich innerhalb der Prozedur nicht auf globale Objekte zugreifen? In anderen Prozeduren geht das (Neustart-Button).
Ich habe es schon mal mit einem EditFeld anstatt dieser Buttons programmiert und da funktioniert es super, ist nur umständlicher, da man die Buchstaben per Hand eingeben muss und nicht per Buttonklick, es müsste also an der Prozedur liegen.
Ich kenne mich in Delphi leider nicht sonderlich gut aus (brauche es für die Schule), also bitte erklärt es mir Idiotensicher ;O)
mein Script:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33:
| type
end; procedure suchen(b1, b2 :String); forward; var
procedure suchen(b1, b2 :String); begin v := 0; wort.Caption := '';
for i:=0 to l-1 do begin if (wort1[i]=b1) or (wort1[i]=b2) then wort2[i] := wort1[i] else v := v+1; wort.Caption := wort.Caption + wort2[i] + ' '; end;
if (v = l) then f := f+1; if (f = 1) then f1.Visible := True;
end;
procedure TForm1.baClick(Sender: TObject); begin suchen('a', 'A'); ba.Visible := False; end; |
PS: Habe ich die Prozedur überhaupt richtig deklariert?
---------------------- Edit ---------------------
Wenn ich die Befehle aus der 'suchen'-Prozedur direkt in die 'b...Click'-Prozeduren schreibe (copy+paste) funktioniert es prima, es muss also an der 'suchen'-Prozedur liegen. Bitte helft mir dabei, ich vertehe das einfach nicht!
---------------------- Edit 2 -------------------
Ich habe gerade herausgefunden, dass die Prozedur im Prinzip funktioniert. Ich habe alles, das direkt mit den Objekt(nam)en zusammenhängt ausgeklammert ('wort' und 'f1', 'f2', ... 'f10') und es so laufen lassen. D.h. nur die IF-Abfragen. Dabei stellte sich heraus, dass die Buchstaben richtig ins zweite Array geschrieben wurden. Damit funktioniert nur die Ausgabe nicht, d.h. die Befehle, die direkt mit den Objekten zu tun haben und nicht nur mit Variablen arbeiten. (entschuldigt diese womöglich unverständliche Ausdrucksweise, aber ich kann es nicht besser <.<)