КОМПЛЕКС ПРОГРАММ МОДЕЛИРОВАНИЯ ДИСКРЕТНЫХ СЛУЧАЙНЫХ ПРОЦЕССОВ

Заказать уникальную курсовую работу
Тип работы: Курсовая работа
Предмет: Программирование
  • 22 22 страницы
  • 2 + 2 источника
  • Добавлена 16.06.2012
1 000 руб.
  • Содержание
  • Часть работы
  • Список литературы
  • Вопросы/Ответы
Содержание
1. Введение
2. Правила игры
3. Инструкция пользователя
4. Инструкция программиста
5. Распечатка программы
6. Распечатка внешнего вида программы
список литературы

Фрагмент для ознакомления

title;
curx=cur;
}
}
}
else if(playattack.size() < 6 && pls[0].player.size() != 0){
// это не первая карта на игровых полях
for(cur=pls[call].player.begin(); cur != pls[call].player.end(); cur++){
// ищем минимальную некозырную карту с титулом,
// имеющимся на игровом поле
if(titleExist(m_Card[*cur].title) &&
// карты с таким титулом есть на игровом поле
m_Card[*cur].suit != trump && m_Card[*cur].title < title){
title=m_Card[*cur].title;
curx=cur;
}
}
if(curx == NULL) // некозырных не оказалось
for(cur=pls[call].player.begin(); cur != pls[call].player.end(); cur++){
// ищем минимальную козырную карту
if(titleExist(m_Card[*cur].title) &&
// карты с таким титулом есть на игровом поле
m_Card[*cur].suit == trump && m_Card[*cur].title < title){
title=m_Card[*cur].title;
curx=cur;
}
}
}
else
pls[call].next=1;
if(curx != NULL) // подходящая карта нашлась
toAttack(call,curx); // помещаем найденную карту в поле атаки
else
pls[call].next=1; // устанавливаем признак "все"
}
else{ // защита
cury=playattack.rbegin();
curx=NULL;
title=15;
for(cur=pls[call].player.begin(); cur != pls[call].player.end(); cur++){
// ищем минимальную некозырную карту для отбоя
if(m_Card[*cur].title > m_Card[*cury].title &&
m_Card[*cur].suit == m_Card[*cury].suit &&
m_Card[*cur].title < title){
title=m_Card[*cur].title;
curx=cur;
}
}
if(curx == NULL) // некозырных не оказалось
for(cur=pls[call].player.begin(); cur != pls[call].player.end(); cur++){
// ищем минимальную козырную карту для отбоя
if(m_Card[*cur].suit == trump && m_Card[*cury].suit != trump &&
m_Card[*cur].title < title){
title=m_Card[*cur].title;
curx=cur;
}
}

if(curx != NULL) // подходящая карта нашлась
toDefend(call,curx);
else
take=1; // устанавливаем признак "беру"
}
callCycle(); // вызываем игровой цикл
}

