Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi hangman programm - delphi 3 (https://www.delphipraxis.net/114056-hangman-programm-delphi-3-a.html)

Eduard1 19. Mai 2008 08:41


hangman programm - delphi 3
 
Hallo Leute,
wir nehmen gerade im Info-Unterricht das Hangman Programm durch und müssen selber ein komplettes Programm programmieren.

Bis jetzt hin haben wir nur das komplette Layout, wissen aber gar nicht wie wir anfangen sollen und wie wir den Quelltext gestalten sollen.

Könnte uns irgendjemand mit einem Lösungsansatz aushelfen?
Am besten nicht zu kompliziert da wir noch nicht sehr lange mit delphi arbeiten.

Liebe Grüße
Eduard

Klaus01 19. Mai 2008 08:45

Re: hangman programm - delphi 3
 
Guten Morgen,

was hast Du denn bereits fertig?
Stelle den Code doch mal ein.

Ich würde das Problem mit einer TImageList angehen,
wo dann als Bild die verschiedenen Zustände des Galgenmännchens
hinterlegt sind.

Grüße
Klaus

STS301 19. Mai 2008 08:45

Re: hangman programm - delphi 3
 
Willkommen in der DP

eine Liste von Wörtern erstellen, dann eine Zufällige heraussuchen und dann mit zb. Buttons schauen ob es der Richtige Buchstabe ist

Mikender 19. Mai 2008 08:50

Re: hangman programm - delphi 3
 
HAb so was auch noch nie gemacht aber wie wärs mit alle Buchstaben des Lösungswortes in einem dynamischen 2-Dimensionalen Arrays Der erste Wert gibt den Buchstaben an den zweiten ob man ihn schon hat (zb A=hat ihn; b= hat ihn nicht) dann abfragen ob der Buchstabe in einem ist dann diese abfragen ob sie schon geraten wurden Und den Galgen mit Canvas zeichnen

Und nach jeder Runde abragen ob der Galgen "voll" ist oder ob alle Buchstaben geraten sind

Hoffe konnte dir Helfen Mikender

[GedankenBlitz] Merk dir die schon geratenen Buchstaben dann kannst dus mit nem Normalen eindimensionalen machen[/GedankenBlitz]

Eduard1 19. Mai 2008 08:52

Re: hangman programm - delphi 3
 
Bis jetzt haben wir wirklich nur das Layout mit einem Label für das Ratwort, einem Editfeld für die Einabe des Buchstabes und ein Label zur Fehleranzeige.
Außerdem natürlich eine Canvas.

Unser Lehrer hat uns vorgegeben das mit einem Array in dem die Ratwörter sind zu lösen, ist aber nun krank und unser Kurs ist auf sich alleine gestellt.

Könnte uns jemand vielleicht konkret sagen wie wir anfangen sollen?
Wir haben bis jetzt halt nur ein Array mit den Ratewörten erstellt.

Grüße
Eduard

Klaus01 19. Mai 2008 08:56

Re: hangman programm - delphi 3
 
Du kannst Dir ja mal diesen Beitrag als Inspiration
anschauen.

Grüße
Klaus

Eduard1 19. Mai 2008 09:02

Re: hangman programm - delphi 3
 
Zitat:

Zitat von Klaus01
Du kannst Dir ja mal diesen Beitrag als Inspiration
anschauen.

Grüße
Klaus

Also das Programm was dem Beitrag hinzugefügt worden ist, ist viel zu kompliziert für unseren momentanen Stand im Kurs.
Gibt es keine anderen, einfachereren Lösungen?

Der Weg ist uns ja einigermaßen klar:
Wir deklarieren ein Array aus dem ein paar Ratewörter per Randomize ausgegeben werden, der Benutzer gibt einen Buchstaben im Ed-Feld ein und das Programm prüft ob der Buchstabe im Wort enthalten ist.
Ist er enthalten gehts zum nächsten Buchstaben, ist er nich enthalten wir per lineto usw. auf der Canvas etwas gezeichnet.

Wir haben nur keinerlei Ahnung, wie und mit welchen Befehlen wir das Programm angehen sollen :(

Aurelius 19. Mai 2008 09:12

Re: hangman programm - delphi 3
 
Ihr könnt doch per for-Schleife das Array durchgehen und schauen ob das Zeichen übereinstimmt.

Delphi-Quellcode:
if Length(Eingabe.Text) = 1 then
for i := 0 to High(Array) do
   if LowerCase(Array[i]) = LowerCase(Eingabe.Text) then ... else ...;
Muss natürlich noch angepasst werden, nur erstmal ein Denkanstoß.

Eduard1 19. Mai 2008 16:24

Re: hangman programm - delphi 3
 
Habe mal unser Programm hochgeladen, wie man sieht, sieht man noch nicht viel...

download

Durch einen Klick auf Neues Spiel wird per Randomizer ein Wort aus dem Array geholt.
Jetzt müssen wir es irgendwie schaffen, dass man einzelne Buchstaben im Ed-Feld eingeben kann um diese dann mit dem Prüfen-Button zu kontrollieren (ob sie im Wort enthalten sind).

rollstuhlfahrer 19. Mai 2008 19:31

Re: hangman programm - delphi 3
 
erst einmal wprde ich sagen, dass ein Download eines gepackten archives auch ohne Werbung geht und zwar hier in der DP. Rar sollte so klein sein, dass die Grenze nicht überschritten wird. Also: das nächste mal unterm Posttext das Attachment hinzufügen.

rollstuhlfahrer

nachtrag:
Das sollte weiterhelfen
Delphi-Quellcode:
var fehlversuche: Cardinal; // kann ja eigentlich nicht negativ werden ;)


procedure TMain.BBPruefenClick(Sender: TObject);
begin
  if Pos(EdBuchstabe.Text, Ratewort) <> 0 then
  begin  // Vorhanden
  //...
  end
  else
  begin // nicht vorhanden
    Fehlversuche := Fehlversuche + 1;
    Label5.Caption := IntToStr(Fehlversuche);
  end;
end;

Klaus01 19. Mai 2008 20:14

Re: hangman programm - delphi 3
 
Liste der Anhänge anzeigen (Anzahl: 1)
Guten Abend,

habe mal in deinem Quelltext herumgeschrieben.
- eine ImageList hinzugefügt (die Bilder mußt Du noch selber hineinladen)
- einen Fehlerzähler implementiert (wie Rollstulfahrer schon beschrieben hat)

Was passiert wenn der Galgen fertig ist (nach 12 Fehlversuchen)?
Das mußt Du auch noch implementieren.

Meine Schritte habe ich soweit wie möglich kommentiert.

Grüße
Klaus

Eduard1 19. Mai 2008 21:06

Re: hangman programm - delphi 3
 
Danke an euch, wir werden uns morgen oder am Mittwoch mal im Informatik-Unterricht dransetzen und dannach Bericht erstatten :)

Eduard1 27. Mai 2008 17:54

Re: hangman programm - delphi 3
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Leute,
Erstmals danke an alle die uns weiter geholfen haben.
Im Moment funktioniert das Programm, jedoch haben wir mit dem Zeichnen wir noch ein paar Schwierigkeiten.
Wir können nur einen Stirch beim 1. Fehler zeichen.
Beim 2. Fehler zeichnet das Programm nicht weiter und reagiert überhaupt nicht.
Es wäre sehr nett, wenn sich jemand nochmal unseren Quelltext angucken könnte. Wir kommen leider kein Stück weiter.

Viele Grüße
Eduard

bigben37 27. Mai 2008 18:14

Re: hangman programm - delphi 3
 
Delphi-Quellcode:
     
with ImBild.Canvas do
  begin
    if falsch = 1
    then
    moveto (50,150);
    lineto (50,250);

    if falsch = 2
    then
    moveto (50,250);
    lineto (150,250);
Da fehlen begin und end.

Delphi-Quellcode:
     
if falsch = 1 then
  begin
    moveto (50,150);
    lineto (50,250);
  end;

if falsch = 2 then
  begin
    moveto (50,150);//50, 250 gibt es nicht, da das TImage nur eine Höhe von 225 Pixeln hat
    lineto (150,150);
  end;

DeddyH 27. Mai 2008 18:19

Re: hangman programm - delphi 3
 
Außerdem würde ich das ganze Zeichnen ins OnPaint des Image verschieben (noch besser statt des Image eine Paintbox nehmen) und dort falsch auswerten.

[edit] Ich meine damit natürlich die Variable "falsch" :lol: [/edit]

Klaus01 27. Mai 2008 18:19

Re: hangman programm - delphi 3
 
Hallo,
in Deinem Code fehler so einige begin und ends.

Wenn Du in einer if Abfrage mehrere Befehle ausführen wills
solltest Du diese in begin end einfassen.
Ansonsten wird nur der erste Befehl ausgeführt.
Der zweite wird unabhängig vom Ausgang der if Abfrage
im ausgegührt.

Delphi-Quellcode:
if erraten = 0  then
  begin
    falsch := falsch + 1;
    LbFehler.Caption := IntToStr(falsch);
    with ImBild.Canvas do
      begin
        if falsch = 1 then
          begin // fehlt bei Dir
            moveto (50,150);
            lineto (50,250);
          end // fehlt auch bei Dir

      end;
    end;
Übersichtlicher würde es auch, wenn Du case statements verwenden würdest:

Delphi-Quellcode:
with ImBild.Canvas do
  begin
    ...
    case falsch of
      1: begin
            ...  
          end;
      2: begin
            ...
          end;
    end //case
  end // with
Grüße
Klaus

DeddyH 27. Mai 2008 18:23

Re: hangman programm - delphi 3
 
case halte ich in diesem Fall nicht für sinnvoll. Ich würde das eher so machen:
Delphi-Quellcode:
procedure TFrmHangman.ImBildPaint(Sender: TObject);
begin
  ImBild.Canvas.Pen.Color := clBlack;
  if falsch > 0 then
    begin
      ImBild.Canvas.moveto (50,150);
      ImBild.Canvas.lineto (50,220);
    end;
  if falsch > 1 then
    begin
      ImBild.Canvas.moveto (50,220);
      ImBild.Canvas.lineto (80,220);
    end;
end;

bigben37 27. Mai 2008 18:26

Re: hangman programm - delphi 3
 
Zitat:

Zitat von DeddyH
case halte ich in diesem Fall nicht für sinnvoll. Ich würde das eher so machen:
Delphi-Quellcode:
procedure TFrmHangman.ImBildPaint(Sender: TObject);
begin
  ImBild.Canvas.Pen.Color := clBlack;
  if falsch > 0 then
    begin
      ImBild.Canvas.moveto (50,150);
      ImBild.Canvas.lineto (50,220);
    end;
  if falsch < 1 then
    begin
      ImBild.Canvas.moveto (50,220);
      ImBild.Canvas.lineto (80,220);
    end;
end;

Ich hab noch nie einen Hangman gesehen, der nur aus zwei Strichen besteht.
Ich denke, die anderen Zeichenschritte hat Eduard noch nicht in den Code geschrieben.

DeddyH 27. Mai 2008 18:33

Re: hangman programm - delphi 3
 
Das war mir auch klar, ich schreib doch anderen nicht das Programm fertig, es ging mir um das Prinzip *koppschüttel*

Klaus01 27. Mai 2008 18:44

Re: hangman programm - delphi 3
 
Warum in dem Zitat von bigben37 das steht:
Delphi-Quellcode:
if falsch < 1 then
und im Original von DeddyH
Delphi-Quellcode:
if falsch > 1 then
ist mir ein Rätsel.

Aber es macht schon Sinn immer auf if falsch > x zu prüfen,
denn dann wird die Grafik immer wieder neu gezeichnet.

Im Fall von Case werden nur die neuen Teile des Hangmans gezeichnet.

Grüße
Klaus

DeddyH 27. Mai 2008 18:47

Re: hangman programm - delphi 3
 
Genau. Wäre Delphis case so aufgebaut wie switch in C und ähnlichen Sprachen, wäre das aber auch recht easy gegangen(einfach das break weglassen).

Eduard1 27. Mai 2008 19:41

Re: hangman programm - delphi 3
 
Liste der Anhänge anzeigen (Anzahl: 1)
Danke, jetzt funktionierts :)

