UNIT algorob; INTERFACE uses crt; const e0 = 1e-2; const Dark = 0; Blue = 9; White = 15; Grey = 7; Green = 10; Yellow = 14; SkyBlue = 11; Brown = 6; Red = 12; {основные цвета} const ScrText = 0; ScrGraph256 = 19; {основные экранные режимы} type Robot = object x,y:real; {координаты} alfa:real; {ориентация в пространстве} Nose:char; {запах, который чувствуешь} go:integer; {кол-во взятых объектов} procedure Move(R:real); {вперёд на R метров} procedure Remove(R:real); {назад на R метров} procedure Left(R:real); {влево} procedure Right(R:real); {вправо} procedure Refresh; {обновить изображение} procedure CloseEyes; {показать видимое закрытыми глазами} function TypeOfObj(R1,R2:real):byte; {тип объекта} end; type Obj = record {характеристика объекта} xo,yo,ao:real; {ao - характеристика только стен} tip:byte {tip - один из типов (18..255)} end; type Territory = object they:array [1..500] of obj; {список объектов} nnn:integer; {кол-во объектов} procedure Clear; {удалить все объекты} procedure Delete(R:integer); {удалить объект с номером R} procedure Add(R:obj); {добавить объект} procedure Draw(R1,R2:integer); {нарисовать поле со смещ. R1,R2} end; var sc:integer; {установленый режим} xs,ys:integer; {смещение поля в метрах} cs:byte; {выбранный тип объекта} robi:robot; {объект "робот"} pole:territory; {поле (объект "территория")} names:array [18..255] of string [20]; {название типа объектов} WALLorBALL:array [18..255] of boolean;{тип типа объекта (FALSE-шар, TRUE-стена)} i,j:integer; {переменные цикла (для удобства)} jk:integer; {1, если нажата добавочная клавиша} screen:array [1..200,1..320] of byte absolute $a000:0000; palitra:array [0..10,0..255,1..3] of byte; actpal,color:integer; procedure ModeColor(n,r,g,b:byte); { } procedure SetColor(a:byte); { Г Р } procedure SetPalitra(a:byte); { А } procedure PutPixel(x,y:integer); { Г Ф } procedure Circle(x,y,n:integer); { Р И К А } procedure Bar(x,y,x1,y1:integer); { А } procedure Line(x,y,x1,y1:integer); { Ф И К А } procedure CircPaint(x,y,r:integer); { } procedure Help(R:string); {условие задачи и инструкция} procedure ToMouse; {перейти к управлению мышью} procedure DrawService; {нарисовать всё, кроме полей} procedure Scr(R:integer); {установить нужный экранный режим} procedure Cyfr(R:integer; R1,R2:integer); {поставить цифру R в место (R1; R2)} function Ugol(R:integer):real; {перерасчёт пикселей в угол} function Pixel(R:real):integer; {перерасчет углов в пиксели: угол: вверх(+), вниз(-), влево(+), вправо(-), [-pi/4;pi/4]} function Tan(R:real):real; {тангенс угла} function ugol_0_2pi(R:real):real; {приведение угла к [0;2*pi)} function ugol_0subPI_pi(R:real):real; {приведение угла к [-pi;pi)} procedure MouseInit; {инициализация мыши} procedure MouseShow; {видимая мышь} procedure MouseHide; {невидимая мышь} procedure MousePos(mx,my:integer); {переместить мышь в точку} function MouseKey:integer; {узнать клавишу мыши} function MouseX:integer; {узнать координату X мыши} function MouseY:integer; {узнать координату Y мыши}