Einzelnen Beitrag anzeigen

mr.winkle

Registriert seit: 25. Mai 2006
98 Beiträge
 
Delphi 7 Personal
 
#1

debugger Exception - pacman macht probleme

  Alt 9. Jun 2006, 17:38
Tag alle zusammen!
Ich hab ein kleines Problem mit nem Programm.
Ich bekommen eine "Benachrichtung über Debugger-Exception" und weiß echt nicht wieso.

Das Programm soll Blöcke anzeigen und einen gelben kreis der sich darin bewegen kann - soll nachher mal so ähnlich wie pacman werden.

Bei
for i:=1 to high(block) do showblock(i); (ganz unten im ontimer ereignis)
gibts diesen Fehler, blau markiert ist dann die zeile
rectangle(bx,by,bx+21,by+21); in tblock.show.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type

  tspieler=class(Tobject)
    x,y:integer;
    procedure show;
    procedure bewegen(dir:string);
  end;

  tblock = class(TObject)
    bx,by:integer;
    da:boolean;
    procedure show;
  end;

  TForm1 = class(TForm)
    Image1: TImage;
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure malelevel(r:integer);
    procedure Timer1Timer(Sender: TObject);
  end;

var
  Form1: TForm1;
  block:array of Tblock;
  level:array[1..14] of string;
  spieler:Tspieler;

implementation

{$R *.dfm}

procedure Tspieler.show;
begin
form1.Image1.Canvas.Brush.color:=clyellow;
form1.Image1.Canvas.Ellipse(x-8,y-8,x+8,y+8);
end;

procedure Tspieler.bewegen(dir:string);
begin
if (dir='links') then dec(x,5);
if (dir='rechts') then inc(x,5);
if (dir='oben') then dec(y,5);
if (dir='unten') then inc(y,5);
end;

procedure Tblock.show;
begin
with form1.image1.Canvas do begin
 brush.color:=clskyblue;
 rectangle(bx,by,bx+21,by+21);
 end;
end;

procedure Tform1.malelevel(r:integer);
var i,k:integer;
begin
if r=1 then begin
level[1]:= 'xxxxxxxxxxxxxxxxxxxx';
level[2]:= 'x xxxx xx';
level[3]:= 'x xxx x x xx';
level[4]:= 'x x xx';
level[5]:= 'x xx x xxx xx xx';
level[6]:= 'x xx x xxx xx xx';
level[7]:= 'x xx x xxx xx xx';
level[8]:= 'xxxxx xxxxxxx xx';
level[9]:= 'xxxxxx xxxxxxxxxxxxx';
level[10]:= 'xx xxxxxx';
level[11]:= 'xxx xx xxxxxxx';
level[12]:= 'x xxxxxxx x';
level[13]:= 'xxxxxxxxxx xxxx';
level[14]:= 'xxxxxxxxxxxxxxxxxxxx';
end;

setlength(block,high(level)*length(level[1]));

for k:=1 to high(level) do
for i:=1 to length(level[k]) do begin
block[i]:=tblock.Create;
block[i].bx:=i*20;
block[i].by:=k*20;
if level[k][i]='xthen block[i].da:=true;
end; end;

procedure TForm1.FormCreate(Sender: TObject);
begin
spieler:=Tspieler.Create;
malelevel(1);
spieler.x:=100;
spieler.y:=50;
spieler.show;
timer1.Enabled:=true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var i:integer;
begin
if GetAsyncKeyState(VK_LEFT)<0 then spieler.bewegen('links');
if GetAsyncKeyState(VK_RIGHT)<0 then spieler.bewegen('rechts');
if GetAsyncKeyState(VK_UP)<0 then spieler.bewegen('oben');
if GetAsyncKeyState(VK_DOWN)<0 then spieler.bewegen('unten');
image1.Canvas.Brush.color:=clwhite;
image1.Canvas.FillRect(image1.ClientRect);
spieler.show;
for i:=1 to high(block) do block[i].show;
end;

end.
  Mit Zitat antworten Zitat