void CDurakDlg::PlayCycle(){ // Игровой цикл
int j;
int major;
list::reverse_iterator curc;

major=0;
for(j=0; j < 2 && !newGame; j++) // определяем, имеются ли карты на руках у двух игроков
if(pls[j].player.size() != 0)
major++;
if(major < 2 && deck.size() == 0 && !newGame)
// не установлен признак новой игры, а карты есть менее, чем у двух игроков
if(MessageBox("Сыграем еще раз?",
major == 0 ?
"Дурак не определен" :
"Дурак определен",MB_ICONQUESTION|MB_YESNO|MB_APPLMODAL) == IDYES)
newGame=1; // устанавливаем признак новой игры
else{
PostMessage(WM_COMMAND,MAKELONG(IDCANCEL,BN_CLICKED),NULL); // завершаем работу
return;
}
if(newGame){ // новая игра
newGame=0; // сбрасываем признак новой игры
ShuffleDeck(); // тасуем карты
TakeCards(); // раздача карт
}
if(turn == -1){ // если очередь не определена, определяем ее по старшему козырю
turn=0;
major=0;
for(j=0; j < 2; j++){
for(curc=pls[j].player.rbegin(); curc != pls[j].player.rend(); curc++)
if(m_Card[*curc].title > major && m_Card[*curc].suit == trump){
major=m_Card[*curc].title;
turn=j;
}
}
}
for(;;){
if(playattack.size() > playdefend.size()){ // сделан заход
if(!take && !pls[turn].next){
// отбивающийся не берет и заходящий еще не сказал "все"
call=1-turn; // отбивающийся
break;
}
if(take && !pls[turn].next){
// отбивающийся сказал "беру", а заходящий еще не сказал "все"
call=turn; // заходящий
break;
}
if(take && pls[turn].next){
// отбивающийся сказал "беру", а заходящий сказал "все"
pls[turn].next=0;
pls[1-turn].player.splice(pls[1-turn].player.end(),playattack);
// переносим карты из поля атаки
pls[1-turn].player.splice(pls[1-turn].player.end(),playdefend);
// переносим карты из поля защиты
take=0; // снимаем признак "беру"
TakeCards(); // раздаем карты
call=turn; // заходящий
break;
}
}
if(playattack.size() == playdefend.size()){ // заход отбит
if(pls[turn].next && playdefend.size() == 0){
pls[turn].next=0;
call=turn;
break;
}
if(!pls[turn].next && pls[1-turn].player.size() != 0){
// отбито, но заходящий не сказал "все" и у отбивающегося еще есть карты
call=turn; // заходящий
break;
}
else{ // отбито, и заходящий сказал "все"
pls[turn].next=0;
refuse.splice(refuse.end(),playattack);
// переносим карты из игрового поля в отбой
refuse.splice(refuse.end(),playdefend);
refuseCards(); // отрисовываем отбой
TakeCards(); // раздаем карты
turn=1-turn;
call=turn; // заходящий
}
}
}
for(j=0; j < 2; j++) // устанавливаем индикаторы состояния
*(m_pmsg[j])=_T("");
*(m_pmsg[turn])=_T("Атака");
*(m_pmsg[1-turn])=_T("Защита");
if(turn == 0)
m_Button1.SetWindowText("Бито");
else
m_Button1.SetWindowText("Беру");
if(take){
*(m_pmsg[1-turn])=_T("Беру");
if(turn == 0)
m_Button1.SetWindowText("Все");
}
UpdateData(FALSE);
if(call != 0) // если это не человек,
callPlay(); // вызываем игрока
} // иначе просто завершаем обработчик

#if !defined(AFX_CARD_H__F41A1061_D896_4DFD_A38E_B7379FB365C5__INCLUDED_)
#define AFX_CARD_H__F41A1061_D896_4DFD_A38E_B7379FB365C5__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

Card.h

// Card.h : header file
//

/////////////////////////////////////////////////////////////////////////////
// CCard window

class CCard : public CWnd
{
public:
CCard();
void Create(int BitMap,CWnd *pParent);
void Move(int x,int y);
void Turn(int side);
void Top(void);
void Bottom(void);
virtual ~CCard();
CRect m_Rect;
int suit; // масть
int title; // титул
static CBitmap m_Revers;
// Generated message map functions
protected:
CBitmap m_Bmp;
CBitmap *m_Cur;
//{{AFX_MSG(CCard)
afx_msg void OnPaint();
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_CARD_H__F41A1061_D896_4DFD_A38E_B7379FB365C5__INCLUDED_)

Card.cpp

// Card.cpp : implementation file
//

#include "stdafx.h"
#include "durak.h"
#include "Card.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CCard

CBitmap CCard::m_Revers; // статический член класса - рубашка карты


CCard::CCard()
{
}

CCard::~CCard()
{
}

void CCard::Create(int BitMap, CWnd *pWin) // Создание карты
{
suit=BitMap/9; // масть карты
title=BitMap%9+6; // титул карты
CWnd::Create(NULL,"",WS_CHILD,CRect(0,0,0,0),pWin,100000); // создаем окно
m_Cur=&m_Bmp; // устанавливаем текущий указатель налицо карты
m_Bmp.LoadBitmap(IDB_BITMAP1+BitMap); // грузим картинку из ресурсов
BITMAP bm;
m_Bmp.GetBitmap(&bm); // определяем характеристики картинки
GetWindowRect(&m_Rect); // берем прямоугольник созданного окна
pWin->ScreenToClient(&m_Rect); // координаты переводим в клиентские
m_Rect.right=m_Rect.left+bm.bmWidth;
// подгоняем размеры прямоугольника под размеры картинки
m_Rect.bottom=m_Rect.top+bm.bmHeight;
MoveWindow(&m_Rect); // вписываем окно в получившийся прямоугольник
}

void CCard::Move(int x,int y) // Перемещение карты в указанные координаты
{
SetWindowPos(&wndBottom,x,y,0,0,SWP_NOSIZE|SWP_NOZORDER); // размер и z-порядок не меняем
Invalidate(FALSE); // перерисовываем картинку
ShowWindow(SW_SHOW);
}

void CCard::Top()
{
SetWindowPos(&wndTop,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE);
// перемещаем на вершину z-порядка
}

void CCard::Bottom()
{
SetWindowPos(&wndBottom,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE);
// перемещаем на дно z-порядка
}

