Entwickler-Ecke
Sonstiges (Delphi) - Projekt Hangman
Quality* - Mi 23.06.10 08:42
Titel: Projekt Hangman
In der Schule sollen wir uns Delphi mehr oder weniger selber beibringen und das anhand eines Hangmanspiels.
Nun habe ich das Spiel soweit eingeteilt und verzweifel nun am Programmieren.
Soweit hab ich das Spiel bis jetzt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105:
| unit pHangman;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TTHangman = class(TForm) LbRatewort: TLabel; EdBitteEingeben: TEdit; LbBuchstabe: TLabel; procedure FormCreate(Sender: TObject); procedure FormKeyPress(Suchwort: String; Sender: TObject; var Key: Char); private Buchstabe:string; function Ratewort_Erzeugen(Suchwort : String) : string; procedure Ratewort_Zeigen(Ratewort : String); function Wort_Durchsuchen(Suchwort:String; zaehler:integer; Buchstabe:String) : Boolean; public end;
var THangman: TTHangman;
implementation
{$R *.DFM}
procedure TTHangman.FormCreate(Sender: TObject);
var Zaehler : Integer; var Ratewort : String [30]; var Suchwort : String [30]; var Buchstabe : String;
begin
Suchwort := 'Dienstag';
For Zaehler := 1 to length(Suchwort) do
begin Buchstabe := ''; Suchwort[Zaehler] := upcase (Suchwort[Zaehler]); Ratewort := Ratewort_Erzeugen(Suchwort); Ratewort_Zeigen(Ratewort); Wort_Durchsuchen(suchwort,zaehler, Buchstabe); end;
end;
function TTHangman.Ratewort_Erzeugen(Suchwort : String):String; var Zaehler : integer; var Leerwort : string;
begin Leerwort := ''; for Zaehler := 1 To length(Suchwort) do begin leerwort := Concat(Leerwort,'_ '); end; Ratewort_Erzeugen := Leerwort; end;
procedure TTHangman.Ratewort_Zeigen(Ratewort:String);
begin LbRatewort.caption := Ratewort; end;
procedure TThangman.FormKeyPress(Suchwort : String; Sender: TObject; var Key: Char); var Zaehler : Integer; var Buchstabe : char; begin buchstabe := key; buchstabe := upcase(Buchstabe); for zaehler := 1 To length(Suchwort) do begin if wort_durchsuchen(suchwort, zaehler, Buchstabe) = true then begin ? end else .. end; end;
function TThangman.wort_durchsuchen(Suchwort:String; zaehler:integer; buchstabe:String):boolean; begin If suchwort[zaehler] = buchstabe then begin wort_durchsuchen := true end else wort_durchsuchen := false; end; end. |
Um den Durchgang kurz zu schildern.
Das zu suchende Wort ist deklariert "Dienstag".
Erzeugung von einem Unterstrich für jeden Buchstaben von Dienstag.
Ausgabe der Unterstriche in einem Label.
Spieler drückt einen Buchstaben.
Wort wird auf den Buchstaben hin durchsucht.
Wenn der Buchstabe vorhanden ist, soll der Buchstabe in das Ratewort (Anfangs _ _ _ _ _ _ _ _ ) eingesetzt werden -> (D _ _ N _ _ _ G)
Wenn der Buchstabe nicht vorhanden ist, sollen die Fehlversuche in einem Label hochgezählt werden.
Danke für eure Hilfe
Quality*
HotCoffee - Sa 31.07.10 02:36
Hey, also ich habe mir hier mal grade ein paar Proceduren überlegt mit denen es recht leicht klappen könnte.
Die Begriffe werden aus einer einfachen Textdatei Zeilenweise geladen, diese befindet sich im Programmordner. Die Variablen gelten für das ganze Formular und nicht nur für eine einzelne Procedur.
Dazu kommt dann natürlich noch so ne Procedure Aktualisiere oder so, mit der du alle Labels auf ihre entsprechenden Werte setzt, dann kannst du die einzelnen Buchstaben als Button anzeigen lassen oder so und dann bei OnButtonClick den Buchstaben prüfen, Aktualisueren und wenn gelöst ist den nächsten Begriff laden.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| procedure FormCreate(Sender: TObject); begin Begriffe := TStringList.Create; IF fileexists('Begriffe.txt') THEN Begriffe.LoadFromFile('Begriffe.txt'); IF Begriffe.count>0 THEN ladeBegriff; end;
procedure ladeBegriff; VAR i : integer; begin randomize; Loesung:=Begriffe[random(Begriffe.Count-1)]; for i:=1 TO length(Loesung) DO Anzeige:=Anzeige+'_'; FehlVersuche:=0; end;
procedure pruefeBuchstabe (pBuchstabe : Char); VAR i : integer; begin IF pos(pBuchstabe,AnsiUpperCase(Loesung))<>0 THEN For i:=1 To length(Loesung) DO IF upcase(Loesung[i])=pBuchstabe THEN Anzeige[i]:=Loesung[i] ELSE ELSE FehlVersuche:=FehlVersuche+1; end;
function geloest : Boolean; begin result:=Loesung=Anzeige; end; |
Jakob_Ullmann - Sa 31.07.10 13:55
Kompiliert denn das Programm überhaupt?
FinnO - Sa 31.07.10 14:14
Hey,
schau' dir doch mal die Funktionen
an.
Für das Laden der Begriffe empfehle ich eine Stringlist:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| var sl : TStringList; begin sl := TStringList.Create; try sl.LoadFromFile(extractFilePath(ParamStr(0))+'Textdatei.txt'); showmessage(sl[1]); finally sl.free; end; end; |
LG
Delete - Sa 31.07.10 14:33
HotCoffee hat folgendes geschrieben : |
Die Begriffe werden aus einer einfachen Textdatei Zeilenweise geladen, diese befindet sich im Programmordner.
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| procedure FormCreate(Sender: TObject); begin Begriffe := TStringList.Create; IF fileexists('Begriffe.txt') THEN Begriffe.LoadFromFile('Begriffe.txt'); IF Begriffe.count>0 THEN ladeBegriff; end; | |
Das ist aber sehr optimistisch gedacht ohne Pfadangabe.
HotCoffee - Sa 31.07.10 14:39
Luckie hat folgendes geschrieben : |
Das ist aber sehr optimistisch gedacht ohne Pfadangabe. |
Nja das hängt ja dann an demjenigen der es in sein Programm packt, wo er die Datei hinlegt. Er kann sie schließlich auch mit in die Exe packen.
Delete - Sa 31.07.10 14:47
Ich habe mich auf deinen Code bezogen, dass das Programm die Datei im Programmordner findet ohne Pfadangabe, ist sehr optimistisch programmiert.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!