Nur kriegen wir das jetzt mit dem Kreis, sprich dem Kopf des Hangmans, nicht hin.
Der ist einfach immer zu groß. Wenn wir versuchen den kleiner zu machen ist er jedoch nicht mehr am Galgen.
Besser gesagt, wir wissen gar nicht wie man den Kreis plaziert.
Bis jetzt haben wir ohne große Ahnung rumprobiert, sind damit aber nicht weit gekommen.

Grüße
Eduard

Klaus01 27. Mai 2008 19:44

Re: hangman programm - delphi 3
 
Benutze doch die Prozedur arc (
Delphi-Quellcode:
procedure Arc(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer);
).
Da kannst Du mit den x und y Koordinaten ein umschliessendes Quadrat definieren.
Ein Kante des Quadrates sollte dann mit dem Galgen verbunden sein.

Grüße
Klaus

DeddyH 27. Mai 2008 19:46

Re: hangman programm - delphi 3
 
Ist doch ganz einfach: ein Kreis wird mit Canvas.Ellipse gezeichnet. Dabei wird das umgebende Rechteck angegeben. Heißt also, dass der "Top"-Wert dieses Rechtecks dem Y-Wert des Endpunkts des Galgens entspricht. Der "Left"-Wert ist dann der X-Wert des Endpunkts minus des Radius des Kreises. Den Rest könnt Ihr einfach ableiten (kurz drüber nachdenken).

