![]() |
Fehlersuche ;D
Hallo, also es geht um das Spiel Hangman.
Man sieht 3 Editfeld. In das Ertse also ERatewort tippt der erste Spieler ein Wort ein das so erscheint *****. Der 2 Spieler muss in das 2 Editfeld einzelne Buchstaben eintippen. Im 3 editfeld stehen dann Fragezeichen (genauso viele Fragezeichen Wie Buchstaben des Wortes von Spieler 1). Wird ein Buchstabe erraten so wird aus dem Fragezeichen der Richtige Buchstabe. Das Problem ist jedoch dass das nicht klappt. tippe ich ddddd im Ratewort ein und in das 2. Editfeld d dann kommt im 3. editfeld nicht die Lösung : ddddd. Wahrscheinlich liegt der Fehler vor meiner Nase aber ich finde ihn nicht bitte helft mir hier unten mein quelltext, danke im Voraus
Delphi-Quellcode:
unit UHaupt;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Menus, URaetsel; type TForm1 = class(TForm) LRatewort: TLabel; MainMenu1: TMainMenu; ERatewort: TEdit; LBuchstabe: TLabel; EBuchstabe: TEdit; BSetzen: TButton; ELoesungswort: TEdit; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure BSetzenClick(Sender: TObject); procedure ERatewortExit(Sender: TObject); procedure ERatewortEnter(Sender: TObject); procedure EBuchstabeEnter(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; Raetsel: TRaetsel; swort:string; i:integer; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Raetsel:= TRaetsel.Create; i:=0; end; procedure TForm1.FormDestroy(Sender: TObject); begin Raetsel.free; end; procedure TForm1.BSetzenClick(Sender: TObject); begin Raetsel.BuchstabeSenden(EBuchstabe.Text); end; procedure TForm1.ERatewortExit(Sender: TObject); var leange,i:integer; begin swort:=eRatewort.text; raetsel.Init(swort); Ebuchstabe.setfocus; if Raetsel.pruefen=true then begin showmessage('falsch'); ERatewort.setfocus; Eratewort.clear; end else eloesungswort.text:=Raetsel.Zielwort; end; procedure TForm1.ERatewortEnter(Sender: TObject); begin ERatewort.Text:=''; eLoesungswort.text:=''; EBuchstabe.text:=''; end; procedure TForm1.EBuchstabeEnter(Sender: TObject); begin ebuchstabe.Clear; end; end.
Delphi-Quellcode:
unit URaetsel;
interface type TRaetsel=class (Tobject) private sWort, sZielwort:string; byVersuche:byte; procedure ZielWortSetzen; public constructor create; procedure Init (sSuchwort:string); function Zielwort:string; procedure BuchstabeSenden(sBuchstabe:string); function Rateversuche:byte; function pruefen:boolean; end; implementation constructor TRaetsel.create; begin end; procedure TRaetsel.ZielWortSetzen; var i,laenge:integer; begin laenge:=length(sWort); For i:=1 To laenge do sZielwort:=sZielwort+'?'; end; procedure TRaetsel.Init (sSuchwort:string); begin swort:=sSuchwort; sZielwort:=''; byversuche:=0; end; function TRaetsel.Zielwort:string; begin Zielwortsetzen; Zielwort:=sZielwort; end; procedure TRaetsel.BuchstabeSenden(sBuchstabe:string); var iStelle:integer; busta:string; begin byVersuche:=byVersuche+1; If sBuchstabe=sWort then sZielwort:=sWort else begin For iStelle:=1 to length(swort) do begin busta:=copy(sWort,iStelle,1); If busta=sBuchstabe then begin delete(sZielwort,iStelle,1); insert(sBuchstabe,sZielwort,iStelle); end; end; end; end; function TRaetsel.Rateversuche:byte; begin Rateversuche:=byVersuche; end; function TRaetsel.pruefen:boolean; var iStelle:integer; busta:string; begin pruefen:=false; for iStelle:=1 to length(swort) do begin busta:=copy(sWort,iStelle,1); If(busta<'A') or (busta >'Z') then pruefen:=true; end; end; end. |
AW: Fehlersuche ;D
Zitat:
Delphi-Quellcode:
Von solchen Dingen solltst Du Dich schleunigst lösen!
if Raetsel.pruefen=true then begin
Delphi-Quellcode:
if Raetsel.pruefen then begin
Delphi-Quellcode:
Abgeseh von der etwas eigenwilligen Formatierung, Ich benutze in solchen Fällen meist so etwas:
For iStelle:=1 to length(swort) do begin
busta:=copy(sWort,iStelle,1); If busta=sBuchstabe then begin delete(sZielwort,iStelle,1); insert(sBuchstabe,sZielwort,iStelle); end; end; end;
Delphi-Quellcode:
Daß beide Worte gleich lang sind, setze ich mal stillschweigend vorraus.
for i:=1 to length(ZielWort) do
if Suchwort[i]=Bstb then Zielwort[i]:=Bstb; Gruß K-H |
AW: Fehlersuche ;D
es passiert stattdessen gar nichts
|
AW: Fehlersuche ;D
aus einem anderen Hangman:
Delphi-Quellcode:
es sollte der prinzipielle Ablauf deutlich werden.
procedure TMain.BBPruefenClick(Sender: TObject);
var i: Byte; gefunden: Boolean; begin gefunden:=false; // Merker ob ein Buchstabe gefunden wurde if length(EdBuchstabe.Text) > 1 then ShowMessage('Bitte nur einen Buchstaben eingeben') else begin // durchlaufe den String von vorn bis hinten for i:=1 to length(RateWort) do // wenn der Buchstabe gefunden wurde if EdBuchstabe.Text[1] = RateWort[i] then begin hiddenRateWort[i]:=edBuchstabe.text[1]; // ersetze den Buchstaben gefunden:=true; // setze Merker auf true end; lbRateWort.Caption:=hiddenRateWort; // update der Anzeige // wenn kein Buchstabe gefunden wurde if not gefunden then begin inc(failureCounter); // erhöhe Fehlerzähler um 1 label5.Caption:=IntToStr(failureCounter); // update der Fehlversuchanzeige ImageList1.GetBitmap(failureCounter-1,imgBild.Picture.Bitmap) // update des Galgenmännchens end; edBuchstabe.Text:=''; // lösche den Buchstabe aus dem Buchstabenfeld edBuchstabe.SetFocus; // setze den Focus auf das Buchstabenfeld end; end; Grüße Klaus |
AW: Fehlersuche ;D
Bitte editiere deinen ersten Beitrag und gebe ihm einen aussagekräftigen Titel.
|
AW: Fehlersuche ;D
|
AW: Fehlersuche ;D
hier sieht man was eine vernüftige Variablenbenennung wert ist:
Delphi-Quellcode:
Und der Gebrauch des Debuggers {F7]/[F8] hätte das wahrscheinlichauch gleich aufgedeckt.
If sBuchstabe=sWort then sZielwort:=sWort else begin
Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:25 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