Руководство пользователя 42 Сайт конкурса 42 Программная реализация 47 Сайт конкурса 47 Структура каталога задачника кио-2005 48 Функция определения пересечения 2-х отрезков 50 Окна помощи 51 Задача «Шахматы со спящим противником»




Скачать 0.97 Mb.
Название Руководство пользователя 42 Сайт конкурса 42 Программная реализация 47 Сайт конкурса 47 Структура каталога задачника кио-2005 48 Функция определения пересечения 2-х отрезков 50 Окна помощи 51 Задача «Шахматы со спящим противником»
страница 11/11
Дата публикации 22.09.2014
Размер 0.97 Mb.
Тип Руководство пользователя
literature-edu.ru > Курсовая работа > Руководство пользователя
1   2   3   4   5   6   7   8   9   10   11

Функция определения пересечения 2-х отрезков







Не параллельные отрезки:

=>



Если , то отрезки параллельны.





Теперь сама функция:
function intersection( x1,y1,x2,y2,x3,y3,x4,y4 : extended ):boolean;
var delta,c,d : extended;
begin
delta := -(x2-x1)*(y4-y3)+(y2-y1)*(x4-x3);
// В случае, когда отрезки параллельны, в этой программе мы можем считать,

// что они не пересекаются.
if abs(delta) < eps then begin result:=false; exit; end;

// Если отрезки непараллельные, то ищем коэффициенты при векторах

c := (-(x3-x1)*(y4-y3)+(y3-y1)*(x4-x3))/delta;
d := ((x2-x1)*(y3-y1)-(y2-y1)*(x3-x1))/delta;
result := (eps < c) and (c < 1-eps) and
(eps < d) and (d < 1-eps);
end;


Окна помощи



Для всех задач используется один компонент «Окно помощи» TFHelp. Помощь к конкретной игре помещается в поле Rules. При выводе (метод Show) форма изменяет размеры подстраиваясь под содержимое поля Rules. Поле DontShowOnStart «Не показывать это окно при запуске» обрабатывается в других формах (т.е. внутри этой формы не значение поля не используется).

Задача «Шахматы со спящим противником»



Стоит задача – съесть как можно больше черных фигур белым конём. При данном на конкурс расположении можно съесть все фигуры.

Участник можете передвигать только одну фигуру – белого коня. Передвижение осуществляется при помощи «мыши» с помощью стандартной операции «Drag and drop», то есть: нужно навести курсор мыши на коня, нажать левую кнопку мыши, потом (не отпуская левой кнопки мыши) подвести курсор мыши туда, куда нужно поставить коня и отпустить левую кнопку мыши (перетащить коня).

В начале белый конь стоит в левой нижней клетке поля. Клетки, куда он может ходить, подсвечиваются красными квадратиками. Клетки, которые «бьют» чёрные фигуры, подсвечены зеленым цветом.

Кнопка «Помощь» служит для открытия окна с описанием задания.



Кнопка «Выход» служит для закрытия окна задачи. Если при нажатии на кнопку «Выход» состояние игрового поля не сохранено, выводится предупреждающее окно.



Кнопка «Откат» служит для отмены последнего хода.

В поле «Список ходов» записываются ходы участника. Если при очередном ходе участник «съел» чёрную фигуру, то название фигуры указывается после хода.

В поле «Рекорд» записывается текущее минимальное число ходов, за которые участник смог съесть все фигуры.

Поле «Осталось чёрных фигур» содержит количество оставшихся чёрных фигур.

Группа «Загрузка / сохранение»:

«Начать заново» - отменить все сделанные ходы и начать игру заново;

«Загрузить поле» - загрузить ранее сохранённое состояние игры из файла. При нажатии на кнопку появляется стандартное диалоговое окно, в котором можно выбрать имя файла.

«Сохранить поле» - записать состояние игры в файл. При нажатии на кнопку появляется стандартное диалоговое окно, в котором можно выбрать имя для файла. Расширение для файлов в этой задаче «.map».



Данные рекорда автоматически сохраняются в каталог Olymp. Эти данные используются при сборе данных для отправки на сайт в форме FUpload.

Задача «Меандры»



Задача «Автомат для голосования»


  1. Не допустить пересечение элементов

Список элементов хранится в списке ElementsList. При создании/перетаскивании элемента проверяем, не пересекается ли его прямоугольник с прямоугольниками другх элементов, окружающие элементы (прямоугольники выбираются «с запасом» по краям). Если пересекаются, то не допускаем такое перемещение.

Определить, пересекаются ли прямоугольники можно следующим образом:

Проверить для каждой из 4-х вершин каждого прямоугольника, лежит ли она внутри другого прямоугольника.

Условие, что точка лежит внутри прямоугольника:

,

где - координаты точки,

- координаты верхнего левого угла прямоугольника,

- координаты левого нижнего угла прямоугольника.

Координаты отсчитываются от верхнего левого угла. Ось направлена вправо, ось направлена вниз.

Условие пересечения прямоугольников.

Пусть - параметры первого прямоугольника,

- параметры второго прямоугольника,

Тогда условие пересечения запишется в виде восьми копий условия, что точка лежит внутри прямоугольника:
// Точка внутри прямоугольника
function Point_In_Rect( X,Y:Integer; R:TRect ):boolean;
begin
Result := (R.Left <= X) and (X <= R.Right) and
(R.Top <= Y) and (Y <= R.Right);
end;

// Пересечение двух прямоугольников
function Rect_Intersect( R1,R2 : TRect ):boolean;
begin
Result := Point_In_Rect( R1.Left, R1.Top, R2 ) or
Point_In_Rect( R1.Right, R1.Top, R2 ) or
Point_In_Rect( R1.Left, R1.Bottom, R2 ) or
Point_In_Rect( R1.Right, R1.Bottom, R2 ) or
Point_In_Rect( R2.Left, R2.Top, R1 ) or
Point_In_Rect( R2.Right, R2.Top, R1 ) or
Point_In_Rect( R2.Left, R2.Bottom, R1 ) or
Point_In_Rect( R2.Right, R2.Bottom, R1 );
end;

Загрузка решений на сайт

Отправление из PHP письма с вложением


Как послать письмо в HTML виде? Присоедините к письму аттач с названием message.html и письмо превратиться в HTML-письмо!