![]() |
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 |
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 |
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 |
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] |
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 |
Re: hangman programm - delphi 3
|
Re: hangman programm - delphi 3
Zitat:
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 :( |
Re: hangman programm - delphi 3
Ihr könnt doch per for-Schleife das Array durchgehen und schauen ob das Zeichen übereinstimmt.
Delphi-Quellcode:
Muss natürlich noch angepasst werden, nur erstmal ein Denkanstoß.
if Length(Eingabe.Text) = 1 then
for i := 0 to High(Array) do if LowerCase(Array[i]) = LowerCase(Eingabe.Text) then ... else ...; |
Re: hangman programm - delphi 3
Habe mal unser Programm hochgeladen, wie man sieht, sieht man noch nicht viel...
![]() 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). |
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; |
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 |
Re: hangman programm - delphi 3
Danke an euch, wir werden uns morgen oder am Mittwoch mal im Informatik-Unterricht dransetzen und dannach Bericht erstatten :)
|
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 |
Re: hangman programm - delphi 3
Delphi-Quellcode:
Da fehlen begin und end.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);
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; |
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] |
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:
Übersichtlicher würde es auch, wenn Du case statements verwenden würdest:
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;
Delphi-Quellcode:
Grüße
with ImBild.Canvas do
begin ... case falsch of 1: begin ... end; 2: begin ... end; end //case end // with Klaus |
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; |
Re: hangman programm - delphi 3
Zitat:
Ich denke, die anderen Zeichenschritte hat Eduard noch nicht in den Code geschrieben. |
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*
|
Re: hangman programm - delphi 3
Warum in dem Zitat von bigben37 das steht:
Delphi-Quellcode:
und im Original von DeddyH
if falsch < 1 then
Delphi-Quellcode:
ist mir ein Rätsel.
if falsch > 1 then
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 |
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).
|
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 |
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 |
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).
|
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 |
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 |
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 |
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.
|
Re: hangman programm - delphi 3
Ich sehe, Dein soziales Niveau entspricht dem geistigen. Schade, dass ich ein paar Gedanken mit Deinem Problem verschwendet habe.
|
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