Лабораторные работы (2010) (Отчет_1)

Посмотреть архив целиком

Отчет по лабораторной работе №1 по дисциплине теория принятия решений.



Проектирование с помощью инструментального комплекса СИМПР.

Программа, имитирующая тест-драйв.











Выполнил студент группы А-16-07

Коренченко Филипп

Приняли Гречкина П. В. Еремеев А. П.

11.03.2010













МЭИ (ТУ)

Содержание:

Постановка задачи…………………………………………………с. 3

Общее описание предметной области……………….с. 3

Описание табличной модели……………………………….с. 3

Описание приложения………………………………………….с. 9

Примеры работы программы……………………………….c. 19















































Постановка задачи.

Разработать табличную модель принятия решений в среде СИМПР, и написать имитационный модуль программы. Объект моделирования – тест-драйв с четырьмя машинами.



Общее описание предметной области.

Цель модели: необходимо проехать каждой машиной всю трассу.

Стратегия машины 1: может лишь ехать по прямой и поворачивать.

Стратегия машины 2: может ехать по прямой, поворачивать, а также обгонять машину, которая находится справа или слева, и закрывать ей дорогу.

Стратегия машины 3: может ехать по прямой, поворачивать а также догонять машину, которая закрыла ей дорогу.

Стратегия машины 4: может ехать по прямой, поворачивать и догонять машину, которая находится впереди.

Как только все машины приходят к финишу, программа завершается.



Описание табличной модели.

Для реализации игры потребовалось шесть таблиц:

Таблица 1: Распределение машин.

Распределяет машины в начале игры.

Таблица 2: Стратегия машины 1.

Выбирает следующий ход машины 1.

Таблица 3: Стратегия машины 2.

Выбирает следующий ход машины 2.

Таблица 4: Стратегия машины 3.

Выбирает следующий ход машины 3.

Таблица 5: Стратегия машины 4.

Выбирает следующий ход машины 4.

Таблица 6: Финиш.

Проверяет, все ли машины на финише.



Описание приложения.

Программа разработана в среде CodeGear Rad Studio 2007 на языке Delphi.

Исходный код:

Основные переменные для работы:

TCar = record

x, y: integer; // координаты машины

Fin: boolean; // машина на финише?

LC, RC: boolean; //справа или слева мпшина

LO, RO: boolean; //была обогнана слева или справа;

LF, RF: boolean; // справа или слева впереди машина

a: boolean; // начало действия особых правил

Pic: byte; // номер картинки

Ex: boolean; // есть ли машина на трассе

Pos: byte; // позиция машины на трассе

Speed: byte; // скорость

n: integer; // количество обгонов

end;


TTurn = record

x1, x2, y1, y2: integer;

end;


var

Form1: TForm1;

Car: array[1..4] of TCar; // четыре машины

CPS: array[1..4] of integer; // номер машины относительно позиции

Turn: array[1..16] of integer; // массив точек поворота

FA: array[1..2] of TTurn; // точки финиша и начала действия специальных правил

TempCPS: integer; // временная переменная

CarF: array[1..4] of integer; // все ли машины на финише?

CarFN: integer; // счетчик

Главная процедура WndProc:

procedure TForm1.WndProc(var Message: TMessage);

var

res: boolean;

u1: boolean;

begin

if Message.Msg = msgSIMPR then

begin

res:=false;

if Message.WParamHi = 0 then

begin

case Message.WParamLo of

1: begin

case Message.LParam of

1: begin

if (not car[1].Ex) and (not car[2].Ex) and

(not car[3].Ex) and (not car[4].Ex) then

res:=true;

end;

2: begin

if (car[1].Ex) and (not car[2].Ex) and

(not car[3].Ex) and (not car[4].Ex) then

res:=true;

end;

3: begin

if (car[1].Ex) and (car[2].Ex) and

(not car[3].Ex) and (not car[4].Ex) then

res:=true;

end;

4: begin

if (car[1].Ex) and (car[2].Ex) and

(car[3].Ex) and (not car[4].Ex) then

res:=true;

end;

5: begin

if (car[1].Ex) and (car[2].Ex) and

(car[3].Ex) and (car[4].Ex) then

res:=true;

end;

end;

end;

2: begin

case Message.LParam of

1: begin

if (not CarInTurn(Car[1].x, Car[1].y, 1, 1)) and (not Car[1].Fin) then

