Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Tower Defense Anfang
Andreas95 - Mi 22.12.10 23:55
Titel: Tower Defense Anfang
Also ich habe angefangen meine eigene version von Tower defense zu programmieren.
Um die Bahn (bewegungslinie) der zu abwehrenden Gegner festzustellen, habe ich verschiedene Farben für verschiedene Bewegungen eingerichtet. Grün ist vorwärts (nach rechts), Rot ist nach unten, und Blau ist nach oben.
Ich bin nicht weit gekommen, und schon hatte ich Probleme:
Schaut den Quelltext an. Alles, was ich dort geschrieben habe geht von 1 einzigem gegner aus. (in dieser schnellversion habe ich einen einfachen tshape benutzt).
Hättet ihr eine Idee wie ich diese Bewegungsvorlage für ALLE "Gegner" benutzen kann, ohne das ich den Code unendlich mal kopiere und für den jeweiligem shape umstellen muss?
Und habt ihr noch irgendwelche ideen auf die schnelle, die ihr für mich habt?
quelltext:
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:
| unit Unit2;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Buttons;
type TForm1 = class(TForm) Shape1: TShape; Timer1: TTimer; Shape2: TShape; Shape3: TShape; Shape4: TShape; Shape5: TShape; Shape6: TShape; procedure Timer1Timer(Sender: TObject); procedure FormCreate(Sender: TObject); private public end;
var Form1: TForm1; g,r,b: boolean;
implementation
{$R *.dfm}
procedure TForm1.Timer1Timer(Sender: TObject); begin
case GetPixel(canvas.Handle,shape6.left-5,shape6.top-5) of 32768: shape6.Left := shape6.Left +1; 16777215: shape6.Left := shape6.Left +1; 255: shape6.top := shape6.top +1; 16711680: shape6.top := shape6.top -1; end;
end;
procedure TForm1.FormCreate(Sender: TObject); begin doublebuffered := true; end;
end. |
[/quote]
Moderiert von
Narses: Topic aus Open Source Projekte verschoben am Mi 22.12.2010 um 23:25
Jann1k - Do 23.12.10 00:07
Speicher alle deine Gegner in einem Array oder einer Liste ab, dann kannst du einfach durch das Array iterieren und deinen Code für jeden Gegner ausführen.
Andreas95 - Do 23.12.10 00:23
Hmm ja aber dann müsste ich doch immernoch meinen code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| case GetPixel(canvas.Handle,shape6.left-5,shape6.top-5) of 32768: shape6.Left := shape6.Left +1; 16777215: shape6.Left := shape6.Left +1; 255: shape6.top := shape6.top +1; 16711680: shape6.top := shape6.top -1; end; |
für jeden verschiedenen array einfügen?
könntest du bzw irgendjemand mir einen entsprechenden beispiel geben?
ich programmiere schon lange als hobby, und hatte bis jetzt immer das gleiche problem. erst jetzt ist mir eingefallen, das es einen kürzeren weg geben müsse..
Narses - Do 23.12.10 00:31
Moin!
Mal so als Ansatz: :idea: ;)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| var Shapes: array[0..2] of TShape;
begin Shapes[0] := Shape1; Shapes[1] := Shape2; Shapes[2] := Shape3;
begin for i := 0 to 2 do case GetPixel(Canvas.Handle,Shapes[i].Left-5,Shapes[i].Top-5) of $008000: Shapes[i].Left := Shapes[i].Left +1; $FFFFFF: Shapes[i].Left := Shapes[i].Left -1; $0000FF: Shapes[i].Top := Shapes[i].Top +1; $FF0000: Shapes[i].Top := Shapes[i].Top -1; end; |
cu
Narses
Andreas95 - Do 23.12.10 00:43
Genau sowas suche ich, danke :)
ich zerbrech mir schon seit ewigkeiten darüber den Kopf >.< :autsch:
nochmals danke :D
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!