![]() |
Hangman Problem
Hallo,
ich bin grade dabei ein kleines Hangman Spiel zu programmieren...Leider komme ich im Moment kein Stückchen weiter und zwar beim Buchstaben vergleichen. Eigentlich kein Problem aber irgendwie stresst er noch rum. das zu erratene Wort ist "Testwort" Ich Gebe über ein Edit Feld den Buchstaben ein. Klappt soweit auch bis ich das komplette wort erraten habe, nur wenn das wort erraten wurde, Steht das Wort da wohl schon aber dahinter immer noch 4 "_". Als ob das Wort nocht nicht vollständig ist. Hoffe Ihr versteht wie ich das meine. Hier mal mein Code
Delphi-Quellcode:
Wäre net schlecht wenn mir jemand helfen könnte! Danke!
unit THangMan;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Label1: TLabel; Label2: TLabel; Button2: TButton; Label3: TLabel; procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; ratewort,buchstabe:STRING; i:integer; result:boolean; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var hilfwort,ausgabe,z:String; var k:integer; begin buchstabe := Edit1.Text; hilfwort := label2.caption; Label3.Caption := inttostr(length(hilfwort)); for i := 1 to length(hilfwort) do begin if ratewort[i] = buchstabe then begin hilfwort[i] := ratewort[i]; Label2.Caption := hilfwort; end//Ende if buchstabe überprüfen else begin ShowMessage('Daneben'); end;// ende else end;//Ende forschlife i end; //Spiel Start procedure TForm1.Button2Click(Sender: TObject); begin ratewort := 'ja'; Label1.Caption := ratewort; for i:= 1 to length (ratewort) do Label2.Caption:= Label2.caption + '_ '; end; //Ende Spielstart end. |
Re: Hangman Problem
Hallo ChristianR,
Willkommen in der DP :party:
Delphi-Quellcode:
Du löschst hier aus Label2.Caption nicht die alten Zeichen, bevor du die neuen hinten anhängst.
procedure TForm1.Button2Click(Sender: TObject);
begin ratewort := 'ja'; Label1.Caption := ratewort; for i:= 1 to length (ratewort) do Label2.Caption:= Label2.caption + '_ '; end; Übrigens würde ich dir empfehlen, in deinem Code mal aufzuräumen: 1. Variablen und Komponenten aussagekräftige Namen geben (Label2 ist nicht aussagekräftig, besser wäre z.B. labelAnzeige) 2. Da sind einige Deklarationen, die gar nicht benutzt werden. 3. Mache deinen Code standardkonform: Deine Unit hat das Präfix T, das normalerweise für Klassendeklarationen benutzt wird (wie z.B. in TForm). Außerdem hast du eine globale Variable namens Result, die erstens anscheinend nicht genutzt wird und zweitens anders benannt werden sollte, da der Rückgabewert einer Funktion schon Result heißt. 4. Rücke deinen Code ordentlich ein Wenn du diese Punkte beachtest, erleichterst du dir und auch anderen später die Fehlersuche. |
Re: Hangman Problem
Durch das Leerzeichen hinter dem Unterstrich wird dein "hilfswort" doppelt so lang wie das "ratewort".
Das könnte später in Button1Click zu einer Index- oder Schutzverletzung führen.
Delphi-Quellcode:
hilfswort := '';
for i := 1 to length (ratewort) do hilfswort := hilfswort + '_'; Label2.Caption := hilfswort; |
Re: Hangman Problem
Auf
![]() |
Re: Hangman Problem
Zitat:
|
Re: Hangman Problem
Setz doch einfach die Leerzeichen wieder dazwischen und werte später nur die Zeichen mit einer ungeraden Position aus.
|
Re: Hangman Problem
Zitat:
Delphi-Quellcode:
Ich habe das so probiert wie du es vorgeschlagen hast. Nur funktioniert es nicht ganz. Jetzt findet er nur noch den 1. buchstaben und das andere bleibt unbeachtet! Bin mit der Lösung bei mir völlig ab vom weg oder bin ich kurz davor, dass es funktionert?
procedure TForm1.Button1Click(Sender: TObject);
var hilfwort:String; var k:integer; begin buchstabe := Edit1.Text; hilfwort := label2.caption; Label3.Caption := inttostr(length(hilfwort)); for k := 1 to length(hilfwort) do begin if odd(k) then begin if ratewort[k] = buchstabe then begin hilfwort[k] := ratewort[k]; Label2.Caption := hilfwort; end else begin ShowMessage('Daneben'); end; end; end; end; |
Re: Hangman Problem
Du vergleichst ein einzelnes Zeichen mit einem String (buchstabe). Ist das so beabsichtigt?
|
Re: Hangman Problem
Wenn ich in dem Edit Feld nur 1 Buchstaben, z.B. "a" eingebe, dann ist der String doch von Länge 1 und dann dürfte das doch gar kein problem sein oder?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:19 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