Показать сообщение отдельно
Старый 18.11.2006, 14:09   #10
DarkKnight
Знающий
 
Регистрация: 09.11.2006
Сообщений: 256
Написано 2 полезных сообщений
(для 2 пользователей)
Re: Нахождение пути

Я опять исправил сам свою ошибку.оказывается я просто забыл поменять тип массива с

byte на integer )
Распознавание препятствий я начал делать так,как предложил jimon,но я не знаю как в

делфи получить X и Y координаты мышки ( Кто знает?
Вот код,может еще где-нить ошибся,или можно сделать попроще,чем я,посмотрите plz:

unit Unit1;

interface

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

type
TForm1 = class(TForm)
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
procedure FormDblClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClick(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
a:array[1..10,1..30] of integer;
i,x,y,n,l,g:integer;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
l:=20;//ширина и высота кубика
//Присваиваем X и У начальные значения
x:=-20;
y:=-20;
//Забиваем в массив Х и Y-координаты
for i:=1 to 30 do
begin
x:=x+l;
y:=y+l;
a[1,i]:=x;
//if y>=470 then y:=470; //Ограничиваем число кубиков по оси Y
a[2,i]:=y;
a[3,i]:=0; //Первоначально присваиваем всем кубикам значение 0,т.е. кубик пустой.
end;
end;

procedure TForm1.FormDblClick(Sender: TObject);
begin
//Берём координаты из массива
//и рисуем квадратики с синей штриховкой
for n:=1 to 30 do
begin
for i:=1 to 30 do
begin
Canvas.Brush.Color := clblue;
Canvas.Brush.Style := bsFDiagonal;
Canvas.Rectangle(a[1,n],a[2,i],a[1,n]+l,a[2,i]+l);
end;
end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
//Берём координаты из массива
//и рисуем пустые квадратики
for n:=1 to 30 do
begin
for i:=1 to 30 do
begin
case a[3,n] of
0:begin //клетка пуста
//Canvas.Brush.Color := clred;
Canvas.Brush.Style := bsClear;
Canvas.Rectangle(a[1,n],a[2,i],a[1,n]+l,a[2,i]+l);
end;
2:begin //начальная точка
Canvas.Brush.Color := clred;
Canvas.Brush.Style := bsSolid;
Canvas.Rectangle(a[1,n],a[2,i],a[1,n]+l,a[2,i]+l);
end;
3:begin //конечная точка
Canvas.Brush.Color := clGreen;
Canvas.Brush.Style := bsSolid;
Canvas.Rectangle(a[1,n],a[2,i],a[1,n]+l,a[2,i]+l);
end;
1:begin //препятствие
Canvas.Brush.Color := clBlue;
Canvas.Brush.Style := bsSolid;
Canvas.Rectangle(a[1,n],a[2,i],a[1,n]+l,a[2,i]+l);
end;
end;
end;
end;
end;

procedure TForm1.FormClick(Sender: TObject);
begin
//for n:=1 to 30 do
//begin
// if <координата мышки X> >=a[1,n] and <координата мышки X> <=(a[1,n]+20)
// and <координата мышки Y> >=a[2,n] and <координата мышки Y> <=(a[2,n]+20)
// then
// begin
// a[3,n]:=2
// Canvas.Brush.Color := clred;
// Canvas.Brush.Style := bsSolid;
// Canvas.Rectangle(a[1,n],a[2,n],a[1,n]+l,a[2,n]+l);
// end;
//end;
//end;
end;
end.
(Offline)
 
Ответить с цитированием