Autor Beitrag
Agathe
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 08.03.16 18:32 
Hallo,

ich muss in der Schule ein 4 Gewinnt Spiel mit Delphi 7 programmieren.

Ich bin grad bei der Erstellung des Spielfeldes. Es sollte jetzt fertig sein, wird aber wenn man F9 drückt nicht angezeigt. Weder ich noch meine Lehrerin wissen weiter - ich füge mal den Quelltext an.

Vielleicht kann mir ja einer von euch Computer-Füchsen helfen? ;)

Lg

Quelltext:

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:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
unit UnitAbschluss;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
TFeldBesetzung = (sLeer, sSpieler1, sSpieler2);
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    btnNeu: TButton;
    Panel1: TPanel;
    Panel2: TPanel;
    Anzeigeflaeche: TPaintBox;
    Edit6: TEdit;
    Panel4: TPanel;
    pnlSpieler: TPanel;
    btnGewinnausgabe: TButton;
    btnEinstellungen: TButton;
    Edit4: TEdit;
    Edit5: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure btnEinstellungenClick(Sender: TObject);
    procedure btnNeuClick(Sender: TObject);

  private
    { Private-Deklarationen }
    FGRafik: TBitmap;
    FLinks: Integer;
    FUnten: Integer;
    FSpielfeldBreite: Integer;
    FSpielfeldHoehe: Integer;
    FFelderBreite: Integer;
    FSpielfeld: array[0..60..5of TFeldBesetzung;
    FSpielerFarbe: array[TFeldbesetzung] of TColor;
    FSpielerBmp: array[TFeldBesetzung] of TBitmap;
    FSpielerName: array[TFeldBesetzung] of string;


    procedure GitterZeichnen(breite, hoehe, feldbreite: Integer);
     procedure Darstellen;
     procedure GroessenEinstellungenAnpassen;
     procedure SymbolErstellen(breite: Integer; spieler: TFeldBesetzung);
  public
    { Public-Deklarationen }
  end;


var
  Form1: TForm1;
  i, j: Integer;
  Spieler1, Spieler2: String;

implementation

uses  UnitAbschlussEinstellungen;

{$R *.dfm}
procedure TForm1.GitterZeichnen(breite, hoehe, feldbreite: Integer);
var
i: Integer;
begin
FGrafik.Canvas.Pen.Color := clBlack;
for i := 0 to hoehe do
begin
FGrafik.Canvas.MoveTo(FLinks, FUnten - i* feldbreite);
FGrafik.Canvas.LineTo(FLinks + breite * Feldbreite, FUnten - i * feldbreite);
end;
for i := 0 to breite do
begin
FGrafik.Canvas.MoveTo(FLinks + i*feldbreite, FUnten - hoehe * feldbreite);
FGrafik.Canvas.LineTo(FLinks + i*feldbreite, FUnten);
end;

end;
procedure TForm1.Darstellen;
begin
FGrafik.Canvas.Pen.Color := clWhite;
FGrafik.Canvas.Brush.Color := clWhite;
FGrafik.Canvas.Rectangle(0,0,FGrafik.Width, FGrafik.Height);
Anzeigeflaeche.Canvas.Draw(00, FGrafik);
Form1.GitterZeichnen(FSpielfeldBreite, FSpielfeldHoehe, FFelderBreite);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Randomize;
FGrafik:= TBitmap.Create;
FSpielfeldBreite := 7;
FSpielfeldHoehe := 6;
FFelderBreite := 25;
FSpielerBmp[sSpieler1] := TBitmap.Create;
FSpielerBmp[sSpieler2] := TBitmap.Create;
FSpielerBmp[sLeer] := TBitmap.Create;
FSpielerFarbe[sLeer] := clWhite;
FSpielerFarbe[sSpieler1] := clGreen;
FSpielerFarbe[sSpieler2] := clFuchsia;
FSpielerName[sLeer] := 'Leer';
FSpielerName[sSpieler1] := 'Spieler1';
FSpielerName[sSpieler2] := 'Spieler2';

end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
FGrafik.Free;
FSpielerBmp[sSpieler1].Free;
FSpielerBmp[sSpieler2].Free;
FSpielerBmp[sLeer].Free;
end;

procedure TForm1.GroessenEinstellungenAnpassen;
begin
FGrafik.Width := Anzeigeflaeche.Width;
FGrafik.Height := Anzeigeflaeche.Height;
FLinks := FGrafik.Width div 2 - FSpielfeldBreite div 2 * FFelderbreite;
FUnten := FGrafik.Height div 2 + FSpielfeldHoehe div 2 * Ffelderbreite;
SymbolErstellen(FFelderbreite-1, sSpieler1);
SymbolErstellen(FFelderbreite-1, sSpieler2);
SymbolErstellen(1, sLeer);

end;

procedure TForm1.SymbolErstellen(breite: Integer; spieler: TFeldBesetzung);
 begin
FSPielerBmp[spieler].Width := breite;
FSpielerBmp[Spieler].Height := breite;
FSpielerBmp[spieler].Canvas.Pen.Color := clWhite;
FSpielerBmp[spieler].Canvas.Brush.Color := clWhite;
FSpielerBmp[spieler].Canvas.Rectangle(00, breite, breite);
FSpielerBmp[spieler].Canvas.Pen.Color := FSpielerFarbe[spieler];
FSpielerBmp[spieler].Canvas.Brush.Color := FSpielerFarbe[spieler];
FSpielerBmp[spieler].Canvas.Ellipse(00, breite, breite);
end;





procedure TForm1.btnEinstellungenClick(Sender: TObject);
begin
FormEinstellungen.ShowModal;
end;

procedure TForm1.btnNeuClick(Sender: TObject);
begin
for i := 0 to FSpielfeldBreite - 1 do
begin
for j := 0 to FSpielfeldHoehe - 1 do FSpielfeld[i,j] := sLeer;
end;

end;

end.


Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 762
Erhaltene Danke: 127



BeitragVerfasst: Di 08.03.16 18:58 
Hallo Agathe,

willkommen im Forum.
Zuerst eine Bitte: Setze doch bitte Deinen Quelltext in Delphi-Tags (Markieren, dann Bereiche/Delphi/+).

Zu Deiner Frage: Du musst die Zeichenroutine (Darstellen) auch aufrufen, sonst wird nichts gezeichnet.

ub60
Agathe Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 08.03.16 19:47 
So ungefähr?

Das hab ich in dem Tutorial das ich benutzt hab auch gelesen und dachte, ich hätte das auch schon gemacht.
Muss ich das nicht in der Prozedur GrößenEinstellungenAnpassen machen?


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:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
unit UnitAbschluss;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
TFeldBesetzung = (sLeer, sSpieler1, sSpieler2);
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    btnNeu: TButton;
    Panel1: TPanel;
    Panel2: TPanel;
    Anzeigeflaeche: TPaintBox;
    Edit6: TEdit;
    Panel4: TPanel;
    pnlSpieler: TPanel;
    btnGewinnausgabe: TButton;
    btnEinstellungen: TButton;
    Edit4: TEdit;
    Edit5: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure btnEinstellungenClick(Sender: TObject);
    procedure btnNeuClick(Sender: TObject);

  private
    { Private-Deklarationen }
    FGRafik: TBitmap;
    FLinks: Integer;
    FUnten: Integer;
    FSpielfeldBreite: Integer;
    FSpielfeldHoehe: Integer;
    FFelderBreite: Integer;
    FSpielfeld: array[0..60..5of TFeldBesetzung;
    FSpielerFarbe: array[TFeldbesetzung] of TColor;
    FSpielerBmp: array[TFeldBesetzung] of TBitmap;
    FSpielerName: array[TFeldBesetzung] of string;


    procedure GitterZeichnen(breite, hoehe, feldbreite: Integer);
     procedure Darstellen;
     procedure GroessenEinstellungenAnpassen;
     procedure SymbolErstellen(breite: Integer; spieler: TFeldBesetzung);
  public
    { Public-Deklarationen }
  end;


var
  Form1: TForm1;
  i, j: Integer;
  Spieler1, Spieler2: String;

implementation

uses  UnitAbschlussEinstellungen;

{$R *.dfm}
procedure TForm1.GitterZeichnen(breite, hoehe, feldbreite: Integer);
var
i: Integer;
begin
FGrafik.Canvas.Pen.Color := clBlack;
for i := 0 to hoehe do
begin
FGrafik.Canvas.MoveTo(FLinks, FUnten - i* feldbreite);
FGrafik.Canvas.LineTo(FLinks + breite * Feldbreite, FUnten - i * feldbreite);
end;
for i := 0 to breite do
begin
FGrafik.Canvas.MoveTo(FLinks + i*feldbreite, FUnten - hoehe * feldbreite);
FGrafik.Canvas.LineTo(FLinks + i*feldbreite, FUnten);
end;

end;
procedure TForm1.Darstellen;
begin
FGrafik.Canvas.Pen.Color := clWhite;
FGrafik.Canvas.Brush.Color := clWhite;
FGrafik.Canvas.Rectangle(0,0,FGrafik.Width, FGrafik.Height);
Anzeigeflaeche.Canvas.Draw(00, FGrafik);
Form1.GitterZeichnen(FSpielfeldBreite, FSpielfeldHoehe, FFelderBreite);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Randomize;
FGrafik:= TBitmap.Create;
FSpielfeldBreite := 7;
FSpielfeldHoehe := 6;
FFelderBreite := 25;
FSpielerBmp[sSpieler1] := TBitmap.Create;
FSpielerBmp[sSpieler2] := TBitmap.Create;
FSpielerBmp[sLeer] := TBitmap.Create;
FSpielerFarbe[sLeer] := clWhite;
FSpielerFarbe[sSpieler1] := clGreen;
FSpielerFarbe[sSpieler2] := clFuchsia;
FSpielerName[sLeer] := 'Leer';
FSpielerName[sSpieler1] := 'Spieler1';
FSpielerName[sSpieler2] := 'Spieler2';

end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
FGrafik.Free;
FSpielerBmp[sSpieler1].Free;
FSpielerBmp[sSpieler2].Free;
FSpielerBmp[sLeer].Free;
end;

procedure TForm1.GroessenEinstellungenAnpassen;
begin
FGrafik.Width := Anzeigeflaeche.Width;
FGrafik.Height := Anzeigeflaeche.Height;
FLinks := FGrafik.Width div 2 - FSpielfeldBreite div 2 * FFelderbreite;
FUnten := FGrafik.Height div 2 + FSpielfeldHoehe div 2 * Ffelderbreite;
SymbolErstellen(FFelderbreite-1, sSpieler1);
SymbolErstellen(FFelderbreite-1, sSpieler2);
SymbolErstellen(1, sLeer);

end;

procedure TForm1.SymbolErstellen(breite: Integer; spieler: TFeldBesetzung);
 begin
FSPielerBmp[spieler].Width := breite;
FSpielerBmp[Spieler].Height := breite;
FSpielerBmp[spieler].Canvas.Pen.Color := clWhite;
FSpielerBmp[spieler].Canvas.Brush.Color := clWhite;
FSpielerBmp[spieler].Canvas.Rectangle(00, breite, breite);
FSpielerBmp[spieler].Canvas.Pen.Color := FSpielerFarbe[spieler];
FSpielerBmp[spieler].Canvas.Brush.Color := FSpielerFarbe[spieler];
FSpielerBmp[spieler].Canvas.Ellipse(00, breite, breite);
end;





procedure TForm1.btnEinstellungenClick(Sender: TObject);
begin
FormEinstellungen.ShowModal;
end;

procedure TForm1.btnNeuClick(Sender: TObject);
begin
for i := 0 to FSpielfeldBreite - 1 do
begin
for j := 0 to FSpielfeldHoehe - 1 do FSpielfeld[i,j] := sLeer;
end;

end;
end.


Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 08.03.16 20:48 
Du hast eine Prozedur Darstellen wie ub60 schon sagte. Die rufst du aber nie auf. Das ist als ob du eine Türklinke an eine Tür anbringst, diese aber nie benutzt, dich dann aber wunderst warum die Tür nicht aufgeht.

Dein Formular hat ein Event OnPaint. Dort kannst du die Prozedur aufrufen.
Agathe Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 08.03.16 21:01 
Probier ich mal aus. Danke!