Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.04.2010, 21:13   #1
Zuuu92
Новичок
Джуниор
 
Регистрация: 29.04.2010
Сообщений: 2
По умолчанию ход конем

Здравствуйте нужна помощ соответственно суть программы уже описывалась у вас на ++ (на шахматной доске найти кратчайший путь конем между двумя заданными клетками) ссылка на тему вот http://www.programmersforum.ru/showthread.php?t=380 проблема в том что мне нужно написать это на делфи ... оформление я сделать могу в принципе и уже сделал но вот алгоритм не знаю как исправить и как сум путь показать вот примерный мой черновой код... очень прошу помочь с алгоритмом ((

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    grid1: TStringGrid;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure true(Sender: TObject; ACol, ARow: Integer; Rect: TRect;
      State: TGridDrawState);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
const
  Path = 'C:\Users\asus\Desktop\1.bmp';
cx:array[1..8] of -2..2=(2, 1,-1,-2,-2,-1, 1, 2);
cy:array[1..8] of -2..2=(1, 2, 2, 1,-1,-2,-2,-1);
var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.true(Sender: TObject; ACol, ARow: Integer; Rect: TRect;
  State: TGridDrawState);
//красим ячейки
var
  i,j,i1,j1:Integer;
begin
i1:=0;
j1:=0;
for j:=0 to 7 do
  begin
  j1:=j1+1;
  if(j1 mod 2 = 0) then
    begin
    for i:=0 to 7 do
      begin
      i1:=i1+1;
      if (i1 mod 2 = 0) then
        begin
        Rect:=grid1.CellRect(i,j);
        with grid1.Canvas do
          begin
          Brush.Color:=clwhite;
          FillRect(Rect);
          end;
        end
      else
        begin
        Rect:=grid1.CellRect(i,j);
        with grid1.Canvas do
          begin
          Brush.Color:=clblack;
          FillRect(Rect);
          end;
        end;
      end;
    end
  else
    begin
    for i:=0 to 7 do
      begin
      i1:=i1+1;
      if (i1 mod 2 = 0) then
        begin
        Rect:=grid1.CellRect(i,j);
        with grid1.Canvas do
          begin
          Brush.Color:=clblack;
          FillRect(Rect);
          end;
        end
      else
        begin
        Rect:=grid1.CellRect(i,j);
        with grid1.Canvas do
          begin
          Brush.Color:=clwhite;
          FillRect(Rect);
          end;
        end;
      end;
    end;
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  BitMap:TBitMap;
  Rect:TRect;
  j,i:Integer;
begin
j:=strtoint(Edit1.text)-1;
i:=strtoint(Edit2.text)-1;
Rect:=grid1.CellRect(i,j);
BitMap:=TBitMap.Create;
(BitMap as TBitMap).LoadFromFile(Path);
grid1.Canvas.StretchDraw(Rect,(BitMap as TBitmap));
BitMap.Free;
button1.Enabled:=False;
grid1.Canvas.FrameRect(rect);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  BitMap:TBitMap;
  Rect:TRect;
  a,b:Integer;
begin
b:=strtoint(Edit3.text)-1;
a:=strtoint(Edit4.text)-1;
Rect:=grid1.CellRect(a,b);
BitMap:=TBitMap.Create;
(BitMap as TBitMap).LoadFromFile(Path);
grid1.Canvas.StretchDraw(Rect,(BitMap as TBitmap));
BitMap.Free;
button2.Enabled:=False;
grid1.Canvas.FrameRect(rect);
end;

{процедура закрашивания одной ячейки}
procedure DrawCell(var grid:TStringGrid;   i1,j1: integer);
var
Rect:TRect;
begin
  Rect:=grid.CellRect(i1,j1);
  with grid.Canvas do
   begin
    Brush.Color:=$0080FF;
    FillRect(Rect);
    end;
end;

procedure TForm1.Button3Click(Sender: TObject);
type
 mass=array[1..8,1..8] of integer;
Var
  f:mass;
  j,i:integer;
Procedure KON(var doska:mass;x,y,i:integer);
Var k,u,v,i2,j2,kol:integer;

procedure MIN;
var i1,j1:integer;
     C:mass;
begin
if i<kol then begin
kol:=i;
for i1:=1 to 8 do
for j1:=1 to 8 do C[i1,j1]:=doska[i1,j1];
end;
end;
Begin
k:=0;
i2:=strtoint(Edit3.text)-1;
j2:=strtoint(Edit4.text)-1;
repeat
k:=k+1;
u:=x+cx[k];
v:=y+cy[k];
if (u>=1)and(u<=8)and(v>=1)and(v<=8)and(doska[u,v]=0) then
 begin doska[u,v]:=i;
 if (u=i2)and(v=j2) then
  begin
  min;
  doska [u,v]:=0;
  k:=8;
  end
 else
  begin
  if i<kol then
  KON(doska,u,v,i+1);
  end;
 end;
  DrawCell(grid1,u,v);
until k=8;
end;
begin
j:=strtoint(Edit1.text)-1;
i:=strtoint(Edit2.text)-1;
KON(f,j,i,1);
end;

end.

Последний раз редактировалось Zuuu92; 29.04.2010 в 21:51.
Zuuu92 вне форума Ответить с цитированием
Старый 29.04.2010, 22:16   #2
Zuuu92
Новичок
Джуниор
 
Регистрация: 29.04.2010
Сообщений: 2
По умолчанию

вот ели так запускать прогу то он красит поля куда может пойти конь из начальной точки и всёёё ((
Zuuu92 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ход конем Etlau Помощь студентам 3 28.05.2010 19:16
Обход конем шахмотной доки Evgeniy21 Помощь студентам 1 28.01.2010 01:16
Методы решения задач типа: ход конем Levsha100 Свободное общение 14 01.10.2009 19:33
Задача "Ход конем" WormsSs Общие вопросы C/C++ 14 29.11.2008 16:25