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

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

Отчет к лабораторной работе № 1

по дисциплине Теория Игр





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


Программа имитирующая «Парк»




























Выполнила студентка Группы А-05-03

Чуброва Н.Е

Приняли Гречкина П.В.

Еремеев А.П.

18.04.2007




МЭИ. 2007 г.

Содержание.



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



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



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



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

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

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


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


Цель модели: Пройти заданное расстояние каждым человеком.

Человек 1 должен пройти по часовой стрелке 3 круга в парке, при этом, если встречает человека 2, он должен его пропустить, а если человека 3 – обойти.

Человек 2 проходит один раз парк из одного угла в противоположный, при этом, если он встречает человека 1, он проходит мимо, если человека 3, тоже, а если обоих, то пропускает человека 3.

Человек 3 должен пройти 3 круга против часовой стрелки, если встречает человека 1 – проходит мимо, человека 2 пропускает, а если обоих – проходит.


Вид программы:


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

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

Таблица 1: Начало

Создает людей в начале игры


Таблица 2: Распределительная таблица

Принимает решение кому отдать ход.

Таблица 3: Стратегия человека 1

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

Таблица 4: Стратегия человека 2

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

Таблица 5: Стратегия человека 3

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

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


unit ParkU1;


interface


uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ImgList, ExtCtrls, StdCtrls;


const

MESSAGE_STR='MyMessage';

No=0;

Yes=1;



type

TForm1 = class(TForm)

Image1: TImage;

ImageList1: TImageList;

Image2: TImage;

Image3: TImage;

Image4: TImage;

ListBox1: TListBox;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

procedure FormCreate(Sender: TObject);

Procedure WNDProc ( var Message: Tmessage); override;

private

{ Private declarations }

public

msgSIMPR: UINT;

{ Public declarations }

end;


Type TMen = record

Edge : byte; //сторона квадрата, на которой человек [1,2,3,4]

PosM : byte; //точка на которой сейчас находится [1..107]

beg : boolean; //начал ли игрок

act : boolean; //присутствует ли сейчал в парке

obh : boolean; //обходит ли кого либо

PosO : byte; //номер шага обхода

Prop : boolean; //пропускаем ли кого то

PosP : byte; // шаг пропуска

IndE : array [1..4] of byte; //Номер картинки на стороне 1,2,3,4

SmX : Integer; // Смещение по Х

SmY : Integer; // Смещение по У

colK : byte; // количество пройденных кругов

NE : byte; // начальная сторона

NP : byte; // Начальная точка

end;

Type TPeople = array [1..3] of TMen;

var

Form1: TForm1;

mens : TPeople;

stor : byte; //задание начальной стороны человека

mp : byte; //задание случайной позиции человека

hod : byte; // кто последний ходил

met12 : Integer; // Метрики, для сохранения

Omet12 : Integer; // расстояния между людьми

met13 : Integer; // Если они уменьшаются, то люди приближаются

Omet13 : Integer; // --//--

met23 : Integer; // --//--

Omet23 : Integer; // --//--

flag : boolean; //просто флаг

last : integer; //кто последний ходил

count : integer; //сколько раз подряд



implementation


{$R *.dfm}

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

procedure Delay(msecs : Longint);

var FirstTick : longint;

begin FirstTick:=GetTickCount;

repeat Application.ProcessMessages;

until GetTickCount-FirstTick >= msecs;

end;



procedure TForm1.WndProc (var Message : TMessage);

var

res: boolean;


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

if ((mens[1].beg=false )and

(mens[2].beg=false )and

(mens[3].beg=false)) then res := true;


end;


2: begin

res := mens[1].beg;

end;

3: begin

res := mens[2].beg;

end;


4: begin

res := mens[3].beg;

end;


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


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

//

//-------------(Условия)Таблица №2 - Распределитель парка-----------------------

2: begin // 2


case message.LParam of //c2

1: begin

if hod=0 then res := true;

if count>=30 then begin

mens[1].Prop:= false;

mens[2].Prop:= false;

mens[3].Prop:= false;

mens[1].PosP:=0;

mens[2].PosP:=0;

mens[3].PosP:=0;

end;



end;

2: begin

if hod=1 then res := true;

if count>=30 then begin

mens[1].Prop:= false;

mens[2].Prop:= false;

mens[3].Prop:= false;

mens[1].PosP:=0;

mens[2].PosP:=0;

mens[3].PosP:=0;

end;


end;

3: begin

if hod=2 then res := true;

if count>=30 then begin

mens[1].Prop:= false;

mens[2].Prop:= false;

mens[3].Prop:= false;

mens[1].PosP:=0;

mens[2].PosP:=0;

mens[3].PosP:=0;

end;


end;

4: begin

if hod=3 then res := true;

if count>=30 then begin

mens[1].Prop:= false;

mens[2].Prop:= false;

mens[3].Prop:= false;

mens[1].PosP:=0;

mens[2].PosP:=0;

mens[3].PosP:=0;

end;


end;

5: begin

if mens[1].act=true then res := true;

if count>=30 then begin

mens[1].Prop:= false;

mens[2].Prop:= false;

mens[3].Prop:= false;

mens[1].PosP:=0;

mens[2].PosP:=0;

mens[3].PosP:=0;

end;


end;

6: begin

if mens[2].act=true then res := true;

if count>=30 then begin

mens[1].Prop:= false;

mens[2].Prop:= false;

mens[3].Prop:= false;

mens[1].PosP:=0;

mens[2].PosP:=0;

mens[3].PosP:=0;

end;


end;

7: begin

if mens[3].act=true then res := true;

if count>=30 then begin

mens[1].Prop:= false;

mens[2].Prop:= false;

mens[3].Prop:= false;

mens[1].PosP:=0;

mens[2].PosP:=0;

mens[3].PosP:=0;

end;


end;

8: begin

if ((mens[1].act=false)and

(mens[2].act=false)and

(mens[3].act=false))then res := true;


ListBox1.Items.Clear;

label1.Caption:=IntToStr(met12);

label2.Caption:=IntToStr(met13);

label3.Caption:=IntToStr(met23);

label4.Caption:=IntToStr(omet12);

label5.Caption:=IntToStr(omet13);


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

Файл
PROBL-S.DOC
85049.rtf
161220.rtf
59726.rtf
117390.rtf




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