![]() |
Hangman: Galgen zeichnen..
hallöchen ersteinmal..
wir basteln uns grad in info ein hangman programm und ich habs so schon fertig, nur ohne den galgen.. jetzt wollte ich wissen, wie ich den da reinmachen kann. ich hatte mir es so überlegt, was aber nicht klappt, da delphi mir immer die anzahl an zeichen rausgibt als fehler: F: sollen die fehler sein.. also f=0, kein fehler, f=1 1. fehler,... das zeichnen hab ich jeweils als prozedur fehler1, prozedur fehler2, .. gesetzt, und abfragen wollte ich dir mit if F=1 then Fehler1,...
Delphi-Quellcode:
schonmal danke für eure hilfe..
procedure TForm1.btokClick(Sender: TObject);
var i:Integer; begin GesuchtesWort:=edgesuchteswort.Text; edgesuchteswort.Text:=''; lbLoesung.caption:= ''; F:=0; for i:= 1 to length (GesuchtesWort) do lbLoesung.Caption:= lbLoesung.caption + '_'; end; procedure TForm1.btErgebnisClick(Sender: TObject); var j:Integer; begin Labelcaption:=lbLoesung.Caption; for j:= 1 to length (GesuchtesWort) do if GesuchtesWort[j] = Buchstabe then begin Labelcaption:=lbLoesung.Caption; delete(Labelcaption,j,1); Insert(GesuchtesWort[j], Labelcaption, j); lbLoesung.Caption:=Labelcaption; end else if GesuchtesWort[j] <> Buchstabe then begin F:=F+ 1 div 6; edFehler.Text:=FloatToStr(F); end; if F>=11 then showmessage('Du hast verloren!'); if Labelcaption=GesuchtesWort then showmessage('Du hast gewonnen!') end; |
Re: Hangman: Galgen zeichnen..
Und was ist deine Frage :stupid: ?
Wenn es um die Funktionen zum Zeichnen geht, würde ich alles in ein Funktion packen:
Delphi-Quellcode:
[edit] Ich glaube, es sind 11 :stupid: [/edit]
procedure Galgen(Steps: Integer; Canvas: TCanvas);
begin if (Steps < 1) or (Steps > 12) then // sind das zwölf *grübel* ? raise Exception.Create('Ganz böser Fehler'); Canvas.Arc(...); // Hügel if Steps >= 2 then begin Canvas.MoveTo(...); Canvas.LineTo(...); end; // usw. end; |
Re: Hangman: Galgen zeichnen..
Bin zwar nicht der DelphiProfi aber ich würds einfach so machen:
Delphi-Quellcode:
und das noch für F = 2, F = 3...
if F = 1 then canvas.lineto(X,Y);
Wenn du es grafisch ansprechender gestalten willst kannst du ja auch mit TBitmap arbeiten und deine eigenen Grafiken benutzten! |
Re: Hangman: Galgen zeichnen..
meine frage war.. (ich weiss gar net ob ich sie jetzt reingeschrieben hab?)
also wenn ich zb hallo eingebe, und dann auf ergebnis klicke, dann zeigt delphi mir an, dass ich 5 fehler hatte, also ist f=5. bei 6 buchstaben zeigt delphi dann f=6, ... ich wollte wissen, ob ihr in meinem quelltext irgendnen fehler seht? ich seh nämlich keinen, aber delphi zeigt mir die fehler halt falsch an.. |
Re: Hangman: Galgen zeichnen..
haben dieses galgenprojekt auch zu letzt in info gehabt und habe es folgendermaßen gelöst:
Delphi-Quellcode:
Also musst du bei dir nur noch das Fehlversuche mit F ersetzen und die prozedur nach jedem btErgebnisClick aufrufen.
procedure TfoGalgen.GalgenZeichnen(Fehlversuche:integer);
begin with imGalgen.canvas do begin case fehlversuche of 1 : begin moveto(..); lineto(...); end; 2 : begin moveto(..); lineto(..); end; ... end; end; end; vator |
Re: Hangman: Galgen zeichnen..
stimmt, mit case ist das ja noch einfacher..
naja aber das hätte ich ja auch so gemacht, aber das mit den fehlern geht nicht bei mir.. (siehe weiter oben) |
Re: Hangman: Galgen zeichnen..
Der Fehler im Code ist, dass du für jeden Buchstaben im Wort, der nicht der geratene Buchstabe ist, einen Fehler zählst. Den darfst du natürlich nur zählen, wenn der Buchstabe gar nicht im Wort enthalten ist.
Delphi-Quellcode:
@Vator, NoRiX: Habe ich denn etwas anderes geschrieben :wink: ? Die ifs hab ich case absichtlich vorgezogen, damit die Funktion nicht vom bisherigen Canvas-Inhalt abhängig ist.
procedure TForm1.btErgebnisClick(Sender: TObject);
var j:Integer; begin Labelcaption:=lbLoesung.Caption; if Pos(Buchstabe, GesuchtesWort) > 0 then for j:= 1 to length (GesuchtesWort) do if GesuchtesWort[j] = Buchstabe then Labelcaption[j] := Buchstabe; else begin F := F + 1 div 6; // Wobei mir hier der Sinn entgeht edFehler.Text:=IntToStr(F); end; |
Re: Hangman: Galgen zeichnen..
alles klar.. danke erstmal.. werd dann gleich mal probieren..
und das hier F := F + 1 div 6; hatte ich in irgendnem anderen beitrag (nicht von hier..) gefunden, und habs damit auch versucht.. habs wohl vergessen zu löschen.. EDIT: habs jetzt so ausprobiert, aber es funzt leider net.. bist du dir sicher dass das so richtig ist? jetzt schreibt er mir die buchstaben nicht mehr ins wort und die fehleranzeige läuft auch verrückt.. EDIT2: habs jetzt so verändert, aber das mit dem f klappt immer noch net. wenn ich auf einen buchstaben habe, der nicht im wort vorhanden ist, zeigt er mir bei f nichts an. das mit pos müsste doch richtig sein, oder? der gibts ja, wenn nichts gefunden wird, eine null zurück.. wenigstens zeigt er jetzt die buchstaben an..
Delphi-Quellcode:
procedure TForm1.btErgebnisClick(Sender: TObject);
var j:Integer; begin Labelcaption:=lbLoesung.Caption; if Pos(Buchstabe, GesuchtesWort) > 0 then for j:= 1 to length (GesuchtesWort) do if GesuchtesWort[j] = Buchstabe then begin Labelcaption:=lbLoesung.Caption; delete(Labelcaption,j,1); Insert(GesuchtesWort[j], Labelcaption, j); lbLoesung.Caption:=Labelcaption; end else if Pos(Buchstabe, GesuchtesWort) = 0 then begin F:=F+ 1; edFehler.Text:=FloatToStr(F); end; if F>=11 then showmessage('Du hast verloren!'); if Labelcaption=GesuchtesWort then showmessage('Du hast gewonnen!') end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:30 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