res:=true;

end;

2: begin

if not Car[1].Fin then

if CarInTurn(Car[1].x, Car[1].y, 1, 2) then

res:=true;

end;

3: begin

if not Car[1].Fin then

if CarInTurn(Car[1].x, Car[1].y, 1, 3) then

res:=true;

end;

4: begin

res:=Car[1].Fin;

end;

end;

end;

3: begin

case Message.LParam of

1: begin

if (not CarInTurn(Car[2].x, Car[2].y, 2, 1)) and (not Car[2].Fin) then

res:=true;

end;

2: begin

if not Car[2].Fin then

if CarInTurn(Car[2].x, Car[2].y, 2, 2) then

res:=true;

end;

3: begin

if not Car[2].Fin then

if CarInTurn(Car[2].x, Car[2].y, 2, 3) then

res:=true;

end;

4: begin

if not Car[2].Fin then

if not CarInTurn(Car[2].x, Car[2].y, 2, 1) then

if Car[2].a then

if Car[2].RC then

if Car[2].n < 3 then

res:=true;

end;

5: begin

if not Car[2].Fin then

if not CarInTurn(Car[2].x, Car[2].y, 2, 1) then

if Car[2].a then

if (Car[2].LC) and (not Car[2].RC) then

if Car[2].n < 3 then

res:=true;

end;

6: begin

res:=Car[2].Fin;

end;

end;

end;

4: begin

case Message.LParam of

1: begin

if (not CarInTurn(Car[3].x, Car[3].y, 3, 1)) and (not Car[3].Fin) then

res:=true;

end;

2: begin

if not Car[3].Fin then

if CarInTurn(Car[3].x, Car[3].y, 3, 2) then

res:=true;

end;

3: begin

if not Car[3].Fin then

if CarInTurn(Car[3].x, Car[3].y, 3, 3) then

res:=true;

end;

4: begin

if not Car[3].Fin then

if not CarInTurn(Car[3].x, Car[3].y, 3, 1) then

if Car[3].a then

if Car[3].LO then

if Car[3].n < 2 then

res:=true;

end;

5: begin

if not Car[3].Fin then

if not CarInTurn(Car[3].x, Car[3].y, 3, 1) then

if Car[3].a then

if (Car[3].RO) and (not Car[3].LO) then

if Car[3].n < 2 then

res:=true;

end;

6: begin

res:=Car[3].Fin;

end;

end;

end;

5: begin

case Message.LParam of

1: begin

if (not CarInTurn(Car[4].x, Car[4].y, 4, 1)) and (not Car[4].Fin) then

res:=true;

end;

2: begin

if not Car[4].Fin then

if CarInTurn(Car[4].x, Car[4].y, 4, 2) then

res:=true;

end;

3: begin

if not Car[4].Fin then

if CarInTurn(Car[4].x, Car[4].y, 4, 3) then

res:=true;

end;

4: begin

if not Car[4].Fin then

if not CarInTurn(Car[4].x, Car[4].y, 4, 1) then

if Car[4].a then

if Car[4].RF then

if Car[4].n < 2 then

res:=true;

end;

5: begin

if not Car[4].Fin then

if not CarInTurn(Car[4].x, Car[4].y, 4, 1) then

if Car[4].a then

if (Car[4].LF) and (not Car[4].RF) then

if Car[4].n < 2 then

res:=true;

end;

6: begin

res:=Car[4].Fin;

end;

end;

end;

6: begin

case Message.LParam of

1: begin

if (Car[1].Fin) and (Car[2].Fin) and (Car[3].Fin) and (Car[4].Fin) then

res:=true;

end;

end;

end;

end;

end;

if Message.WParamHi = 1 then

begin

case Message.WParamLo of

1: begin

case Message.LParam of

1: begin

car[1].Ex:=true;

randomize();

car[1].Pos:=random(4) + 1;

car[1].x:=115;

car[1].Speed:=random(2) + 2;

case car[1].Pos of

1: car[1].y:=719;

2: car[1].y:=699;

3: car[1].y:=679;

4: car[1].y:=659;

end;

CPS[car[1].Pos]:=1;

Image2.Left:=Car[1].x;

Image2.Top:=Car[1].y;

end;

2: begin

car[2].Ex:=true;

u1:=false;

repeat

randomize();

car[2].Pos:=random(4) + 1;

