AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Hangman: Galgen zeichnen..
Thema durchsuchen
Ansicht
Themen-Optionen

Hangman: Galgen zeichnen..

Offene Frage von "MAD_87"
Ein Thema von MAD_87 · begonnen am 10. Mai 2005 · letzter Beitrag vom 10. Mai 2005
Antwort Antwort
MAD_87

Registriert seit: 3. Okt 2004
22 Beiträge
 
#1

Hangman: Galgen zeichnen..

  Alt 10. Mai 2005, 19:36
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..
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#2

Re: Hangman: Galgen zeichnen..

  Alt 10. Mai 2005, 19:48
Und was ist deine Frage ?
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 [/edit]
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
NoRiX

Registriert seit: 26. Apr 2005
6 Beiträge
 
#3

Re: Hangman: Galgen zeichnen..

  Alt 10. Mai 2005, 19:50
Bin zwar nicht der DelphiProfi aber ich würds einfach so machen:
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!
  Mit Zitat antworten Zitat
MAD_87

Registriert seit: 3. Okt 2004
22 Beiträge
 
#4

Re: Hangman: Galgen zeichnen..

  Alt 10. Mai 2005, 19:58
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..
  Mit Zitat antworten Zitat
vator

Registriert seit: 19. Dez 2004
Ort: Düsseldorf
5 Beiträge
 
#5

Re: Hangman: Galgen zeichnen..

  Alt 10. Mai 2005, 19:59
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
  Mit Zitat antworten Zitat
MAD_87

Registriert seit: 3. Okt 2004
22 Beiträge
 
#6

Re: Hangman: Galgen zeichnen..

  Alt 10. Mai 2005, 20:02
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)
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#7

Re: Hangman: Galgen zeichnen..

  Alt 10. Mai 2005, 20:15
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 ? Die ifs hab ich case absichtlich vorgezogen, damit die Funktion nicht vom bisherigen Canvas-Inhalt abhängig ist.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
MAD_87

Registriert seit: 3. Okt 2004
22 Beiträge
 
#8

Re: Hangman: Galgen zeichnen..

  Alt 10. Mai 2005, 20:20
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;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:00 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