Лабораторные работы (2007) (Otchet)

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




Московский Энергетический Институт








Лабораторная работа №1

по курсу

«Теория игр»

на тему


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

Программа, имитирующая ситуацию на дороге»






Выполнила:

студентка группы А-13-03

Куликова О.А.

Приняли:

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













СОДЕРЖАНИЕ



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



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



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



  1. Приложение

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

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


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


Цель: в модели присутствуют следующие действующие лица: главная машина (ее цель проехать 4 круга, на заданном участке); пешеход (его цель переходить дорогу, всегда, когда это возможно), светофор, который может менять цвет в любой(!) момент времени, и остальные машины, которые едут на другой стороне дороги, пропуская пешехода и останавливаясь на красный сигнал светофора.


Правила: главная машина – у нее есть пять основных интервалов, это: до контрольной метки, на контрольной метке, за контрольной меткой и до светофора, у светофора, и за светофором. До контрольной метки машина едет не снижая скорости; на контрольной метке, если горит красный сигнал светофора, и(или) идет пешеход – то сбрасываем скорость, у светофора, если горит красный сигнал светофора, и(или) идет пешеход – стоим! За светофором, едем не снижая скорости.

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

Другие машины: Появляются случайным образом, у светофора или у пешехода останавливаются, а за переходом просто едут.





Вид окна программы



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

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

Таблица 1: Распределитель

Принимает решение о праве на очередной ход.


Таблица 2: Главная машина

Принимает решение на очередной ход автомобиля.

Таблица 3: Пешеход

Отвечает за поведение пешехода на дороге.

Приложение. Модуль исходных текстов программы. Разработано в среде Borland Developer Studio 2006/




const

MESSAGE_STR='MyMessage';

No=0;

Yes=1;



type

TForm1 = class(TForm)

Image1: TImage;

Image2: TImage;

Image3: TImage;

Button1: TButton;

Image4: TImage;

Image5: TImage;

Image6: TImage;

Image7: TImage;

Image8: TImage;

ImageList1: TImageList;

ListBox1: TListBox;


Procedure WNDProc ( var Message: Tmessage); override;

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

msgSIMPR: UINT;

{ Public declarations }

end;


//Тип главной машины

Type TMainCar = record

snij : boolean; //Снижаем ли скорость

hod : Integer; //При снижении скорости, прийдется пропускать ходы, так вот это счетчик!

urS : Integer; //Уровень снижения 0 - не снижаем, 1 - пропускаем 1 из 2х, 2 - 2 из трех и т.д.

shagN: integer; //Номер шага на дороге

end;

//Тип человек

Type Tman = record

go : boolean; //Идем или стоим

napr : integer; //направление, если -1 то идем вверх, если 1 то вниз

shag : integer;

end;

//Тип одной из остальных машин

Type TAnotherCar = record

Pict : TImage; //изображение машины

Act : boolean; //присутствует ли сейчас на дороге

end;

Type TAnotherCars = array [1..10] of TAnotherCar;

var

Form1: TForm1;

car : TMainCar;

cars : TAnotherCars;

man : TMan;

beg : boolean; //true - значит начало игры

kph : String; //кто последний ходил

rnd : Integer;

anC : Integer; // сколько прошло шагов, с того момента как поставили машину

ColAct : Integer; //количество активных машин

implementation


{$R *.dfm}

//процедура задержки

procedure Delay(msecs : Longint);

var FirstTick : longint;

begin FirstTick:=GetTickCount;

repeat Application.ProcessMessages;

until GetTickCount-FirstTick >= msecs;

end;


//Проверяем нет ли перед нами другой машины

function bligcar( ii : Integer) : Integer;

var i : Integer;

min : Integer;

begin

min := 80;

for I := 1 to 10 do begin

if cars[i].Act then begin