if car[1].Pos <> car[2].Pos then

u1:=true;

until (u1);

car[2].x:=115;

car[2].Speed:=random(2) + 2;

case car[2].Pos of

1: begin

car[2].y:=719;

Car[2].RC:=true;

end;

2: begin

car[2].y:=699;

Car[2].LC:=true;

Car[2].RC:=true;

end;

3: begin

car[2].y:=679;

Car[2].LC:=true;

Car[2].RC:=true;

end;

4: begin

car[2].y:=659;

Car[2].LC:=true;

end;

end;

CPS[car[2].Pos]:=2;

Image3.Left:=Car[2].x;

Image3.Top:=Car[2].y;

end;

3: begin

car[3].Ex:=true;

u1:=false;

repeat

randomize();

car[3].Pos:=random(4) + 1;

if (car[3].Pos <> car[1].Pos) and (car[3].Pos <> car[2].Pos) then

u1:=true;

until (u1);

car[3].x:=115;

car[3].Speed:=random(2) + 2;

case car[3].Pos of

1: car[3].y:=719;

2: car[3].y:=699;

3: car[3].y:=679;

4: car[3].y:=659;

end;

CPS[car[3].Pos]:=3;

Image4.Left:=Car[3].x;

Image4.Top:=Car[3].y;

end;

4: begin

car[4].Ex:=true;

u1:=false;

repeat

randomize();

car[4].Pos:=random(4) + 1;

if (car[4].Pos <> car[1].Pos) and (car[4].Pos <> car[2].Pos) and

(car[4].Pos <> car[3].Pos) then

u1:=true;

until (u1);

car[4].x:=115;

car[4].Speed:=random(2) + 2;

case car[4].Pos of

1: car[4].y:=719;

2: car[4].y:=699;

3: car[4].y:=679;

4: car[4].y:=659;

end;

CPS[car[4].Pos]:=4;

Image5.Left:=Car[4].x;

Image5.Top:=Car[4].y;

end;

5: begin

ShowMessage('Начало тест-драйва.');

end;

end;

end;

2: begin

case Message.LParam of

1: begin

case Car[1].Pic of

1: begin

Car[1].y:=Car[1].y + Car[1].Speed;

Image2.Top:=Car[1].y;

end;

2: begin

Car[1].x:=Car[1].x - Car[1].Speed;

Image2.Left:=Car[1].x;

end;

3: begin

Car[1].y:=Car[1].y - Car[1].Speed;

Image2.Top:=Car[1].y;

end;

4: begin

Car[1].x:=Car[1].x + Car[1].Speed;

Image2.Left:=Car[1].x;

end;

end;

FindFA(Car[1].x, Car[1].y, 1);

delay(10);

end;

2: begin

Car[1].Pic:=Car[1].Pic + 1;

if Car[1].Pic = 5 then

Car[1].Pic:=1;

case WhatTurn(Car[1].x, Car[1].y, 1) of

1: begin

Car[1].x:=Turn[Car[1].Pos] + 1;

Car[1].y:=Car[1].y - 16;

end;

2: begin

Car[1].x:=Car[1].x + 16;

Car[1].y:=Turn[Car[1].Pos + 4] + 1;

end;

3: begin

Car[1].x:=Turn[Car[1].Pos + 8] - 1;

Car[1].y:=Car[1].y + 16;

end;

4: begin

Car[1].x:=Car[1].x - 16;;

Car[1].y:=Turn[Car[1].Pos + 12] - 1;

end;

end;

Image2.Left:=Car[1].x;

Image2.Top:=Car[1].y;

case Car[1].Pic of

1: begin

Image2.Width:=17;

Image2.Height:=32;

Image2.Picture.LoadFromFile('Resourses\Car1_Down.jpg');

end;

2: begin

Image2.Width:=32;

Image2.Height:=17;

Image2.Picture.LoadFromFile('Resourses\Car1_Left.jpg');

end;

3: begin

Image2.Width:=17;

Image2.Height:=32;

Image2.Picture.LoadFromFile('Resourses\Car1_Top.jpg');

end;

4: begin

Image2.Width:=32;

Image2.Height:=17;

Image2.Picture.LoadFromFile('Resourses\Car1_Right.jpg');

end;

end;

end;

3: begin

Car[1].Pic:=Car[1].Pic - 1;

if Car[1].Pic = 0 then

