Hangman Projekt für Info: Fragen über Fragen
Hallo.....
Bin noch neu in der Welt von Delphi und Delphi Praxis. :hi: Ich muss für meinen Infokurs ein Hangman programmieren. Bin bis jetzt auch ganz gut zurechtgekommen, allerdings hab ich jetzt ein Problem: Ich hab ne Funktion geschrieben,die prüft, ob der eingegebene Buchstabe in dem gesuchten Wort enthalten ist. Wenn er vorhanden ist, schreibt er in ein Label "ok", ansonsten "nö" (wird im fertigen Spiel natürlich nicht mehr so sein, dass dann da irgendwas reingeschrieben wird, is nur für mich zur kontrolle gedacht).Wenn ich jetzt das programm laufen lasse, und nen Buchstaben eingebe, steht in dem Label immer abwechseld "nö" und "ok", also ich mein wenn ich zum beispiel "b" eingebe und das gesuchte Wort "blöd" ist, springt im der Text im Label ständig von "nö" zu "ok" und wieder zu "nö" und immer so weiter. Ich füg mal den Quellcode von meiner Funktion ein.
Delphi-Quellcode:
und von der Überprüfung:
function BuchstabeEnthalten (Buchstabe,RateWort:String): boolean;
var i,m: integer; Enthalten: boolean; begin Enthalten:=false; m:=WortLaenge(RateWort); for i:=1 to m do if RateWort[i]=Buchstabe then Enthalten:= true; BuchstabeEnthalten:= Enthalten; end;
Delphi-Quellcode:
ich hoffe, dass ihr mir hier irgendwie weiterhelfen könnt.
procedure TForm1.Timer1Timer(Sender: TObject);
var b:String; begin B:=Edit1.Text; If Edit1.Text <> '' then if BuchstabeEnthalten(B,RateWort) then Label2.Caption:='ok' else Label2.Caption:='nö' else Label2.Caption:='bitte was eingeben'; end; Vielen dank schonmal mfg blub |
Re: Hangman Projekt für Info: Fragen über Fragen
hallo blub,
willkommen in der DP, schau dir mal deine If then else konstruktion an raik |
Re: Hangman Projekt für Info: Fragen über Fragen
Hai Blub *gg*,
hier mal ein Lösungsansatz von mir ;-)
Delphi-Quellcode:
var
ratewort : String; procedure TForm1.FormCreate(Sender: TObject); begin Edit1.Clear; Edit1.MaxLength := 1; ratewort := 'blubb'; Timer1.Interval := 2000; Timer1.Enabled := False; end; procedure TForm1.Edit1Change(Sender: TObject); begin If (Edit1.Text <> '') then begin if (Pos (Edit1.Text,ratewort) > 0) then begin Label1.Caption:='ok' end else begin Label1.Caption:='nö' end; end; Edit1.SelStart := 0; Edit1.SelLength := 1; Timer1.Enabled := True; end; procedure TForm1.Timer1Timer(Sender: TObject); begin Label1.Caption:='bitte was eingeben'; Timer1.Enabled := False; end; |
Re: Hangman Projekt für Info: Fragen über Fragen
Ich hab letztens auch Hangman programmiert:
http://tim.ilei.de/hangman.zip Wenn du willst kann ich dir auch mal den Code schicken, der ist etwas zu lang um den zu posten |
Re: Hangman Projekt für Info: Fragen über Fragen
ahh danke, für die schnellen antworten. Ich werde mir dann mal meine If then else Konstruktion angucken :wink:
@demo13 danke, ich werd erstma versuchen meinen Quellcode so hinzubiegen, dass es funktioniert. Falls ich das nicht schaffen sollte werde ich mich an dich wenden :-D |
Re: Hangman Projekt für Info: Fragen über Fragen
Endlich mal einer, der Eigeninitiative zeigt. :party:
|
Re: Hangman Projekt für Info: Fragen über Fragen
Zitat:
nochmal @ demo13: Hab mir mal deine Hangman Version gezogen. Ich würde noch eine kleine Verbesserung vorschlagen: Du hast in deiner Liste Wörter wie "Kühlregal", allerdings keine Buttons wie "ü,ä, oder ö" :shock: wie soll ich denn da den Highscore knacken ?! :-D |
Re: Hangman Projekt für Info: Fragen über Fragen
ja hast recht. die wortliste hab ich auch nur so als beispiel erstellt man sollte sich eigentlich seine eigenen "schwierigen" wörter überlegen.
|
Re: Hangman Projekt für Info: Fragen über Fragen
soooo
irgendwie check ichs net! Ich hab mir die If then Else Konstruktion zwar nochma angeguckt, allerdings find ich meinen Fehler net :evil: wenn ich das so mache
Delphi-Quellcode:
gehts trotzdem net so wie ich das haben will. Gib mir doch mal bitte jemand einen kleinen Hinweis, wo in der If then Else kombi was net stimmt :-D
If Edit1.Text <> '' then
if BuchstabeEnthalten(B,RateWort)=true then Label2.Caption:='ok' else Label2.Caption:='nö' else Label2.Caption:='bitte was eingeben'; end; THX |
Re: Hangman Projekt für Info: Fragen über Fragen
Zitat:
|
Re: Hangman Projekt für Info: Fragen über Fragen
Zitat:
|
Re: Hangman Projekt für Info: Fragen über Fragen
Zitat:
|
Re: Hangman Projekt für Info: Fragen über Fragen
hab ich erst probiert, hat aber nicht so gefunzt, wies sollte. Ein Mitschüler hat mir dann empfohlen das ganze mit nem Timer zu realisieren, das hat dann besser geklappt
|
Re: Hangman Projekt für Info: Fragen über Fragen
Tachchen Bulb!!!
Ich glaub' du hast bloß ein Semikolon vergessen. Und das End am Ende ist sinnlos, da du nie begin benutzt hast...
Delphi-Quellcode:
Probier's mal aus!!!
If Edit1.Text <> '' then
if BuchstabeEnthalten(B,RateWort)=true then Label2.Caption:='ok' else Label2.Caption:='nö'; //<-------- SEMIKOLON!!! else Label2.Caption:='bitte was eingeben'; // end; ENTFERNEN!!! PS: Dein Problem kommt mir bekannt vor! :mrgreen: Bisste auf'm Pius? CyK |
Re: Hangman Projekt für Info: Fragen über Fragen
Hi!
Also, CyK, erstmal willkommen in der DP. Dass das Semikolon nicht da ist, ist vollkommen korrekt, da vor else kein ; stehen darf. Das end kann ich jetzt nicht beurteilen, weil die Stelle zu sehr aus dem Zusammenhang gerissen ist. Ciao fkerber |
Re: Hangman Projekt für Info: Fragen über Fragen
moin,
das end gehört glaube ich zur begin-end Klammer der procedure. |
Re: Hangman Projekt für Info: Fragen über Fragen
das end; is schon richtig an der stelle ^^. gehört zu nem Begin, vor der if bedingung. Müsste oben irgendwo zu sehen sein.
@CyK: nee bin nich aufm Pius :-D |
Re: Hangman Projekt für Info: Fragen über Fragen
Zitat:
Das stimmt zwar normalerweise, aber das zweite else bezieht sich auf das erste if, hat also damit gar nichts zu tun. Die innere If-Abfrage wird durch dieses Semikolon abgeschlossen... :? Ich bin mir da zwar ziemlich sicher, aber wenn's falsch ist, korrigier' mich... |
Re: Hangman Projekt für Info: Fragen über Fragen
nee, semikolon muss da nich, sonst checkter das mit dem else net ^^
trotzdem bin ich noch nicht weiter :cry: |
Re: Hangman Projekt für Info: Fragen über Fragen
Probiert das mal aus, vllt hilfts :gruebel:
Delphi-Quellcode:
If Edit1.Text <> '' then
begin if BuchstabeEnthalten(B,RateWort)=true then Label2.Caption:='ok' else Label2.Caption:='nö' end; |
Re: Hangman Projekt für Info: Fragen über Fragen
Zitat:
nope bringt auch nichts..... es ist zum verzweifeln :wall: |
Re: Hangman Projekt für Info: Fragen über Fragen
Delphi-Quellcode:
Mach das mal besser so:
function BuchstabeEnthalten (Buchstabe,RateWort:String): boolean;
var i,m: integer; Enthalten: boolean; begin Enthalten:=false; m:=WortLaenge(RateWort); for i:=1 to m do if RateWort[i]=Buchstabe then Enthalten:= true; BuchstabeEnthalten:= Enthalten; end;
Delphi-Quellcode:
Sch'weiß zwar nicht, obs hilft, aber trotzdem :wink:
function BuchstabeEnthalten (Buchstabe,RateWort:String): boolean;
var i,m: integer; begin m:=length(RateWort); for i:=0 to m-1 do if RateWort[i]=Buchstabe then begin result := true; break; end else result := false; end; |
Re: Hangman Projekt für Info: Fragen über Fragen
Hallo Blub!
Ich hab' selber mal Hangman programmiert. Aber leider nur in PHP. Wenn dich der Code trotzdem interessiert, schick mir 'ne PN. Anzusehen auf: Meister's Hangman Ich kann's dir auch kurz auf Delphi umschreiben, wenn du willst. |
Re: Hangman Projekt für Info: Fragen über Fragen
Davon hat er dann aber nicht so sehr viel.
Mag sein, dass er dann den Code hat, aber wenn er aufgefordert wird, ihn der Klasse zu erklären, auch ein Problem. |
Re: Hangman Projekt für Info: Fragen über Fragen
Warum was neu schreiben, was es doch schon frei Haus gibt???
Mein Vorschlag:
Delphi-Quellcode:
Buchstabe:=edit1.text;
Wort:=edit2.text; if pos(Buchstabe,Wort)>0 then label1.caption:='drin' else label1.caption:='draussen'; Zitat:
|
Re: Hangman Projekt für Info: Fragen über Fragen
moin,
@Ultimator Zitat:
|
Re: Hangman Projekt für Info: Fragen über Fragen
Hauerha. Da hast du Recht. An "nullter" Stelle steht denk ich die Länge drin, oder?
Also könnte man doch auch
Delphi-Quellcode:
machen, oder nicht?
m:=strtoint(Ratewort[0]);
|
Re: Hangman Projekt für Info: Fragen über Fragen
ich meine sowas mal gehört zu haben, habs aber nie ausprobiert :wink:
|
Re: Hangman Projekt für Info: Fragen über Fragen
Warum probiert ihr denn jeden Buchstaben aus? einamam pos anwenden und wenn ein ergebniss zurückkommt (>0) ist der Buchstabe drin.
|
Re: Hangman Projekt für Info: Fragen über Fragen
warum einfach wenns auch kompliziert geht :mrgreen:
|
Re: Hangman Projekt für Info: Fragen über Fragen
Zitat:
bitte ne kleine erklärung ^^ |
Re: Hangman Projekt für Info: Fragen über Fragen
Zitat:
|
Re: Hangman Projekt für Info: Fragen über Fragen
ahh ja.... gut. Habsch vorher nich gesehn :mrgreen:
|
Re: Hangman Projekt für Info: Fragen über Fragen
sooo.....
Hab mich mal durchgerungen und mich mal wieder an mein Hangman Projekt gesetzt. Hab mal die Toxman'sche Variante ausprobiert, allerdings mit dem gleichen Problem, wie mit meiner if-then-else Konstruktion:Das Ausgabelabel springt ständig zwischen "drin" und "draußen" hin und her! Ich schätze mal, das irgendwas mit dem Timer noch nicht so stimmt. |
Re: Hangman Projekt für Info: Fragen über Fragen
Liste der Anhänge anzeigen (Anzahl: 1)
ich hab(ohne das ich hiervon wusste) zufällig ein billiges hangman programmiert
es ist nichts grafisches einfach nur schlicht und einfach |
Re: Hangman Projekt für Info: Fragen über Fragen
Was war das denn? Einmal reicht doch.
Kleine Frage: Für was hast du einen Timer? Ich würde doch dagen, du checkst einmal nach dem der User einen Button gedrückt hat ob der Buchstabe vorhanden ist oder nicht. Wenn du in dem Timer den Buchstaben aus dem edit ziehst und dann vergleichst, fänd ich dass als User nicht so gut, denn vielleicht überleg ich's mir nochmal und will einen anderen Buchstaben eingeben und nun ist's zu spät. Ein Timer ist nur dann sinnvoll, wenn der Benutzer das Spiel auf Zeit spielen soll. Zeig doch mal deinen Timer, ist wahrscheinlich nur ein kleiner Fehler drin. |
Re: Hangman Projekt für Info: Fragen über Fragen
Ich find meine Idee mit dem Timer garnet schlecht :D Der User muss sich halt vorher überlegen, ob er den Buchstaben eingibt, den er in dem gesuchten Wort vermutet. Mich als User würde es glaub ich mehr abstressen, wenn ich jedesmal nen Buton drücken müsste, um den Buchstaben zu checken. Ich geh immer von extrem faulen usern aus *g*
|
Re: Hangman Projekt für Info: Fragen über Fragen
HILFE!!!!
Mein Hangman muss bis nächsten Dienstag fertig sein!! Aber wie das eigentlich immer so ist fängt der Schüler von heute ca. eine Woche vorher an sich gedanken zu machen, wie er denn sein Projekt fertigstellen soll!!!:wall: Auf jedenfall hab ich mich grad wieder hingesetzt und meinen Quelltext durchgeschaut, und der sieht für mich auch irgendwie logisch aus! Allerdings funzter net :evil: Hier soweit mein Code, bei dem ich igendwo Fehler vermute:
Delphi-Quellcode:
und
//Funktion zum prüfen, ob der Buchstabe enthalten ist.
function BuchstabeEnthalten (Buchstabe,RateWort:String): boolean; var i,n: integer; Enthalten: boolean; begin Enthalten:=false; n:=WortLaenge(RateWort); for i:=1 to n do if RateWort[i]=Buchstabe then Enthalten:= true else Enthalten:=false; BuchstabeEnthalten:= Enthalten; end;
Delphi-Quellcode:
Ich hoffe echt, dass ihr mir hierbei weiterhelfen könnt.
procedure TForm1.Timer1Timer(Sender: TObject);
var B:String; begin B:=Edit1.Text; If Edit1.Text <> '' then if BuchstabeEnthalten(B,RateWort)=true then Label2.Caption:='ok' else Label2.Caption:='nö' else Label2.Caption:='bitte was eingeben'; end; Außerdem müsst ich noch wissen, ob bzw. wie ich Delphi sagen kann, dass der bei einer Canvas jedesmal einen Strich mehr macht, wenn ein Fehler gemacht wurde, bzw wie ich Delphi sagen kann, dass er jedesmal ein neues Bild lädt, wenn ein Fehler gamcht wurde. Wobei mir das mit den Bildern irgendwie lieber wär :-D VIELEN DANK FÜR EURE HILFE!!! |
Re: Hangman Projekt für Info: Fragen über Fragen
Hi,
lass mal den Else-Teil weg, sonst wird nur zurückgegeben, ob der LETZTE Buchstabe dem geratenen entspricht.
Delphi-Quellcode:
PS: Zum Prüfen, wo genau Dein Fehler auftritt, debugge an der entsprechenden Stelle via Haltepunkt (F5) und schrittweiser Ausführung des Codes (F7,F8)
//Funktion zum prüfen, ob der Buchstabe enthalten ist.
function BuchstabeEnthalten (Buchstabe,RateWort:String): boolean; var i,n: integer; Enthalten: boolean; begin Enthalten:=false; n:=WortLaenge(RateWort); for i:=1 to n do if RateWort[i]=Buchstabe then Enthalten:= true // Else-Teil weglassen!! // else // Enthalten:=false; BuchstabeEnthalten:= Enthalten; end; Gruß Stephan |
Re: Hangman Projekt für Info: Fragen über Fragen
äähm, Blub? Warum nimmst du nicht einfach pos??? Wurde doch schon früher vorgeschlagen und ist genau das, was du da grad so schön umschreiben willst.
Delphi-Quellcode:
Fertig. :gruebel:
function BuchstabeEnthalten (Buchstabe,RateWort:String): boolean;
begin result:=false; if pos(Buchstabe, RateWort)>0 then result := true; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz