AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Ungewollter Zugriff auf in einem Array gespeichertes Objekt
Thema durchsuchen
Ansicht
Themen-Optionen

Ungewollter Zugriff auf in einem Array gespeichertes Objekt

Ein Thema von SquareEnix · begonnen am 8. Sep 2009 · letzter Beitrag vom 9. Sep 2009
Antwort Antwort
SquareEnix

Registriert seit: 8. Sep 2009
15 Beiträge
 
Delphi 3 Professional
 
#1

Re: Ungewollter Zugriff auf in einem Array gespeichertes Obj

  Alt 9. Sep 2009, 08:59
Hier der Code. Die Mit >>>> Gekennzeichnete Zeile verursacht den Fehler.
Delphi-Quellcode:
unit Robot;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  DBTables;

type
  TRobot = class(TDatabase)
  private
    { Private-Deklarationen }
    Position:Array[1..2] of integer;
    Winkel_1,Speed:double;
    Ziel: TRobot;

  protected
    { Protected-Deklarationen }
  public
    procedure Zeichnen(Ziel: TBitmap);
    function WinkelBestimmen(X,Y:integer): Double;
    function PPunkt: TPoint;
    function PosX: integer;
    function PosY: integer;
    procedure PositionSetzen(X,Y: integer);
    function Winkel: double;
    procedure WinkelSetzen(NeuerWinkel: double);
    //procedure GeschwindigkeitSetzen(NeueGeschwindigkeit: double);
    procedure Initialisieren(PositionX, PositionY: integer; StartWinkel, Geschwindigkeit: double);
    procedure Step;
    procedure ZielAussuchen(Feinde: Array of TRobot; Prioritaet: integer);
    function EntfernungMessen (Zielpunkt: TPoint): double;
    procedure AufZielRichten;
    { Public-Deklarationen }
  published
    { Published-Deklarationen }
  end;


procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Robot Wars', [TRobot]);
end;

procedure TRobot.AufZielRichten;
begin
WinkelBestimmen(Ziel.PosX,Ziel.PosY);
end;

function TRobot.EntfernungMessen (Zielpunkt: TPoint): double;
var DiffX,DiffY:integer;
begin
DiffX:=Zielpunkt.x-Position[1];
DiffY:=Zielpunkt.y-Position[2];
EntfernungMessen:=Sqrt(DiffX*DiffX+DiffY*DiffY);
end;

procedure TRobot.ZielAussuchen (Feinde: Array of TRobot; Prioritaet: integer);
var i: integer; Entfernung: double;
begin
Entfernung:=1000000;
for i:= 1 to (High(Feinde))+1 do
  begin
    if EntfernungMessen(Feinde[i].PPunkt)<Entfernung then
      begin
      Entfernung:=EntfernungMessen(Feinde[i].PPunkt);
      Ziel:=Feinde[i];
      Showmessage('Ziel gewählt');
      end;
  end;
end;

procedure TRobot.Step;
begin
Position[1]:=Position[1]-Round(Sin(Winkel_1)*Speed);
Position[2]:=Position[2]-Round(Cos(Winkel_1)*Speed);

end;

procedure TRobot.Initialisieren (PositionX, PositionY: integer; StartWinkel, Geschwindigkeit: double);
begin
Position[1]:=PositionX;
Position[2]:=PositionY;
Winkel_1:=StartWinkel;
Speed:=Geschwindigkeit;
end;

procedure GeschwindigkeitSetzen(NeueGeschwindigkeit: double);
begin
//Speed:=NeueGeschwindigkeit;
end;

function TRobot.Winkel: double;
begin
Winkel:=Winkel_1;
end;

function TRobot.PPunkt: TPoint;
begin
PPunkt:=Point(Position[1],Position[2]);
end;

function TRobot.PosX: integer;
begin
PosX:=Position[1];
end;

function TRobot.PosY: integer;
begin
PosY:=Position[2];
end;

procedure TRobot.PositionSetzen(X,Y: integer);
begin
Position[1]:=X;
Position[2]:=Y;
end;

function TRobot.WinkelBestimmen(X,Y:integer): Double;
var Rid:integer; DiffX,DiffY,Plus:real;
begin
Plus:=0;
Rid:=0;
DiffX:=X-Position[1];
DiffY:=Y-Position[2];
if DiffX>0 then
  begin
  if DiffY>0 then
    Plus:=Pi/2;
  if DiffY<0 then
    begin
    Plus:=0;
    Rid:=1;
    end;
  if DiffY=0 then
    Plus:=Pi/2;
  end;
if DiffX<0 then
  begin
  if DiffY>0 then
    begin
    Plus:=Pi;
    Rid:=1;
    end;
  if DiffY<0 then
    Plus:=3*Pi/2;
  if DiffY=0 then
    Plus:=3*Pi/2;
  end;
if DiffX=0 then
  begin
  if DiffY>0 then
    begin
    Plus:=Pi;
    Rid:=1;
    end;
  if DiffY<0 then
    Plus:=2*Pi;
  if DiffY=0 then
    Plus:=0;
  end;
DiffX:=abs(DiffX);
DiffY:=abs(DiffY);
if Rid=1 then
  begin
  if DiffY=0 then
    begin
    Rid:=3;
    DiffY:=0.1;
    end;
  WinkelBestimmen:=ArcTan(DiffX/DiffY)+Plus;
  if Rid=3 then
    Winkelbestimmen:=plus;
  end
else
  begin
  if DiffX=0 then
    begin
    Rid:=2;
    DiffX:=0.1;
    end;
  WinkelBestimmen:=ArcTan(DiffY/DiffX)+Plus;
  if Rid=2 then
    Winkelbestimmen:=plus;
  end;
end;

procedure TRobot.Zeichnen(Ziel: TBitmap);
var Koord : array[1..3] of TPoint;
i :integer;
KoordX, KoordY: array[1..3] of integer;
Winkelz: array[1..3] of double;
begin
Winkelz[1]:=pi;
Winkelz[2]:=2*Pi/3+pi;
Winkelz[3]:=4*Pi/3+pi;
for i:= 1 to 3 do
  begin
  KoordX[i]:=Round(Position[1]+Sin(Winkel_1+Winkelz[i])*10);
  KoordY[i]:=Round(Position[2]+Cos(Winkel_1+Winkelz[i])*10);
  Koord[i]:=Point(KoordX[i],KoordY[i]);
  end;
Ziel.Canvas.Brush.Color:=clred;
Ziel.Canvas.Polygon(Koord);
end;

procedure TRobot.WinkelSetzen(NeuerWinkel: double);
begin
Winkel_1:=NeuerWinkel;
end;


end.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz