Entwickler-Ecke
Multimedia / Grafik - 2-dimensionales Array für Kartenerstellung abfragen
Elayla - So 08.06.03 22:02
Titel: 2-dimensionales Array für Kartenerstellung abfragen
Ich hab ein kleines Problem, ich will ein Testprogramm schreiben das ein Array füllt mit den Nummern 1-3, welche Kartenstückchen representieren.
Jetzt möchte ich die Stückchen zeichnen, dafür habe ich eine Case-Of Abfrage in einer Repeat-Schleife eingebettet (Ich weiss das is sehr plump, aber mir fällt nix anderes ein :oops: )
Aber ich weis nicht wie man ein 2-dimensionales Array mit Case-Of "Vergleicht" und irgendwie funktioniert meine Prozedur nicht,
vielleicht könnt ihr mir ja helfen :wink:
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:
| procedure Mapcreate; var x,y,i,j:integer; Begin x:=0; y:=0; i:=0; j:=0; Repeat Repeat Case Map[i,j] of 1: Begin Form1.DXImageList1.Items[0].Draw(Form1.DXDraw1.Surface,x,y,0); End; 2: Begin Form1.DXImageList1.Items[1].Draw(Form1.DXDraw1.Surface,x,y,0); End; 3: Begin Form1.DXImageList1.Items[2].Draw(Form1.DXDraw1.Surface,x,y,0); End; End; x:=x+40; i:=i+1; Until x=640; y:=y+40; j:=j+1; Until y=480;
End; |
Moderiert von
tommie-lie: Delphi-Tags hinzugefügt
umpani - So 08.06.03 22:14
Hallo,
deine Procedure funktioniert deshalb nicht, weil du die i variabele nicht mehr auf 0 zurücksetzt (nach der ersten Repeatschleife).
Aber wenn dein Array aus Integerwerten besteht, dann machs doch so (ist viel kürzer):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure Mapcreate; var x,y:integer; Begin
for x := 1 to 12 do for y := 1 to 16 do begin Form1.DXImageList1.Items[map[x,y]-1].Draw(Form1.DXDraw1.Surface,x*40,y*40,0); end; Form1.DXDraw1.flip: End; |
Moderiert von
tommie-lie: Code- durch Delphi-Tags ersetzt
Elayla - So 08.06.03 22:20
Umpf, stimmt das is viel besser :D
Naja man merkt das Abends die Luft weg is bei mir :wink:
Ich probiers gleich mal aus, danke dir :)
Elayla - So 08.06.03 22:32
Hmm der rechnet ne Weile zeigt aber nix an.
Prozedur scheint also zu funktionieren.
Stimmt diese Prozedur denn?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.DXDraw1Initialize(Sender: TObject); var x,y:integer; begin Randomize; For x:=1 To 16 Do For y:=1 To 12 Do Begin Map[x,y]:=random(3)+1; End; Mapcreate; end; |
Dürfte doch nix falsch sein, auf alle Einstellungen habe ich auch geachtet, wo könnte der Fehler liegen?
Achso, ich habe Form1.DXDraw1.Flip mit in die Schleife reingenommen, weil er sonst ja nur das letzte Feld zeichnet(oder?)
Moderiert von
tommie-lie: Delphi-Tags hinzugefügt
P.S.: Demnächst bitte Delphi-Tags für Quellcodes nehmen, Danke! :)
Elayla - So 08.06.03 22:43
Hmm ich hab die Prozedur mit OnClick aufgerufen und nu funktionierts super :)
Warum funktioniert der Prozeduraufruf "Mapcreate" in keiner anderen Art und Weise, nur bei Click, nicht bei Initialize, nicht bei Enter, nix :cry:
umpani - Mo 09.06.03 10:12
Versuch es mal nicht mit
procedure mapcrate;
sondern mit
procedure tform1.mapcreate;
Dann musst du es nur noch entsprechend in den Dateikopf eintragen.
Und denk daran, die Imagelist auf das dxdraw zu initialisieren.
Elayla - Mo 09.06.03 10:55
K ich versuchs gleich mal, danke :)
Uhh, wie ruf ich die Prozedur auf?:
procedure TForm1.Mapcreate(Sender: TObject; a,b:integer);
mimi - Mo 09.06.03 17:09
Delphi-Quelltext
1:
| Form1.Mapcreate(Sender; a,b:integer); |
Elayla - Mo 09.06.03 17:19
Ahh ok, a und b sind die Positionen von denen die Prozedur anfangen soll die Karte zu zeichen, damit ich auch noch nach links und rechts scrollen kann :)
mimi - Mo 09.06.03 18:54
a heißt eingetlich x und b heißt y :)
Elayla - Mo 09.06.03 18:56
Jain ^^
Hier zum nachvollziehen :P
| Zitat: |
procedure Mapcreate(a,b:integer);
var
x,y:integer;
Begin
if activ = 1 Then
Begin
Form1.DXDraw1.Surface.Fill(0);
for x := 1 to 16 do
for y := 1 to 12 do
begin
Form1.DXImageList1.Items[(map[a+x,b+y]-1)].Draw(Form1.DXDraw1.Surface,(x-1)*40,(y-1)*40,0);
end;
Form1.DXDraw1.flip;
End;
activ:=2;
End; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!