void CCard::Turn(int side) // Переворот карты указанной стороной
{ // (картинка или рубашка)
if(side == 1)
m_Cur=&m_Bmp;
else
m_Cur=&m_Revers;
Invalidate(TRUE);
}

BEGIN_MESSAGE_MAP(CCard, CWnd)
//{{AFX_MSG_MAP(CCard)
ON_WM_PAINT()
ON_WM_LBUTTONDOWN()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

void CCard::OnPaint()
{
CPaintDC dc(this); // устанавливаем графический контекст
CBitmap *old;
CDC memDC; // контекст в памяти
memDC.CreateCompatibleDC(&dc); // делаем его совместимым
old=memDC.SelectObject(m_Cur); // устанавливаем в него картинку
dc.BitBlt(0,0,m_Rect.Width(),m_Rect.Height(),&memDC,0,0,SRCCOPY);
// переносим картинку в реальный объект
memDC.SelectObject(old);
// восстанавливаем картинку контекста в памяти перед уничтожением
memDC.DeleteDC(); // уничтожаем контекст в памяти
}

void CCard::OnLButtonDown(UINT nFlags, CPoint point) // при щелчке на окне карты
{
CWnd *it;
it=GetParent(); // находим родителя текущего окна
it->PostMessage(WM_LBUTTONUP); // передаем ему сообщение
}

/////////////////////////////////////////////////////////////////////////////
// CCard message handlers

Распечатка внешнего вида программы
Внешний вид разработанного приложения в различных фазах игры представлен на рис.4 и рис.5.


Рис.4. Внешний вид приложения (карты соперника закрыты)

Рис.5. Внешний вид приложения (карты соперника открыты)
Список литературы
Мациевский С. В. Математическая культура. Игры: Учебное пособие.— Калининград: Изд-во КГУ, 2003.— 120 с., ил.
Б. Страуструп Язык программирования C++. Специальное издание.– СПб.: "Невский Диалект", 2001.–1099 с.











5

Список литературы
1.Мациевский С. В. Математическая культура. Игры: Учебное пособие.— Калининград: Изд-во КГУ, 2003.— 120 с., ил.
2.Б. Страуструп Язык программирования C++. Специальное издание.– СПб.: "Невский Диалект", 2001.–1099 с.

Вопрос-ответ:

Что такое комплекс программ моделирования дискретных случайных процессов?

Комплекс программ моделирования дискретных случайных процессов - это набор программ, предназначенных для моделирования и анализа случайных процессов с дискретным временем. Он позволяет создавать математические модели и проводить эксперименты для изучения различных характеристик таких процессов.

Какие правила игры включены в комплекс программ моделирования дискретных случайных процессов?

Правила игры зависят от конкретного комплекса программ моделирования. В общем случае, они предусматривают возможность создания моделей случайных процессов с заданными параметрами, проведение экспериментов, анализ полученных результатов и реализацию различных статистических методов для оценки характеристик процессов.

Как пользоваться комплексом программ моделирования дискретных случайных процессов?

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

Какие инструкции содержит комплекс программ моделирования дискретных случайных процессов для программиста?

Инструкция для программиста обычно включает в себя описание архитектуры комплекса программ, основные классы и методы, используемые для моделирования и анализа дискретных случайных процессов. Также в ней могут быть приведены примеры кода и рекомендации по оптимизации и отладке программ.

Можно ли распечатать программу, входящую в состав комплекса программ моделирования дискретных случайных процессов?

Да, в комплексе программ моделирования дискретных случайных процессов обычно предусмотрена возможность распечатки программного кода. Это может быть полезно для понимания алгоритмов работы программы или для настройки и доработки кода по требованиям пользователя.

Как выглядит внешний вид программы из комплекса программ моделирования дискретных случайных процессов?

Внешний вид программы из комплекса программ моделирования дискретных случайных процессов зависит от конкретной программы. Обычно это окно с графическим интерфейсом пользователя, в котором отображается графики, таблицы, настройки и кнопки управления программой. Внешний вид может быть настраиваемым и адаптированным под нужды пользователя.

Что такое комплекс программ моделирования дискретных случайных процессов?

Комплекс программ моделирования дискретных случайных процессов - это набор программ, предназначенных для создания моделей и анализа дискретных случайных процессов. Он обеспечивает возможность проведения различных экспериментов с дискретными случайными моделями, исследования их свойств и прогнозирования результатов.

Какие правила игры применяются в комплексе программ моделирования дискретных случайных процессов?

Правила игры в комплексе программ моделирования дискретных случайных процессов определяют последовательность действий пользователя при создании модели и проведении экспериментов. Эти правила включают выбор типа модели, задание параметров модели, запуск моделирования, анализ полученных результатов и т.д.