Car[1].Pic:=4;

case Car[1].Pic of

1: begin

Image2.Width:=17;

Image2.Height:=32;

Image2.Picture.LoadFromFile('Resourses\Car1_Down.jpg');

end;

2: begin

Image2.Width:=32;

Image2.Height:=17;

Image2.Picture.LoadFromFile('Resourses\Car1_Left.jpg');

end;

3: begin

Image2.Width:=17;

Image2.Height:=32;

Image2.Picture.LoadFromFile('Resourses\Car1_Top.jpg');

end;

4: begin

Image2.Width:=32;

Image2.Height:=17;

Image2.Picture.LoadFromFile('Resourses\Car1_Right.jpg');

end;

end;

end;

end;

end;

3: begin

case Message.LParam of

1: begin

case Car[2].Pic of

1: begin

Car[2].y:=Car[2].y + Car[2].Speed;

Image3.Top:=Car[2].y;

end;

2: begin

Car[2].x:=Car[2].x - Car[2].Speed;

Image3.Left:=Car[2].x;

end;

3: begin

Car[2].y:=Car[2].y - Car[2].Speed;

Image3.Top:=Car[2].y;

end;

4: begin

Car[2].x:=Car[2].x + Car[2].Speed;

Image3.Left:=Car[2].x;

end;

end;

FindFA(Car[2].x, Car[2].y, 2);

CarShift(Car[2].x, Car[2].y);

delay(10);

end;

2: begin

Car[2].Pic:=Car[2].Pic + 1;

if Car[2].Pic = 5 then

Car[2].Pic:=1;

case WhatTurn(Car[2].x, Car[2].y, 2) of

1: begin

Car[2].x:=Turn[Car[2].Pos] + 1;

Car[2].y:=Car[2].y - 16;

end;

2: begin

Car[2].x:=Car[2].x + 16;

Car[2].y:=Turn[Car[2].Pos + 4] + 1;

end;

3: begin

Car[2].x:=Turn[Car[2].Pos + 8] - 1;

Car[2].y:=Car[2].y + 16;

end;

4: begin

Car[2].x:=Car[2].x - 16;;

Car[2].y:=Turn[Car[2].Pos + 12] - 1;

end;

end;

Image3.Left:=Car[2].x;

Image3.Top:=Car[2].y;

case Car[2].Pic of

1: begin

Image3.Width:=17;

Image3.Height:=32;

Image3.Picture.LoadFromFile('Resourses\Car2_Down.jpg');

end;

2: begin

Image3.Width:=32;

Image3.Height:=17;

Image3.Picture.LoadFromFile('Resourses\Car2_Left.jpg');

end;

3: begin

Image3.Width:=17;

Image3.Height:=32;

Image3.Picture.LoadFromFile('Resourses\Car2_Top.jpg');

end;

4: begin

Image3.Width:=32;

Image3.Height:=17;

Image3.Picture.LoadFromFile('Resourses\Car2_Right.jpg');

end;

end;

end;

3: begin

Car[2].Pic:=Car[2].Pic - 1;

if Car[2].Pic = 0 then

Car[2].Pic:=4;

case Car[2].Pic of

1: begin

Image3.Width:=17;

Image3.Height:=32;

Image3.Picture.LoadFromFile('Resourses\Car2_Down.jpg');

end;

2: begin

Image3.Width:=32;

Image3.Height:=17;

Image3.Picture.LoadFromFile('Resourses\Car2_Left.jpg');

end;

3: begin

Image3.Width:=17;

Image3.Height:=32;

Image3.Picture.LoadFromFile('Resourses\Car2_Top.jpg');

end;

4: begin

Image3.Width:=32;

Image3.Height:=17;

Image3.Picture.LoadFromFile('Resourses\Car2_Right.jpg');

end;

end;

end;

4: begin

delay(10);

end;

5: begin

case Car[2].Pic of

1: begin

Car[2].x:=Car[CPS[Car[2].Pos + 1]].x;

Car[2].y:=Car[2].y + (Car[CPS[Car[2].Pos + 1]].y - Car[2].y) + 35;

end;

2: begin

Car[2].x:=Car[2].x - (Car[2].x - Car[CPS[Car[2].Pos + 1]].x) - 35;

Car[2].y:=Car[CPS[Car[2].Pos + 1]].y;

end;

3: begin

