Вход

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

Рекомендуемая категория для самостоятельной подготовки:
Курсовая работа*
Код 167485
Дата создания 2012
Страниц 22
Источников 2
Мы сможем обработать ваш заказ (!) 26 апреля в 16:00 [мск]
Файлы будут доступны для скачивания только после обработки заказа.
1 400руб.
КУПИТЬ

Содержание

Содержание
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<int>::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

Список литературы [ всего 2]

Список литературы
1.Мациевский С. В. Математическая культура. Игры: Учебное пособие.— Калининград: Изд-во КГУ, 2003.— 120 с., ил.
2.Б. Страуструп Язык программирования C++. Специальное издание.– СПб.: "Невский Диалект", 2001.–1099 с.
Очень похожие работы
Пожалуйста, внимательно изучайте содержание и фрагменты работы. Деньги за приобретённые готовые работы по причине несоответствия данной работы вашим требованиям или её уникальности не возвращаются.
* Категория работы носит оценочный характер в соответствии с качественными и количественными параметрами предоставляемого материала. Данный материал ни целиком, ни любая из его частей не является готовым научным трудом, выпускной квалификационной работой, научным докладом или иной работой, предусмотренной государственной системой научной аттестации или необходимой для прохождения промежуточной или итоговой аттестации. Данный материал представляет собой субъективный результат обработки, структурирования и форматирования собранной его автором информации и предназначен, прежде всего, для использования в качестве источника для самостоятельной подготовки работы указанной тематики.
bmt: 0.00437
© Рефератбанк, 2002 - 2024