if ((cars[ii].Pict.Left-cars[i].Pict.Left>=0)and

(cars[ii].Pict.Left-cars[i].Pict.Left

(cars[ii].Pict.Top=cars[i].Pict.Top)and (ii<>i))

then min := cars[ii].Pict.Left-cars[i].Pict.Left;

end;

end;

bligcar := min;

end;



function peshmesh : boolean;

begin

peshmesh := false;

if man.go then begin

case man.napr of

-2: if man.shag > 62 then peshmesh := true;

2: if man.shag < 47 then peshmesh := true;

end;

end;

end;


procedure CreateCars;

var i : Integer;

rd : Integer;

Ost : Integer;

begin

randomize;

for i := 1 to 10 do begin

cars[i].Pict := TImage.Create(form1);

cars[i].Pict.Parent := form1;

cars[i].Act := false;

cars[i].Pict.Transparent := true;

Rd := random (100);

ost := rd mod 2;

// Showmessage(IntToStr(ost));

form1.ImageList1.GetBitmap(ost,cars[i].Pict.Picture.Bitmap);

cars[i].Pict.Transparent := true;

cars[i].Pict.Visible := false;

cars[i].Pict.Width := 100;

cars[i].Pict.Height := 100;

end;


end;



procedure cartest;

var i : Integer;

s,ss : String;

begin

form1.ListBox1.Clear;

for I := 1 to 10 do begin

ss := '';

s :='';

if cars[i].Act then ss:= 'true' else ss := 'false';

s := IntToStr(i)+'- '+ss+' '+IntToStr(cars[i].Pict.Left)+' '+IntToStr(cars[i].Pict.Top);

form1.ListBox1.Items.Add(s);

end;


end;


procedure Forw;

var f : boolean;

begin

delay(60);

car.shagN := car.shagN+1;

f := true;

Form1.Image1.Left := Form1.Image1.Left+5;

Form1.Image2.Left := Form1.Image2.Left+5;

Form1.Image3.Left := Form1.Image3.Left+5;

if ((Form1.Image1.Visible)and(f)) then begin

Form1.Image1.Visible := false;

Form1.Image2.Visible := true;

Form1.Image3.Visible := false;

f := false;

end;

if ((Form1.Image2.Visible)and(f)) then begin

Form1.Image1.Visible := false;

Form1.Image2.Visible := false;

Form1.Image3.Visible := true;

f := false;

end;

if ((Form1.Image3.Visible)and(f)) then begin

Form1.Image1.Visible := true;

Form1.Image2.Visible := false;

Form1.Image3.Visible := false;

f := false;

end;


end;



procedure ForwPesh;

begin

delay(20);

form1.Image7.Top := form1.Image7.Top + man.napr;

man.shag := man.shag+1;

end;


procedure TForm1.Button1Click(Sender: TObject);

var i : Integer;

begin

for I := 1 to 62 do begin

delay(50);

forw;

end;


for I := 1 to 47 do begin

delay(50);

forwpesh;

end;


end;



procedure TForm1.WndProc (var Message : TMessage);

var

res: boolean;

i : Integer;

begin // of proc wnd

res:= false;



If message.Msg=msgSIMPR then

begin //2begin

//------------------------------------------------------------------------------

// Условия

//------------------------------------------------------------------------------

If message.WParamHi=0 then

begin


case message.WParamLo of //Выбор таблиц условий


//------------------------------Таблица № 1 Условия---------------------------

1: begin // 1


case message.LParam of

1: begin

res := beg;

end;


2: begin

if kph='car' then res := true;

end;


3: begin

if kph='man' then res := true;

end;


4: begin

if kph='Light' then res := true;

end;


5: begin

if kph='anoth' then res := true;

end;


6: begin

if car.shagN = 134 then res := true;

end;


7: begin

if Image8.Left = 608 then res := true;

end;

end; //case Таблица 1 (условия)


end; //end таблицы 1 (условия)

//

//-------------(Условия)Таблица №2 ---------------------------------------------

2: begin // 2


case message.LParam of //c2

1: begin

if car.shagN<39 then res := true;

end;


2: begin

if car.shagN=39 then res := true;

end;


3: begin

if ((car.shagN>39)and(car.shagN<80)) then res := true;

end;


4: begin

if car.shagN=80 then res := true;

end;


5: begin

if car.shagN>80 then res := true;

end;


6: begin

if Image6.Visible then res := true;

end;


7: begin

if Image5.Visible then res := true;


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

Файл
27423-1.rtf
144077.rtf
28713.rtf
96432.rtf
66050.rtf




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