Car[2].y:=Car[2].y - (Car[2].y - Car[CPS[Car[2].Pos + 1]].y) - 35;

Car[2].x:=Car[CPS[Car[2].Pos + 1]].x;

end;

4: begin

Car[2].x:=Car[2].x + (Car[CPS[Car[2].Pos + 1]].x - Car[2].x) + 35;

Car[2].y:=Car[CPS[Car[2].Pos + 1]].y;

end;

end;

Image3.Left:=Car[2].x;

Image3.Top:=Car[2].y;

FindFA(Car[2].x, Car[2].y, 2);

Car[CPS[Car[2].Pos + 1]].LO:=true;

Car[2].LC:=false;

Car[2].RC:=false;


if Car[2].Pos in [1..3] then

Car[CPS[Car[2].Pos + 1]].LF:=true;


TempCPS:=CPS[Car[2].Pos];

Car[2].Pos:=Car[2].Pos + 1;

CPS[Car[2].Pos]:=CPS[Car[2].Pos - 1];

CPS[Car[2].Pos - 1]:=0;


Car[2].n:=Car[2].n + 1;

delay(10);

end;

6: begin

case Car[2].Pic of

1: begin

Car[2].x:=Car[CPS[Car[2].Pos - 1]].x;

Car[2].y:=Car[2].y + (Car[CPS[Car[2].Pos - 1]].y - Car[2].y) + 35;

end;

2: begin

Car[2].x:=Car[2].x - (Car[2].x - Car[CPS[Car[2].Pos - 1]].x) - 35;

Car[2].y:=Car[CPS[Car[2].Pos - 1]].y;

end;

3: begin

Car[2].y:=Car[2].y - (Car[2].y - Car[CPS[Car[2].Pos - 1]].y) - 35;

Car[2].x:=Car[CPS[Car[2].Pos - 1]].x;

end;

4: begin

Car[2].x:=Car[2].x + (Car[CPS[Car[2].Pos - 1]].x - Car[2].x) + 35;

Car[2].y:=Car[CPS[Car[2].Pos - 1]].y;

end;

end;

Image3.Left:=Car[2].x;

Image3.Top:=Car[2].y;

FindFA(Car[2].x, Car[2].y, 2);

Car[CPS[Car[2].Pos - 1]].RO:=true;

Car[2].LC:=false;

Car[2].RC:=false;


if Car[2].Pos in [2..4] then

Car[CPS[Car[2].Pos - 1]].RF:=true;


TempCPS:=CPS[Car[2].Pos];

Car[2].Pos:=Car[2].Pos - 1;

CPS[Car[2].Pos]:=CPS[Car[2].Pos + 1];

CPS[Car[2].Pos + 1]:=0;


Car[2].n:=Car[2].n + 1;

delay(10);

end;

end;

end;

4: begin

case Message.LParam of

1: begin

case Car[3].Pic of

1: begin

Car[3].y:=Car[3].y + Car[3].Speed;

Image4.Top:=Car[3].y;

end;

2: begin

Car[3].x:=Car[3].x - Car[3].Speed;

Image4.Left:=Car[3].x;

end;

3: begin

Car[3].y:=Car[3].y - Car[3].Speed;

Image4.Top:=Car[3].y;

end;

4: begin

Car[3].x:=Car[3].x + Car[3].Speed;

Image4.Left:=Car[3].x;

end;

end;

FindFA(Car[3].x, Car[3].y, 3);

delay(10);

end;

2: begin

Car[3].Pic:=Car[3].Pic + 1;

if Car[3].Pic = 5 then

Car[3].Pic:=1;

case WhatTurn(Car[3].x, Car[3].y, 3) of

1: begin

Car[3].x:=Turn[Car[3].Pos] + 1;

Car[3].y:=Car[3].y - 16;

end;

2: begin

Car[3].x:=Car[3].x + 16;

Car[3].y:=Turn[Car[3].Pos + 4] + 1;

end;

3: begin

Car[3].x:=Turn[Car[3].Pos + 8] - 1;

Car[3].y:=Car[3].y + 16;

end;

4: begin

Car[3].x:=Car[3].x - 16;;

Car[3].y:=Turn[Car[3].Pos + 12] - 1;

end;

end;

Image4.Left:=Car[3].x;

Image4.Top:=Car[3].y;

case Car[3].Pic of

1: begin

