Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Hangman Projekt für Info: Fragen über Fragen (https://www.delphipraxis.net/24805-hangman-projekt-fuer-info-fragen-ueber-fragen.html)

Blub 26. Jun 2004 18:25


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:
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;
und von der Überprüfung:

Delphi-Quellcode:
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;
ich hoffe, dass ihr mir hier irgendwie weiterhelfen könnt.

Vielen dank schonmal

mfg blub

kiar 26. Jun 2004 18:38

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

Sharky 26. Jun 2004 19:07

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;

demo13 27. Jun 2004 09:11

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

Blub 27. Jun 2004 13:36

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

Ultimator 27. Jun 2004 13:41

Re: Hangman Projekt für Info: Fragen über Fragen
 
Endlich mal einer, der Eigeninitiative zeigt. :party:

Blub 27. Jun 2004 15:10

Re: Hangman Projekt für Info: Fragen über Fragen
 
Zitat:

Zitat von Ultimator
Endlich mal einer, der Eigeninitiative zeigt. :party:

:-D Ich will ja auch verstehen, was ich mache. Was bringts mir, wenn ich mir nen Quellcode zieh, von dem ich nur die hälfte versteh und dann mein Programm vorstellen muss? Da schieß ich mir selbst ins Bein :roll:

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

demo13 27. Jun 2004 20:43

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.

Blub 28. Jun 2004 14:03

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:
If Edit1.Text <> '' then
 if BuchstabeEnthalten(B,RateWort)=true then
 Label2.Caption:='ok' else
 Label2.Caption:='nö'
else
Label2.Caption:='bitte was eingeben';
end;
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
THX

Nicolai1234 28. Jun 2004 14:08

Re: Hangman Projekt für Info: Fragen über Fragen
 
Zitat:

Zitat von Blub
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:
If Edit1.Text <> '' then
 if BuchstabeEnthalten(B,RateWort)=true then
 Label2.Caption:='ok' else
 Label2.Caption:='nö'
else
Label2.Caption:='bitte was eingeben';
end;
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
THX

Ich denke auch, dass alles richtig ist!

Blub 28. Jun 2004 14:09

Re: Hangman Projekt für Info: Fragen über Fragen
 
Zitat:

Zitat von Nicolai1605

Ich denke auch, dass alles richtig ist!

hmm schön ^^ Trotzdem hab ich immernoch das gleiche problem :wall:

Nicolai1234 28. Jun 2004 14:14

Re: Hangman Projekt für Info: Fragen über Fragen
 
Zitat:

Zitat von Blub
und von der Überprüfung:

Delphi-Quellcode:
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;
ich hoffe, dass ihr mir hier irgendwie weiterhelfen könnt.

Vielen dank schonmal

mfg blub

Wieso steht der Teil denn in einem Timer? Du könntest doch die Abfrage, ob ein Buchstabe vohanden ist, bei dem Edit1 bei OnKeyPress reinschreiben! Das wäre doch sinnvoller, oder?

Blub 28. Jun 2004 14:21

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

CyK 28. Jun 2004 19:02

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:
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!!!
Probier's mal aus!!!

PS: Dein Problem kommt mir bekannt vor! :mrgreen:
Bisste auf'm Pius?

CyK

fkerber 28. Jun 2004 19:21

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

xineohp 28. Jun 2004 19:25

Re: Hangman Projekt für Info: Fragen über Fragen
 
moin,
das end gehört glaube ich zur begin-end Klammer der procedure.

Blub 28. Jun 2004 22:26

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

CyK 29. Jun 2004 10:07

Re: Hangman Projekt für Info: Fragen über Fragen
 
Zitat:

Zitat von fkerber
Dass das Semikolon nicht da ist, ist vollkommen korrekt, da vor else kein ; stehen darf.

:wiejetzt:

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...

Blub 29. Jun 2004 19:13

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:

Ultimator 29. Jun 2004 19:26

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;

Blub 30. Jun 2004 11:39

Re: Hangman Projekt für Info: Fragen über Fragen
 
Zitat:

Zitat von Ultimator
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;


nope bringt auch nichts.....
es ist zum verzweifeln :wall:

Ultimator 30. Jun 2004 11:44

Re: Hangman Projekt für Info: Fragen über Fragen
 
Delphi-Quellcode:
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;
Mach das mal besser so:

Delphi-Quellcode:
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;
Sch'weiß zwar nicht, obs hilft, aber trotzdem :wink:

CyK 30. Jun 2004 13:08

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.

Ultimator 30. Jun 2004 13:20

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.

Nikolas 30. Jun 2004 13:32

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:

Zitat von The Fine Manual
Beschreibung
Pos
sucht in dem String S nach dem Teil-String Substr. Wird der Teil-String gefunden, gibt Pos den Integer-Index des ersten Zeichens von Substr in S zurück. Ist Substr nicht vorhanden, wird der Wert Null zurückgegeben.


xineohp 30. Jun 2004 16:35

Re: Hangman Projekt für Info: Fragen über Fragen
 
moin,

@Ultimator
Zitat:

Zitat von Ultimator
Delphi-Quellcode:
m:=length(RateWort);
for i:=0 to m-1 do
  if RateWort[i]=Buchstabe then

Das ist nicht richtig! Bei strings fängt der Index bei 1 an ...

Ultimator 30. Jun 2004 16:37

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:
m:=strtoint(Ratewort[0]);
machen, oder nicht?

xineohp 30. Jun 2004 18:25

Re: Hangman Projekt für Info: Fragen über Fragen
 
ich meine sowas mal gehört zu haben, habs aber nie ausprobiert :wink:

Nikolas 30. Jun 2004 18:58

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.

xineohp 30. Jun 2004 19:15

Re: Hangman Projekt für Info: Fragen über Fragen
 
warum einfach wenns auch kompliziert geht :mrgreen:

Blub 30. Jun 2004 19:42

Re: Hangman Projekt für Info: Fragen über Fragen
 
Zitat:

Zitat von Toxman
Warum probiert ihr denn jeden Buchstaben aus? einamam pos anwenden und wenn ein ergebniss zurückkommt (>0) ist der Buchstabe drin.

:wiejetzt:

bitte ne kleine erklärung ^^

xineohp 30. Jun 2004 19:44

Re: Hangman Projekt für Info: Fragen über Fragen
 
Zitat:

Zitat von Toxman
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:

Zitat von The Fine Manual
Beschreibung
Pos sucht in dem String S nach dem Teil-String Substr. Wird der Teil-String gefunden, gibt Pos den Integer-Index des ersten Zeichens von Substr in S zurück. Ist Substr nicht vorhanden, wird der Wert Null zurückgegeben.



Blub 30. Jun 2004 21:02

Re: Hangman Projekt für Info: Fragen über Fragen
 
ahh ja.... gut. Habsch vorher nich gesehn :mrgreen:

Blub 10. Jul 2004 11:21

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.

vlees91 10. Jul 2004 11:41

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

Nikolas 10. Jul 2004 11:42

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.

Blub 14. Jul 2004 09:04

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*

Blub 25. Aug 2004 13:59

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:
//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;
und

Delphi-Quellcode:
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;
Ich hoffe echt, dass ihr mir hierbei weiterhelfen könnt.

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!!!

Steve 25. Aug 2004 14:07

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:
//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;
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)

Gruß
Stephan

Nikolas 25. Aug 2004 14:28

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:
function BuchstabeEnthalten (Buchstabe,RateWort:String): boolean;
begin
result:=false;
if pos(Buchstabe, RateWort)>0 then result := true;
end;
Fertig. :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:39 Uhr.
Seite 1 von 2  1 2      

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