| Autor |
Beitrag |
Krypt0
      
Beiträge: 21
|
Verfasst: 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
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 public 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
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: 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
      
Beiträge: 1207
Erhaltene Danke: 31
Win 10
Delphi 2009 Pro, C++ (Visual Studio)
|
Verfasst: Di 07.10.08 17:50
Also ich sehe nur ein mögliches Problem:
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 
      
Beiträge: 21
|
Verfasst: 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
      
Beiträge: 765
Erhaltene Danke: 130
|
Verfasst: 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 
      
Beiträge: 21
|
Verfasst: Di 07.10.08 18:25
Warum gehts dann bei mir nicht?
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
|
Verfasst: 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
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: 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
|
Verfasst: Di 07.10.08 19:15
Das mein ich! 
|
|
Flamefire
      
Beiträge: 1207
Erhaltene Danke: 31
Win 10
Delphi 2009 Pro, C++ (Visual Studio)
|
Verfasst: Di 07.10.08 19:41
Also dein Code funktioniert:
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 
      
Beiträge: 21
|
Verfasst: Di 07.10.08 19:58
Also was genau muss ich jetzt ändern??
|
|
Flamefire
      
Beiträge: 1207
Erhaltene Danke: 31
Win 10
Delphi 2009 Pro, C++ (Visual Studio)
|
Verfasst: 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
|
Verfasst: Di 07.10.08 21:05
|
|
Flamefire
      
Beiträge: 1207
Erhaltene Danke: 31
Win 10
Delphi 2009 Pro, C++ (Visual Studio)
|
Verfasst: Mi 08.10.08 07:16
nein es sind 2:
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 public 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; |
|
|
|