Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Hangman: Galgen zeichnen.. (https://www.delphipraxis.net/45686-hangman-galgen-zeichnen.html)

MAD_87 10. Mai 2005 19:36


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:
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;
schonmal danke für eure hilfe..

Khabarakh 10. Mai 2005 19:48

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:
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;
[edit] Ich glaube, es sind 11 :stupid: [/edit]

NoRiX 10. Mai 2005 19:50

Re: Hangman: Galgen zeichnen..
 
Bin zwar nicht der DelphiProfi aber ich würds einfach so machen:
Delphi-Quellcode:
if F = 1 then canvas.lineto(X,Y);
und das noch für F = 2, F = 3...

Wenn du es grafisch ansprechender gestalten willst kannst du ja auch mit TBitmap arbeiten und deine eigenen Grafiken benutzten!

MAD_87 10. Mai 2005 19:58

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

vator 10. Mai 2005 19:59

Re: Hangman: Galgen zeichnen..
 
haben dieses galgenprojekt auch zu letzt in info gehabt und habe es folgendermaßen gelöst:
Delphi-Quellcode:
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;
Also musst du bei dir nur noch das Fehlversuche mit F ersetzen und die prozedur nach jedem btErgebnisClick aufrufen.

vator

MAD_87 10. Mai 2005 20:02

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)

Khabarakh 10. Mai 2005 20:15

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:
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;
@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.

MAD_87 10. Mai 2005 20:20

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