Image4.Width:=17;

Image4.Height:=32;

Image4.Picture.LoadFromFile('Resourses\Car3_Down.jpg');

end;

2: begin

Image4.Width:=32;

Image4.Height:=17;

Image4.Picture.LoadFromFile('Resourses\Car3_Left.jpg');

end;

3: begin

Image4.Width:=17;

Image4.Height:=32;

Image4.Picture.LoadFromFile('Resourses\Car3_Top.jpg');

end;

4: begin

Image4.Width:=32;

Image4.Height:=17;

Image4.Picture.LoadFromFile('Resourses\Car3_Right.jpg');

end;

end;

end;

3: begin

Car[3].Pic:=Car[3].Pic - 1;

if Car[3].Pic = 0 then

Car[3].Pic:=4;

case Car[3].Pic of

1: begin

Image4.Width:=17;

Image4.Height:=32;

Image4.Picture.LoadFromFile('Resourses\Car3_Down.jpg');

end;

2: begin

Image4.Width:=32;

Image4.Height:=17;

Image4.Picture.LoadFromFile('Resourses\Car3_Left.jpg');

end;

3: begin

Image4.Width:=17;

Image4.Height:=32;

Image4.Picture.LoadFromFile('Resourses\Car3_Top.jpg');

end;

4: begin

Image4.Width:=32;

Image4.Height:=17;

Image4.Picture.LoadFromFile('Resourses\Car3_Right.jpg');

end;

end;

end;

4: begin

delay(10);

end;

5: begin

delay(10);

case Car[3].Pic of

1: begin

Car[3].x:=Car[3].x - 20;

Car[3].y:=Car[CPS[Car[3].Pos]].y;

end;

2: begin

Car[3].x:=Car[CPS[Car[3].Pos]].x;

Car[3].y:=Car[3].y - 20;

end;

3: begin

Car[3].x:=Car[3].x + 20;

Car[3].y:=Car[CPS[Car[3].Pos]].y;

end;

4: begin

Car[3].x:=Car[CPS[Car[3].Pos]].x;

Car[3].y:=Car[3].y + 20;

end;

end;

Image4.Left:=Car[3].x;

Image4.Top:=Car[3].y;

FindFA(Car[3].x, Car[3].y, 3);


Car[3].Pos:=Car[3].Pos + 1;

CPS[Car[3].Pos]:=TempCPS;


Car[CPS[Car[3].Pos - 1]].RC:=true;

Car[3].RO:=false;

Car[3].LO:=false;

if Car[3].Pos in [2..3] then

Car[CPS[Car[3].Pos + 1]].LF:=true;


Car[3].n:=Car[3].n + 1;

end;

6: begin

delay(10);

case Car[3].Pic of

1: begin

Car[3].x:=Car[3].x + 20;

Car[3].y:=Car[CPS[Car[3].Pos]].y;

end;

2: begin

Car[3].x:=Car[CPS[Car[3].Pos]].x;

Car[3].y:=Car[3].y + 20;

end;

3: begin

Car[3].x:=Car[3].x - 20;

Car[3].y:=Car[CPS[Car[3].Pos]].y;

end;

4: begin

Car[3].x:=Car[CPS[Car[3].Pos]].x;

Car[3].y:=Car[3].y - 20;

end;

end;

Image4.Left:=Car[3].x;

Image4.Top:=Car[3].y;

FindFA(Car[3].x, Car[3].y, 3);


Car[3].Pos:=Car[3].Pos - 1;

CPS[Car[3].Pos]:=TempCPS;


Car[CPS[Car[3].Pos + 1]].LC:=true;

Car[3].RO:=false;

Car[3].LO:=false;

if Car[3].Pos in [2..3] then

Car[CPS[Car[3].Pos - 1]].RF:=true;


Car[3].n:=Car[3].n + 1;

end;

end;

end;

5: begin

case Message.LParam of

1: begin

case Car[4].Pic of

1: begin

Car[4].y:=Car[4].y + Car[4].Speed;

Image5.Top:=Car[4].y;

end;

2: begin

Car[4].x:=Car[4].x - Car[4].Speed;

Image5.Left:=Car[4].x;

end;

3: begin

Car[4].y:=Car[4].y - Car[4].Speed;

Image5.Top:=Car[4].y;

end;

4: begin

Car[4].x:=Car[4].x + Car[4].Speed;

