Einzelnen Beitrag anzeigen

Informatik2012

Registriert seit: 30. Mai 2011
30 Beiträge
 
#1

Zugriffsverletzung bei Adresse ...

  Alt 30. Mai 2011, 10:53
Also folgendes Problem. Wir haben ein freies Projekt auf, und haben uns für ein Labyrinth-Spiel entschieden. Aber alleine schon nur beim Spielsystem tritt der Fehler "zugriffsverletzung bei adresse 00411C1A".
Der für den Fehler relevante Quellcode ist wie folgt:
Delphi-Quellcode:
unit game;

interface

type TFeld = class(TObject)
          private
           fx_koo : integer;
           fy_koo : integer;
           l_wand: boolean;
           r_wand: boolean;
           o_wand: boolean;
           u_wand: boolean;
           schatz: boolean;

          public
           property x_koo : integer read fx_koo;
      property y_koo : integer read fy_koo;
           procedure set_koo(x,y : integer);

      property owand : boolean read o_wand;
      property lwand : boolean read l_wand;
      property rwand : boolean read r_wand;
           property uwand : boolean read u_wand;
      procedure set_wand(o,u,r,l : boolean);
     end;

type TMensch = class(TObject)
          private
           fx_koo : integer;
           fy_koo : integer;
           schatz : boolean;
           IP_private : integer;
           bewegen : boolean;
           anzahl_bewegen : integer;

          public
      property x_koo : integer read fx_koo;
      property y_koo : integer read fy_koo;
      procedure set_koo(x,y : integer);
      property IP : integer read IP_private;
      procedure set_IP(IP:integer);
     end;

     TMap= array of array of TFeld;

function generiere_karte(x_Laenge,y_Laenge : integer):TMap;
procedure loesche_karte(Map: TMap);


function generiere_mensch(IP,x,y: integer):TMensch;
procedure loesche_mensch(Mensch :TMensch);
function laufe_oben(Mensch : TMensch; Map : TMap):boolean;
function laufe_unten(Mensch : TMensch; Map : TMap):boolean;
function laufe_rechts(Mensch : TMensch; Map : TMap):boolean;
function laufe_links(Mensch : TMensch; Map : TMap):boolean;
function bewegen(Mensch : TMensch):boolean;
Das ist die Typen-Deklaration. Und die Fehlerrelevanten Funktionen:
Delphi-Quellcode:
procedure TFeld.set_koo(x,y : integer);
begin
 fx_koo :=x;
 fy_koo :=y;
end;

procedure TFeld.set_wand(o,u,r,l : boolean);
begin
 o_wand := o;
 u_wand := u;
 r_wand := r;
 l_wand := l;
end;

procedure TMensch.set_koo(x,y : integer);
begin
 fx_koo :=x;
 fy_koo :=y;
end;

procedure TMensch.set_IP(IP : integer);
begin
 IP_private := IP;
end;

function generiere_karte(x_Laenge,y_Laenge : integer):TMap;
var i,k,i2,k2 : integer;
begin
 i2:=0;
 k2:=0;
 SetLength(Result,x_Laenge,y_Laenge);
 for i:=0 to x_laenge-1 do
 begin
  for k:=0 to y_Laenge-1 do
  begin
   Result[i,k]:=TFeld.Create;
   with Result[i,k] do
   begin
    fx_koo:=i2;
    fy_koo:=k2;
    set_wand(False,False,False,False);
    schatz:=False;
(*    if i=0 then o_wand:=true;
    if i=x_laenge-1 then u_wand:=true;
    if k=0 then l_wand := true;
    if k=y_laenge-1 then r_wand:= true;   *)

   end;
  inc(k2);
  end;
  inc(i2);
 end;
end;

function generiere_mensch(IP,x,y: integer):TMensch;
begin
 Result.Create;
 Result.IP_private := IP;
 Result.set_koo(x,y);
 Result.anzahl_bewegen := 0;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 x:=20;
 y:=20;
 Map:=generiere_karte(10,10);
 Mensch1:=generiere_mensch(1,1,1);
 PaintBox1.Color:=clWhite;
 Paintbox1.Canvas.Rectangle(x,y,x+20,y+20);
end;
Nach dem Klicken des Buttons wird nicht gezeichnet und die Fehlermeldung kommt nach einiger Zeit.
  Mit Zitat antworten Zitat