Autor Beitrag
Krypt0
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Di 07.10.08 17:21 
Hi,
ich versuche grad das Spiel des Lebens zu Programmieren, aber habe Schwierigkeiten...Sobald das Programm gestartet wird, sollen 100*100 shapes erscheinen (also ohne, dass ich vorher 10000Shapes selber ziehen muss) Ich habe folgenden 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:
 

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Titel: TLabel;
    PLAY: TButton;
    PAUSE: TButton;
    SchrittVor: TButton;
    SchrittZurueck: TButton;
    SterbenAbZahl: TEdit;
    SterbenAbOK: TButton;
    SterbenBisOK: TButton;
    SterbenBisZahl: TEdit;
    SterbenBisText: TLabel;
    SterbenAbText: TLabel;
    KonstantBisText: TLabel;
    KonstantBisOK: TButton;
    KonstantBisZahl: TEdit;
    Geschwindigkeit: TScrollBar;
    GeschwindigkeitText: TLabel;
    EntstehenBisText: TLabel;
    KonstantAbText: TLabel;
    EntstehenAbText: TLabel;
    SpawnenText: TLabel;
    EntstehenAbZahl: TEdit;
    KonstantAbOK: TButton;
    KonstantAbZahl: TEdit;
    EntstehenAbOK: TButton;
    EntstehenBisOK: TButton;
    EntstehenBisZahl: TEdit;
    SpawnenOK: TButton;
    SpawnenZahl: TEdit;
    Exit: TButton;
    ZahlenRahmen: TShape;
    Spielfeld: TShape;
    ZeitRahmen: TShape;
    Timer: TTimer;
    procedure ExitClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);


  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  Spielfeld: array[0..101,0..101] of TShape;
  Zwischenspeicher: array[0..101,0..101] of boolean;
  ZuWenigZ, GeborenZVon, GeborenZBis, ZuVielZ, NeuZellX, NeuZellY, EvolutionZeit: integer;

implementation

{$R *.dfm}


 procedure TForm1.ExitClick(Sender: TObject);
begin
close;
end;

procedure TForm1.FormCreate(Sender: TObject);

var
i,j: integer;

begin

  ZuWenigZ:=2;
  GeborenZVon:=3;
  GeborenZBis:=3;
  ZuVielZ:=7;
  NeuZellX:=25;
  NeuZellY:=25;
  EvolutionZeit:=500;
  Timer.Interval:=500;



 for i:= 0 to 101 do
  begin
    for j:= 0 to 101 do
    begin
      Spielfeld[i,j]:=TShape.Create(self);
      Spielfeld[i,j].Shape:=stRectangle;
      Spielfeld[i,j].Width:=6;
      Spielfeld[i,j].Height:=6;
      Spielfeld[i,j].Top :=i*6 - i;
      Spielfeld[i,j].Left:=j*6 - j;
      Spielfeld[i,j].Brush.Color:=clwhite;
      Spielfeld[i,j].Parent:=Form1;

      if i = 0 then
      begin
        Spielfeld[i,j].Width:=0;
        Spielfeld[i,j].Height:=0;
        Spielfeld[i,j].Pen.Width:=0;
      end;
      if i = 101 then
      begin
        Spielfeld[i,j].Width:=0;
        Spielfeld[i,j].Height:=0;
        Spielfeld[i,j].Pen.Width:=0;
      end;
      if j = 0 then
      begin
        Spielfeld[i,j].Width:=0;
        Spielfeld[i,j].Height:=0;
        Spielfeld[i,j].Pen.Width:=0;
      end;
      if j = 101 then
      begin
        Spielfeld[i,j].Width:=0;
        Spielfeld[i,j].Height:=0;
        Spielfeld[i,j].Pen.Width:=0;
      end;

   end;
 end;
end;

end;

end.
end;

Ich hab echt schon alles versucht, doch die Shapes entstehen einfach nicht...
Ich hab keine Ahnung mehr was ich machen kann

MfG Krypt0


Zuletzt bearbeitet von Krypt0 am Di 07.10.08 17:34, insgesamt 1-mal bearbeitet
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Di 07.10.08 17:27 
hi,

bitte editiere deinen beitrag und umschließe deinen Quelltext mit den delphi tags. ungefähr so:
[Delphi]
dein quelltext
[/Delphi]

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Flamefire
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Di 07.10.08 17:50 
Also ich sehe nur ein mögliches Problem:
ausblenden Delphi-Quelltext
1:
2:
Spielfeld[i,j].Top :=i*6 - i;
Spielfeld[i,j].Left:=j*6 - j;


