Волновой алгоритм Delphi
Автор: zacetavtom11 • Январь 26, 2021 • Задача • 2,396 Слов (10 Страниц) • 270 Просмотры
unit Chess;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Square: TLabel; //Образец одной клетки доски
StaticText1: TStaticText; //Для сообщений
procedure FormCreate(Sender: TObject);
procedure SquareClick(Sender: TObject);
procedure StaticText1DblClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
//==============================
var
Form1: TForm1;
{----------------------------------------------------------------}
{----------- Описание кольцевой очереди как объекта -------------}
{----------------------------------------------------------------}
Const
n=100; //Максимум элементов в очереди
Type
Para=Record //Пара координат
x,y:Integer;
End;
Data=Para; //Тип элементов очереди
TRing=Class(TObject) //Описываем класс очередей TRing
q:Array[0..n-1] of Data; //Массив для хранения элементов
Head:Integer; //Голова очереди
Tail:Integer; //Хвост очереди
Error:Boolean; //Номер ошибки
Constructor Create; //КОНСТРУКТОР (создаёт объект)
Procedure Put(a:Data); //Вставка данных в хвост очереди
Function Get:Data; //Извлечение данных из головы
Destructor Destroy; override; //ДЕСТРУКТОР (разрушает объект)
End;
{---------------------------------------------------------------}
implementation
{$R *.dfm}
//==============================
Const
m=10; //Размер шахматной доски
Var
//==============================
D:Array[0..m-1,0..m-1] Of TLabel; //Массив клеток доски
Ch:Array[0..m-1,0..m-1] Of String= //Начальная расстановка фигур
(('K', '', '', '', '', '', '', '', '', ''),
( '', '', '','Y','Y','Y', '', '', '', ''),
( '', '', '','Y', '','Y', '', '', '', ''),
( '', '', '','Y','Y','Y', '', '', '', ''),
( '', '', '', '', '', '', '', '', '', ''),
( '', '', '', '', '', '', '', '', '', ''),
( '', '', '', '', '', '', '', '', '', ''),
( '', '', '', '', '', '', '', '', '', ''),
( '', '', '', '', '', '', '', '', '', ''),
( '', '', '', '', '', '', '', '', '', ''));
Tag:Integer=0; //Начальные координаты коня (в m-ичном коде)
//Пара массивов ниже, содержит данные о 8 ходах коня.
//Определяется количество клеток, на которые надо смещать коня за 1 ход
StepX:Array[1..8] Of Integer = ( 1, 2, 2, 1,-1,-2,-2,-1); //по горизонтали
StepY:Array[1..8] Of Integer = ( 2, 1,-1,-2,-2,-1, 1, 2); //по вертикали
{----------------------------------------------------------------}
{---------- Создание процедур, обслуживающих очередь ------------}
{----------------------------------------------------------------}
...