Image5.Left:=Car[4].x;

end;

end;

FindFA(Car[4].x, Car[4].y, 4);

delay(10);

end;

2: begin

Car[4].Pic:=Car[4].Pic + 1;

if Car[4].Pic = 5 then

Car[4].Pic:=1;

case WhatTurn(Car[4].x, Car[4].y, 4) of

1: begin

Car[4].x:=Turn[Car[4].Pos] + 1;

Car[4].y:=Car[4].y - 16;

end;

2: begin

Car[4].x:=Car[4].x + 16;

Car[4].y:=Turn[Car[4].Pos + 4] + 1;

end;

3: begin

Car[4].x:=Turn[Car[4].Pos + 8] - 1;

Car[4].y:=Car[4].y + 16;

end;

4: begin

Car[4].x:=Car[4].x - 16;;

Car[4].y:=Turn[Car[4].Pos + 12] - 1;

end;

end;

Image5.Left:=Car[4].x;

Image5.Top:=Car[4].y;

case Car[4].Pic of

1: begin

Image5.Width:=17;

Image5.Height:=32;

Image5.Picture.LoadFromFile('Resourses\Car4_Down.jpg');

end;

2: begin

Image5.Width:=32;

Image5.Height:=17;

Image5.Picture.LoadFromFile('Resourses\Car4_Left.jpg');

end;

3: begin

Image5.Width:=17;

Image5.Height:=32;

Image5.Picture.LoadFromFile('Resourses\Car4_Top.jpg');

end;

4: begin

Image5.Width:=32;

Image5.Height:=17;

Image5.Picture.LoadFromFile('Resourses\Car4_Right.jpg');

end;

end;

end;

3: begin

Car[4].Pic:=Car[4].Pic - 1;

if Car[4].Pic = 0 then

Car[4].Pic:=4;

case Car[4].Pic of

1: begin

Image5.Width:=17;

Image5.Height:=32;

Image5.Picture.LoadFromFile('Resourses\Car4_Down.jpg');

end;

2: begin

Image5.Width:=32;

Image5.Height:=17;

Image5.Picture.LoadFromFile('Resourses\Car4_Left.jpg');

end;

3: begin

Image5.Width:=17;

Image5.Height:=32;

Image5.Picture.LoadFromFile('Resourses\Car4_Top.jpg');

end;

4: begin

Image5.Width:=32;

Image5.Height:=17;

Image5.Picture.LoadFromFile('Resourses\Car4_Right.jpg');

end;

end;

end;

4: begin

case Car[4].Pic of

1: begin

if (Car[4].LF) and (not Car[4].RF) then

Car[4].y:=Car[CPS[Car[4].Pos - 1]].y;

if Car[4].RF then

Car[4].y:=Car[CPS[Car[4].Pos + 1]].y;

end;

2: begin

if (Car[4].LF) and (not Car[4].RF) then

Car[4].x:=Car[CPS[Car[4].Pos - 1]].x;

if Car[4].RF then

Car[4].x:=Car[CPS[Car[4].Pos + 1]].x;

end;

3: begin

if (Car[4].LF) and (not Car[4].RF) then

Car[4].y:=Car[CPS[Car[3].Pos - 1]].y;

if Car[4].RF then

Car[4].y:=Car[CPS[Car[4].Pos + 1]].y;

end;

4: begin

if (Car[4].LF) and (not Car[4].RF) then

Car[4].x:=Car[CPS[Car[4].Pos - 1]].x;

if Car[4].RF then

Car[4].x:=Car[CPS[Car[4].Pos + 1]].x;

end;

end;

Image5.Left:=Car[4].x;

Image5.Top:=Car[4].y;

FindFA(Car[4].x, Car[4].y, 4);


if (Car[4].LF) and (not Car[4].RF) then

Car[CPS[Car[4].Pos - 1]].RC:=true;

if Car[4].RF then

Car[CPS[Car[4].Pos + 1]].LC:=true;


Car[4].LF:=false;

Car[4].RF:=false;


Car[4].n:=Car[4].n + 1;

delay(20);

end;

end;

end;

6: begin

case Message.LParam of

1: begin

ShowMessage('Тест-драйв завершен.');