Positionen sind bei: 0|0; 0|5; 0|10
Möglicherweise also außerhalb des sichtbaren bereichs (oder am rand) hast du dort elemente die das verdecken könnten?
Krypt0 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Di 07.10.08 17:58 
Ich könnte sie ja theoritisch unsichtbar machen, oder nicht?

Aber ich verstehe nicht ganz, was genau ich jetzt ändern muss...
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 765
Erhaltene Danke: 130



BeitragVerfasst: Di 07.10.08 18:08 
Also bei mir funktioniert es. Allerdings dauert das Erstellen der 10000 Shapes ewig und frisst Unmengen an Ressourcen.
Ich würde das Ganze auf eine Image-Komponente oder eine Paintbox zeichnen.

ub60
Krypt0 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Di 07.10.08 18:25 
Warum gehts dann bei mir nicht?
ausblenden Delphi-Quelltext
1:
 Spielfeld[i,j]:=TShape.Create(self);					

Dann erscheintdieser Fehler und das obige wird rot markiert...

[Fehler] Unit1.pas(92): Klasse besitzt keine Standardeigenschaft



rapidshare.com/files..._des_Lebens.rar.html

hier nochmal die gesamte datei...
j.klugmann
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 07.10.08 19:04 
Moin!Ich finde es sehr ungeschickt dsa so zu macchen mit den Shapes.Bei mir lädt
mein PC schon 56 min!Und der hat ne Quadcore x4 2,66GHZ!!!

Könnte dein jetziges Problem damit zu tun haben dass das Shape noch keine Eigenschaften besitzt?




PS:Bitte entschuldigt wenn ich schwachsinnige Sachen sage;Ich hab grad nen Tumor im Kopf und
durch die Therapie bin ich ziemlich vergesslich!
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: Di 07.10.08 19:12 
Also das mit den Shapes ist eindeutig ungünstig! Außerdem brauchen die Shapes ein paar bestimmte Eigenschaften, ich glaub Top, Left, Width, Height, Visible, Parent und Name, bin mir aber nicht sicher.
j.klugmann
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 07.10.08 19:15 
Das mein ich! :wink:
Flamefire
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Di 07.10.08 19:41 
Also dein Code funktioniert:
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:
procedure TForm1.FormCreate(Sender: TObject);
var i,j: integer;
    a,b,c:Int64;
begin
  QueryPerformanceFrequency(a);
  QueryPerformanceCounter(b);
  
  ZuWenigZ:=2;
  GeborenZVon:=3;
  GeborenZBis:=3;
  ZuVielZ:=7;
  NeuZellX:=25;
  NeuZellY:=25;
  EvolutionZeit:=500;

 for i:= 0 to 101 do
  begin
    for j:= 0 to 101 do
    begin
      Spielfeld[i,j]:=TShape.Create(self);
      Spielfeld[i,j].Shape:=stRectangle;
      Spielfeld[i,j].Width:=6;
      Spielfeld[i,j].Height:=6;
      Spielfeld[i,j].Top :=i*6 - i;
      Spielfeld[i,j].Left:=j*6 - j;
      Spielfeld[i,j].Brush.Color:=clwhite;
      Spielfeld[i,j].Parent:=Form1;

      if i = 0 then
      begin
        Spielfeld[i,j].Width:=0;
        Spielfeld[i,j].Height:=0;
        Spielfeld[i,j].Pen.Width:=0;
      end;
      if i = 101 then
      begin
        Spielfeld[i,j].Width:=0;
        Spielfeld[i,j].Height:=0;
        Spielfeld[i,j].Pen.Width:=0;
      end;
      if j = 0 then
      begin
        Spielfeld[i,j].Width:=0;
        Spielfeld[i,j].Height:=0;
        Spielfeld[i,j].Pen.Width:=0;
      end;
      if j = 101 then
      begin
        Spielfeld[i,j].Width:=0;
        Spielfeld[i,j].Height:=0;
        Spielfeld[i,j].Pen.Width:=0;
      end;
    end;
 end;
  QueryPerformanceCounter(c);
  Caption:=inttostr((c-b)*1000 div a);
end;


(Nur die Create Prozedur)
Aber: Dauer: ~26s

Etwas lange...aber ok...würde noch gehn

