Autor Beitrag
Andreas95
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: Mi 22.12.10 23:55 
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:
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:
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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  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-5of
    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 user profile iconNarses: Topic aus Open Source Projekte verschoben am Mi 22.12.2010 um 23:25
Einloggen, um Attachments anzusehen!
Jann1k
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: Do 23.12.10 00:23 
Hmm ja aber dann müsste ich doch immernoch meinen code:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
 case GetPixel(canvas.Handle,shape6.left-5,shape6.top-5of
    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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 23.12.10 00:31 
Moin!

Mal so als Ansatz: :idea: ;)
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
var
  Shapes: array[0..2of TShape;

begin // FormCreate
  Shapes[0] := Shape1;
  Shapes[1] := Shape2;
  Shapes[2] := Shape3;

begin // OnTimer
  for i := 0 to 2 do
    case GetPixel(Canvas.Handle,Shapes[i].Left-5,Shapes[i].Top-5of
      $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

_________________
There are 10 types of people - those who understand binary and those who don´t.

Für diesen Beitrag haben gedankt: Andreas95
Andreas95 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: 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