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

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

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

(Технический Университет)

















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

по курсу

«Теория игр и исследование операций»





Выполнил:

студент 4 курса

группы А-13-06

Смоляков Дмитрий





















Москва, 2010г.

СОДЕРЖАНИЕ.


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


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


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


  1. Приложение. Выдержки из программного кода.










































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

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

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

Объекты:

- Игрок

- Дилер

Цель:

Для игрока : выиграть как можно больше фишек у дилера .

Для дилера: выиграть все фишки игрока .

Игра заканчивается, когда игрок проигрывает все фишки.

Правила:

Вся игра разделена на некоторое количество раздач.

В начале каждой раздачи игрок делает ставку - кладёт фишки определённого достоинства на специальное место на игровом столе.

Дилер сдает карты 2 карты игроку и 2 карты себе.

Достоинства карт : c 2 по 10- соотвественно порядку, Валет,Дама,Король -10 очков, Туз - «мягкая рука», поскольку при необходимости Туз можно считать равным 11 и равным 1.

Игрок оценивает полученную комбинацию и, если считает необходимым (принято как если счет игрока < 14 ), «прикупить» карту, дилер выдает игроку еще карту. «Прикуп» продолжается до тех пор, пока все игрок не останется удовлетворенным своей комбинацией, или не «переберет» за 21 очко.

Затем дилер оценивает свои карты и, если требуется, «прикупает» - дилер, если имеет при раздаче комбинацию меньше 17, обязан прикупать дальше, если он набрал сумму очков 17, то обязан на этом остановиться.

Если у дилера «перебор», то выигрывает игрок, если он не «перебрал» в процессе игры. Если дилер не «перебрал», то игрок с меньшей, чем у него комбинацией на руках - проиграл, а тот, у кого комбинация больше - выиграл.

Если же комбинации у игрока и дилера равны (включая Блэк Джек) объявляется «ничья», игроку возвращается его ставка.

 Если игрок обыгрывает дилера, не собирая блекджек (если дилер перебрал или игрок набрал больший счет, то игроку выдается приз - 2 начальных ставки). Если игрок выиграл, собрал блекджек, то – 3 начальных ставки.

Игра заканчивается, когда у игрока не остается фишек.

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




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


Модель описана двумя таблицами:


Игровая таблица (13х10x14) и Анимационная таблица (7х11x7).


Таблица 1 – Игровая






Отвечает за розыгыш карточной партии.







Описание таблицы :




Таблица 2 – Анимация.

Отвечает за Анимационные действия во время и после раздачи.











Описание таблицы :








Приложение. Выдержки из программного кода.


Программа написана в среде СodeGear Delphi 2009.


unit Unit1;


interface


uses

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

Dialogs, StdCtrls, jpeg, ExtCtrls, GIFImg, ComCtrls;


procedure KartiIgroku();

procedure KartiDileru();

procedure KartUIgroku();

procedure KartUDileru();

procedure NewGame();

procedure IscSt();

procedure Po2x();

procedure Po3x();

procedure PoSt();

procedure pause(p:byte); // p - пауза в секукндах

procedure ppause(w:integer);


const

MESSAGE_STR = 'MyMessage';

No = 0;

Yes = 1;


type

TForm1 = class(TForm)

Panel1: TPanel;

ImageBackGround: TImage;

Image1CardI: TImage;

Image2CardI: TImage;

Image3CardI: TImage;

Image4CardI: TImage;

Image5CardI: TImage;

ImageBet: TImage;

Label1: TLabel;

IHow: TLabel;

Label3: TLabel;

IStack: TLabel;

Label5: TLabel;

IBet: TLabel;

Label7: TLabel;

DHow: TLabel;

Image5CardD: TImage;

Image3CardD: TImage;

Image2CardD: TImage;

Image1CardD: TImage;

Image4CardD: TImage;

ImageBet2: TImage;

ImageBet3: TImage;

messyry: TLabel;

Memo1: TMemo;

ExitButton: TButton;

Memo2: TMemo;

Label2: TLabel;

Label4: TLabel;

procedure FormCreate(Sender: TObject);

procedure WndProc(var Message: TMessage);override;

procedure ExitButtonClick(Sender: TObject);

private

{ Private declarations }

public

msgSIMPR:UINT;

{ Public declarations }

end;


Players = Record

Stack: Integer; //количество фишек

HowMuch: Integer; //счет игрока

Bet: Integer; //ставка игрока

Cards: array[0..4]of integer;

end;


Dilers = Record

HowMuch: Integer; //счет дилера

Cards: array[0..4]of integer;

end;


var

Form1: TForm1;

Player: array[0..0] of Players;

Diler: array[0..0] of Dilers;

