Autor Beitrag
Quality*
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Mi 23.06.10 08:42 
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:

ausblenden volle Höhe 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;
  {suchwort, ratewort : string;}
         function Ratewort_Erzeugen(Suchwort : String) : string;
         procedure Ratewort_Zeigen(Ratewort : String);
         function Wort_Durchsuchen(Suchwort:String; zaehler:integer; Buchstabe:String) : Boolean;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  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); //Leerwort nur mit Unterstrichen
                       Ratewort_Zeigen(Ratewort); // Anzeige in einem Label
                       Wort_Durchsuchen(suchwort,zaehler, Buchstabe); //Durchsuchen ob gedrückter Buchstabe im Wort ist

                  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 //True -> Einsetzen des Buchstabens in das Ratewort
                   begin
                          ?
                   end
                   else .. //Fehlversuche(Label) +1
         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
Hält's aus hier
Beiträge: 14

Suse Linux 11, Win Xp SP 3, Win 2000, Win 98,

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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: Sa 31.07.10 13:55 
Kompiliert denn das Programm überhaupt?
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Sa 31.07.10 14:14 
Hey,

schau' dir doch mal die Funktionen

ausblenden Delphi-Quelltext
1:
2:
Pos;   //findet einen SubString in einem String und liefert dessen Position
PosEx;  //wie Pos nur mit Offset

an.

Für das Laden der Begriffe empfehle ich eine Stringlist:

ausblenden 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
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 31.07.10 14:33 
user profile iconHotCoffee hat folgendes geschrieben Zum zitierten Posting springen:
Die Begriffe werden aus einer einfachen Textdatei Zeilenweise geladen, diese befindet sich im Programmordner.
ausblenden 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
Hält's aus hier
Beiträge: 14

Suse Linux 11, Win Xp SP 3, Win 2000, Win 98,

BeitragVerfasst: Sa 31.07.10 14:39 
user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:

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.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



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