Autor Beitrag
olum99
Hält's aus hier
Beiträge: 12



BeitragVerfasst: So 04.05.03 03:12 
ich hab versucht ein programm zu basteln, mit dem man zufallsmaps für wasauchimmer erstellen kann. das meiste is aus den tuts hier :)
bislang kann es nur wasser (bild "0") und land(bild"1") machen.
irgendwas haut mit den arrays nicht hin, ich weiss nicht was.(in der button.click prozedur bei der for to do schleife gibts ne access violation)
ich hatte das array vorher auch schon auf integer und hatte mir so den strtoint kram gespart.
naja hier mal der code, vielleicht seht ihr ja schon auf anhieb was.

ausblenden volle Höhe 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:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DXDraws, StdCtrls, DXSprite, DXClass;

type     zeile = array[1..104] of string[1];
         spalte = array[1..4] of zeile;

type
  tfeld  = class
           text: spalte;
           DXImageList1: TDXImageList;
           DXSpriteEngine1: TDXSpriteEngine;
        procedure gnatur;
        procedure gumwelt;
        procedure ggebaeude;
        procedure gstrasse;
        procedure speichern;
        procedure znatur;
        procedure zumwelt;
        procedure zgebaeude;
        procedure zstrasse;
        procedure zbeschr;
        procedure zkueste;
        procedure laden;
        end;



     TForm1 = class(TForm)
        DXDraw1: TDXDraw;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    DXTimer1: TDXTimer;
    DXImageList1: TDXImageList;
    DXSpriteEngine1: TDXSpriteEngine;
    procedure DXTimer1Timer(Sender: TObject; LagCount: Integer);
    procedure Button1Click(Sender: TObject);



  private

  public

  end;
   TAnimation = class(TImageSprite);

var
  feld: tfeld;

  Form1: TForm1;
  feldn,x,y: integer;
  Animation: TAnimation;


implementation

{$R *.dfm}

procedure tfeld.gstrasse;
begin
text[4][feldn]:=inttostr(0);
end;

procedure tfeld.ggebaeude;
begin
 text[3][feldn]:=inttostr(0);
end;

procedure tfeld.gumwelt;
begin
text[2][feldn]:=inttostr(0);
end;

procedure tfeld.gnatur;
var meer : integer ;
begin
randomize;
meer:=random(10);
if meer>=5 then
text[1][feldn]:=inttostr(0);
if meer<5 then
text[1][feldn]:=inttostr(1);
end;

procedure tfeld.zumwelt;
begin
end;

procedure tfeld.zgebaeude;
begin
end;

procedure tfeld.zstrasse;
begin
end;

procedure tfeld.zbeschr;
begin
end;

procedure tfeld.zkueste;
begin
end;

procedure tfeld.znatur;
var bild: string;
    i,j:    integer;
begin
  feldn:=0;
  x:=0;
  y:=0;
  j:=0;
  for i:=1 to 104 do begin

    feldn:=feldn+1;
    j:=j+1;
        if strtoint(text[1][feldn])=0 then
        bild:=inttostr(0);
        if strtoint(text[1][feldn])=1 then
        bild:=inttostr(1);
         Animation := TAnimation.Create(DXSpriteEngine1.Engine);
         Animation.Image := Form1.DXImageList1.Items.Find(bild);
         Animation.X := x;
         Animation.Y := y;
         Animation.Width := Animation.Image.Width;
         Animation.Height := Animation.Image.Height;
         Animation.AnimCount := 5;
         Animation.AnimLooped := True;
         Animation.AnimSpeed := 20/1000;
         Animation.AnimStart := 0;

    x:=x+72;
    if j = 10 then begin
    x:=-36; y:=y+60; end;
    if j = 21 then begin
    x:=0; y:=y+60; j:=0; end;
  end;
end;

procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
begin
  DXSpriteEngine1.Move(1);
  DXDraw1.Surface.Fill(0);
  DXSpriteEngine1.Draw;
  DXDraw1.Flip;

end;


procedure tfeld.speichern;
begin
end;

procedure tfeld.laden;
begin
end;

procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
x:=0;
y:=0;
feldn:=0;
for i:=0 to 104 do begin
feldn:=feldn+1;
feld.gnatur;
end;
feld.znatur;
end;



end.
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: So 04.05.03 14:32 
was genau funktniert denn nicht ?
achja:
DU solltes vleicht wenn du ein 2D Array benutzt es so machen(ist aber kein fehler)
test[0,3]... macht genau das selbe:)

_________________
MFG
Michael Springwald, "kann kein englisch...."
olum99 Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: So 04.05.03 14:44 
an der zeile hält er sich auf, immer mit ner access violation

ausblenden Quelltext
1:
text[1,feldn]:=inttostr(1);					


das ist das erste mal das er ins array schreiben soll, dh ich denke es wird garnicht richtig initialisiert.

ist statt dem array of string[1] eigentlich auch array of integer möglich?
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: So 04.05.03 15:30 
ja:
ausblenden Quelltext
1:
Map = array[0..MapX,0..MapY] of Integer;					

_________________
MFG
Michael Springwald, "kann kein englisch...."
olum99 Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: So 04.05.03 17:57 
hmm ich hab deine tips eingebaut und noch ne menge rumgerödelt aber gehn will es noch immer nich.

ich hab jetzt das array mit namen map als type definiert:
ausblenden Quelltext
1:
type   map = array[1..104,1..4] of Integer;					

und eine globale variable u vom typ map gemacht:
ausblenden Quelltext
1:
  u: map;					


ich schreib was ins array indem ich einfach dem betroffenen feld einen wert zuweise
ausblenden Quelltext
1:
u[feldn,1]:=0;					


den hol ich mir später so wieder:
ausblenden Quelltext
1:
  bild:=inttostr(u[feldn,1]);					



is das theoretisch richtig?

praktisch is da irgendwo n fehler drin
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Mo 05.05.03 17:26 
wozeichnes du das ?
und was für ein fehler ?
also das sollte eingetlich richtig sein :)
so änlich mache ich das auch immer, aber du hast die karte ja richtig groß gemacht, reichen nicht:
39,27 als größe ?
brauchst doch nur 39*16 und 27(ich nehme immer 23)*16 zu machen.....
ich denke deine Map ist zu groß sonst müsste der code funktionieren...

_________________
MFG
Michael Springwald, "kann kein englisch...."
olum99 Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Di 06.05.03 14:54 
hmm was ich machen wollte war jedem feld eine nummer geben (1-104) und dann halt felder 1-4 (1 grungbeschaffenheut des feldes, 2 was drauf is, 3. gebäude etc) die integer werte als inhalt zugewiesen bekommen was sie halt für eigenschaften haben (1:mine, 2:holzfällerhütte etc).

gezeichnet wird es dann nach reihenfolge und nicht nach koordinaten.

meine aktuelle idee ist ein 3dimensionales array bei dem die ersten beiden werte die koordinaten geteilt durch breite bzw höhe sind (fortlaufende zahlen) und der dritte 1-4 die beschaffenheit des feldes beschreibt.

der vorteil wäre, dass man viel leichter auf die einzelnen felder zugreifen kann (zeichnen x*72,y*60, beschaffenheit=z; außerdem abfragen x div 72 y div 60 beschaffenheit:=z;)

aber im moment check ich grad noch den krams mit den arras nich ganz, meinste wirklich 104*4 werte sind schon zuviel??

hab mir ein paar testprogs gebastelt (bzw basteln lassen :D) und hab die grundlegenden probleme inzwischen gelöst.

nun muss ich mal rausfinden was mit 3dimensionalen arrays alles neu wird.
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Di 06.05.03 15:32 
also auf einen 3D array kannst du versichten(wenn ich dich richtig verstanden habe):
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
type
  TMap = record
    Tex,Typ:Integer;
  end;

var
  Map = Array[0..MapX, 0..MapY] of TMap;


ich denke 104 ist viel zu groß:
1. Du musst scrollen
2. den Speicher musst du auch beachten....
und es gibt mit sichereit noch mehr gründe :)

_________________
MFG
Michael Springwald, "kann kein englisch...."