Eduard1 27. Mai 2008 19:50

Re: hangman programm - delphi 3
 
Hmmm, also diese Arc-Prozedur hat jetzt irgendwie noch schlechter funktionierte.
Ehrlich gesagt haben wir die auch noch nie im Unterricht kennen gelernt.

Könnte uns nicht jemand eben unseren "Kopf" an den Galgen zeichnen?
Wir sind langsam echt verzweifelt weil wir schon seit über einer Stunde rumprobieren und das Projekt morgen abgeben müssen.

Grüße
Eduard

DeddyH 27. Mai 2008 19:58

Re: hangman programm - delphi 3
 
Hast Du nicht gelesen, was ich geschrieben hab? Also gut, ein Beispiel.
Delphi-Quellcode:
//senkrechter Strich
Canvas.MoveTo(60,10);
Canvas.LineTo(60,100);//unterer Endpunkt des Stricks
//nun ein Kreis mit Radius 25 direkt unten dran
Canvas.Ellipse((60 - 25), //um Radius nach links
100,//obere Kante
(60 + 25),//um Radius nach rechts
(100 + 50));//untere Kante -> 2 * Radius addieren

Eduard1 27. Mai 2008 20:03

Re: hangman programm - delphi 3
 
Sorry aber wir haben immoment einfach ein Brett vorm Kopf, liegt wahrscheinlich daran dass wir schon den ganzen Tag vorm Computer sitzen.
Wäre es zuviel verlangt, dass du uns mal eben mit dem Kreis hilfst und ihn uns an den Galgen setzt?
Wir wären dir wirklich unendlich dankbar, dannach wären wir nämlich fertig :)

Grüße
Eduard

DeddyH 27. Mai 2008 20:06

Re: hangman programm - delphi 3
 
Nö, das mache ich nicht. Ich habe Dir doch schon ein Beispiel gegeben, Du musst das doch nur noch koordinatentechnisch anpassen.

DeddyH 27. Mai 2008 22:26

Re: hangman programm - delphi 3
 
Ich sehe, Dein soziales Niveau entspricht dem geistigen. Schade, dass ich ein paar Gedanken mit Deinem Problem verschwendet habe.

Sharky 28. Mai 2008 11:36

Re: hangman programm - delphi 3
 
Da es den User seit eben nicht mehr gibt, macht der Thread auch keinen Sinn mehr.

* c l o s e d *


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:06 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