Stavka,ISdaem,DSdaem,NowayWin,ZabI,Vid2x,Vid3x:boolean;


implementation


{$R *.dfm}


procedure TForm1.WndProc(var Message: TMessage);

var

res:boolean;

i:integer;

begin

if message.Msg=msgSIMPR then

begin

Res:=false;

if message.WParamHi=0 then

begin

case message.WParamLo of

1: //таблица 1

begin

case message.LParam of

1:

begin

if (Player[0].Stack > 0) then

begin

Res := True;

Memo1.Lines.Add('Условие 1 таблица 1=true');

Memo2.Lines.Add('У игрока есть фишки');

//MessageDlg('У игрока есть фишки',mtInformation,[mbOk],0);

end;

end;

2:

begin

if ((Player[0].Cards[0]<>-1) and (Player[0].Cards[1]<>-1)) then

begin

Res := True;

Memo1.Lines.Add('Условие 2 таблица 1=true');

Memo2.Lines.Add('У игрока есть карты');

//MessageDlg('У игрока есть карты',mtInformation,[mbOk],0);

end;

end;

3:

begin

if (Player[0].Bet<>0) then

begin

Res := True;

Memo1.Lines.Add('Условие 3 таблица 1=true');

Memo2.Lines.Add('Игрок сделал ставку');

//MessageDlg('Игрок сделал ставку',mtInformation,[mbOk],0);

end;

end;

4:

begin

if ((Diler[0].Cards[0]<>-1) and (Diler[0].Cards[1]<>-1)) then

begin

Res := True;

Memo1.Lines.Add('Условие 4 таблица 1=true');

Memo2.Lines.Add('У дилера есть карты');

// MessageDlg('У дилера есть карты',mtInformation,[mbOk],0);

end;

end;

5:

begin

if (Player[0].HowMuch<14) then

begin

Res := True;

Memo1.Lines.Add('Условие 5 таблица 1=true');

Memo2.Lines.Add( 'У игрока счет <14 ');

// MessageDlg('У игрока счет <14 '+IntToStr(Player[0].Bet)+IntToStr(Player[0].Stack),mtInformation,[mbOk],0);

end;

end;

6:

begin

if (Player[0].HowMuch>21) then

begin


Memo1.Lines.Add('Условие 6 таблица 1=true');

messyry.Font.Color:=clRed;

messyry.Visible:=true;

messyry.Caption:='Игрок проиграл !!';

pause(1);

messyry.Visible:=false;

messyry.Font.Color:=clYellow;

Memo2.Lines.Add('У игрока перебор');

Res := True;

// MessageDlg('У игрока перебор'+IntToStr(Player[0].Bet)+IntToStr(Player[0].Stack),mtInformation,[mbOk],0);

end;

end;

7:

begin

if (Player[0].HowMuch=21) then

begin

Memo1.Lines.Add('Условие 7 таблица 1=true');

messyry.Visible:=true;

messyry.Caption:='Блекджек !!';

pause(1);

messyry.Visible:=false;

Memo2.Lines.Add( 'У игрока бд');

Res := True;

// MessageDlg('У игрока бд'+IntToStr(Player[0].Bet)+IntToStr(Player[0].Stack),mtInformation,[mbOk],0);

end;

end;

8:

begin

if (Diler[0].HowMuch<17) then

begin

Res := True;

Memo1.Lines.Add('Условие 8 таблица 1=true');

Memo2.Lines.Add('У дилера счет <17');

// MessageDlg('У дилера счет <17'+IntToStr(Player[0].Bet)+IntToStr(Player[0].Stack),mtInformation,[mbOk],0);

end;

end;

9:

begin

if (Diler[0].HowMuch>21) then

begin

Res := True;

Memo1.Lines.Add('Условие 9 таблица 1=true');

Memo2.Lines.Add('У дилера перебор');

// MessageDlg('У дилера перебор'+IntToStr(Player[0].Bet)+IntToStr(Player[0].Stack),mtInformation,[mbOk],0);

end;

end;

10:

begin

if (Diler[0].HowMuch=21) then

begin


Memo1.Lines.Add('Условие 10 таблица 1=true');

messyry.Visible:=true;

messyry.Font.Color:=clRed;

messyry.Caption:='У дилера блекджек !!';

pause(1);

messyry.Visible:=false;

messyry.Font.Color:=clYellow;

Memo2.Lines.Add('У дилера бд');

Res := True;

// MessageDlg('У дилера бд'+IntToStr(Player[0].Bet)+IntToStr(Player[0].Stack),mtInformation,[mbOk],0);


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

Файл
33458.rtf
ref-19547.doc
37395.rtf
72581-1.rtf
14955-1.rtf




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