Dein Problem ist: Du hast "spielfeld" schon als TShape deklariert...damit gehts natürlich nicht...

Ich würde dir trotzdem raten, eine Grafik zu nehmen, und dir dort die Bereiche der Felder zu merken.
Wozu brauchst du 10000 Felder (eigendlich sinds sogar 10201)?
Grafik sieht besser aus und ist beim Laden schneller...
Ansonsten-->LadeBildshirm

@jakob: die eigenschaften sind da...Name ist zur Laufzeit nicht nötig
Krypt0 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Di 07.10.08 19:58 
Also was genau muss ich jetzt ändern??
Flamefire
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Di 07.10.08 20:40 
du hast in deinem formular ne komponente "spielfeld"
die löschen/umbenenen oder dein array umbennen

außerdem sind bei dir zuviele "end;"
j.klugmann
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 07.10.08 21:05 
Aber nur eins zuviel!
Flamefire
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Mi 08.10.08 07:16 
nein es sind 2:
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:
 

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Titel: TLabel;
    PLAY: TButton;
    PAUSE: TButton;
    SchrittVor: TButton;
    SchrittZurueck: TButton;
    SterbenAbZahl: TEdit;
    SterbenAbOK: TButton;
    SterbenBisOK: TButton;
    SterbenBisZahl: TEdit;
    SterbenBisText: TLabel;
    SterbenAbText: TLabel;
    KonstantBisText: TLabel;
    KonstantBisOK: TButton;
    KonstantBisZahl: TEdit;
    Geschwindigkeit: TScrollBar;
    GeschwindigkeitText: TLabel;
    EntstehenBisText: TLabel;
    KonstantAbText: TLabel;
    EntstehenAbText: TLabel;
    SpawnenText: TLabel;
    EntstehenAbZahl: TEdit;
    KonstantAbOK: TButton;
    KonstantAbZahl: TEdit;
    EntstehenAbOK: TButton;
    EntstehenBisOK: TButton;
    EntstehenBisZahl: TEdit;
    SpawnenOK: TButton;
    SpawnenZahl: TEdit;
    Exit: TButton;
    ZahlenRahmen: TShape;
    Spielfeld: TShape;
    ZeitRahmen: TShape;
    Timer: TTimer;
    procedure ExitClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);


  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  Spielfeld: array[0..101,0..101] of TShape;
  Zwischenspeicher: array[0..101,0..101] of boolean;
  ZuWenigZ, GeborenZVon, GeborenZBis, ZuVielZ, NeuZellX, NeuZellY, EvolutionZeit: integer;

implementation

{$R *.dfm}


 procedure TForm1.ExitClick(Sender: TObject);
begin
close;
end;

procedure TForm1.FormCreate(Sender: TObject);

var
i,j: integer;

begin

  ZuWenigZ:=2;
  GeborenZVon:=3;
  GeborenZBis:=3;
  ZuVielZ:=7;
  NeuZellX:=25;
  NeuZellY:=25;
  EvolutionZeit:=500;
  Timer.Interval:=500;



 for i:= 0 to 101 do
  begin
    for j:= 0 to 101 do
    begin
      Spielfeld[i,j]:=TShape.Create(self);
      Spielfeld[i,j].Shape:=stRectangle;
      Spielfeld[i,j].Width:=6;
      Spielfeld[i,j].Height:=6;
      Spielfeld[i,j].Top :=i*6 - i;
      Spielfeld[i,j].Left:=j*6 - j;
      Spielfeld[i,j].Brush.Color:=clwhite;
      Spielfeld[i,j].Parent:=Form1;

      if i = 0 then
      begin
        Spielfeld[i,j].Width:=0;
        Spielfeld[i,j].Height:=0;
        Spielfeld[i,j].Pen.Width:=0;
      end;
      if i = 101 then
      begin
        Spielfeld[i,j].Width:=0;
        Spielfeld[i,j].Height:=0;
        Spielfeld[i,j].Pen.Width:=0;
      end;
      if j = 0 then
      begin
        Spielfeld[i,j].Width:=0;
        Spielfeld[i,j].Height:=0;
        Spielfeld[i,j].Pen.Width:=0;
      end;
      if j = 101 then
      begin
        Spielfeld[i,j].Width:=0;
        Spielfeld[i,j].Height:=0;
        Spielfeld[i,j].Pen.Width:=0;
      end; //if

   end;//innere for
 end;//äußere for
end;//prozedur

end;//zuviel

end.
end;//zuviel