ShowMessage('Распределение позиций:' + #13 +

'1) Машина ' + IntToStr(CarF[1]) + #13 +

'2) Машина ' + IntToStr(CarF[2]) + #13 +

'3) Машина ' + IntToStr(CarF[3]) + #13 +

'4) Машина ' + IntToStr(CarF[4]));

end;

end;

end;

end;

res:=true;

end;

if res then

Message.Result:=1

else

Message.Result:=0;

end

else

inherited WndProc(Message);

end;

Процедура Delay, необходимая для задержки:

procedure Delay(msecs: integer);

var

FirstTick : integer;

begin

FirstTick:=GetTickCount;

repeat

Application.ProcessMessages;

until GetTickCount-FirstTick >= msecs;

end;

Функция CarInTurn, определяющая, находится ли машина на повороте:

function CarInTurn(x, y: integer; cr: integer; fl: integer): boolean;

var

res: boolean;

begin

res:=false;

case fl of

1: begin

if (x <= Turn[Car[cr].Pos]) or (y <= Turn[Car[cr].Pos + 4]) or

(x >= Turn[Car[cr].Pos + 8]) or (y >= Turn[Car[cr].Pos + 12]) then

res:=true;

end;

2: begin

if (x <= Turn[Car[cr].Pos]) or (y <= Turn[Car[cr].Pos + 4]) or

(x >= Turn[Car[cr].Pos + 8]) or (y >= Turn[Car[cr].Pos + 12]) then

res:=true;

end;

end;

result:=res;

end;

Функция WhatTurn, определяющая, какой именно сейчас поворот:

function WhatTurn(x, y, cr: integer): integer;

begin

if x <= Turn[Car[cr].Pos] then

result:=1;

if y <= Turn[Car[cr].Pos + 4] then

result:=2;

if x >= Turn[Car[cr].Pos + 8] then

result:=3;

if y >= Turn[Car[cr].Pos + 12] then

result:=4;

end;

Процедура FindFA, проверяющая, на финише ли машина:

procedure FindFA(x, y, cr: integer);

begin

if (y <= FA[2].y2) then

Car[cr].a:=true;

if (x <= FA[1].x2) and (x >= FA[1].x1) and

(y >= FA[1].y1) and (y <= FA[1].y2) then

Car[cr].Fin:=true;

end;

Процедура CarShift, проверяющая, нужно ли смещать машину:

procedure CarShift(x, y: integer);

var

i: integer;

begin

if (x >= 260) and (x <= 280) and (y >= 650) and (y <= 745) then

for i:=1 to 4 do

if CPS[i] = 0 then

begin

case i of

1: Car[2].y:=724;

2: Car[2].y:=704;

3: Car[2].y:=684;

4: Car[2].y:=664;

end;

Car[2].Pos:=i;

Form1.Image3.Top:=Car[2].y;

CPS[i]:=2;

break;

end;

end;

Процедура FormCreate:

procedure TForm1.FormCreate(Sender: TObject);

var

i: integer;

begin

CarFN:=0;

for i:=1 to 4 do

begin

Car[i].Fin:=false;

Car[i].a:=false;

Car[i].Pic:=2;

Car[i].Ex:=false;

Car[i].LC:=false;

Car[i].RC:=false;

Car[i].LO:=false;

Car[i].RO:=false;

Car[i].LF:=false;

Car[i].RF:=false;

Car[i].n:=1;

end;

Image2.Width:=32;

Image2.Height:=17;

Image2.Picture.LoadFromFile('Resourses\Car1_Left.jpg');

Image3.Width:=32;

Image3.Height:=17;

Image3.Picture.LoadFromFile('Resourses\Car2_Left.jpg');

Image4.Width:=32;

Image4.Height:=17;

Image4.Picture.LoadFromFile('Resourses\Car3_Left.jpg');

Image5.Width:=32;

Image5.Height:=17;

Image5.Picture.LoadFromFile('Resourses\Car4_Left.jpg');

TraceFill;


msgSIMPR:=RegisterWindowMessage(MESSAGE_STR);

end;




Примеры работы программы.



Описание скриншотов:


Случайные файлы

Файл
154137.rtf
71569-1.rtf
28553-1.rtf
182822.rtf
142613.rtf




Чтобы не видеть здесь видео-рекламу достаточно стать зарегистрированным пользователем.
Чтобы не видеть никакую рекламу на сайте, нужно стать VIP-пользователем.
Это можно сделать совершенно бесплатно. Читайте подробности тут.