Смекни!
smekni.com

При выполнении курсового проекта произведено знакомство с реферативными журналами и другими информационными источниками по объектно-ориентированному и системному программированию с целью анализа состояния решаемой задачи.

Получены практические навыки работы в среде MicrosoftVisualStudio.

ПЕРЕЧЕНЬ ССЫЛОК

1. Бондаренко М.Ф., Бритик В.И., Свинар М.К. Конспект лекций. Часть I "Алгоритмические языки и программирование". "Компания СМИТ" – Харьков, 2004. -221 с.

2. Павловская Т.А. С/С++ программирование на языке высокого уровня. "Питер" – Санкт Петербург, 2002. -460 с.

3. Ричард С. Линкер, Том Арчер. Программирование для Windows 98. Библия разработчика. “Диалектика ” – Москва, 1999. -864 с.: ил. - Парал. тит. англ. Уч. пос.

4. Джесс Либерти. С++ за 21 день. ”Вильямс” – Москва, 2000. -816 с.: ил. - Парал. тит. англ.


ПРИЛОЖЕНИя

Приложение 1

ДИАГРАММА КЛАССОВ


ПРИЛОЖЕНИЕ 2.

ТЕКСТ ПРОГРАММЫ

Mycell. h

#ifndef MYCELL_H_

#define MYCELL_H_

// defines...

// задаем константы

#define CLOSED 0

#define OPENED 1

#define BLOCK 2

#define SIZE 20

#define WITH_BOMB 0

#define WITHOUT_BOMB 1

// events

#define REDRAW 0x00000001

#define GAMEOVER 0x00000010

#define OPEN_NULL_VALUES 0x00000100

#define WINNER 0x00001000

class CMyCell // базовый класс для ячейки

{

public:

CMyCell(int x = 0, int y = 0, int state = CLOSED); // координаты ячейки, начальное значение - закрытая ячейка

CMyCell(const CMyCell & copy);

~CMyCell();

// задаем координаты ячейки

int GetX() const;

int GetY() const;

int GetState() const;

// устанавливаем значение координат ячейки

void SetX(int x);

void SetY(int y);

void SetState(int state);

// Рисует закрытую ячейку

void DrawClosedCell(CDC * dc);

// Рисует заблокированую ячейку

void DrawBlockedCell(CDC * dc);

// Попадает ли точка, указанная в параметре, в область этой ячейки

bool HitToPoint(const CPoint & point);

// Рисует ячейку

virtual void Draw(CDC * dc) = 0;

// Выполняет действия при щелчке на эту ячейку

virtual int Click(CDC * dc) = 0;

// Возвращает, есть ли тут бомба.

// Необходимо для инициализации поля

virtual bool isBomb() const = 0;

// частные переменные в классе

private:

int cellX;

int cellY;

int cellState;

};

// Класс - указатель(умный указатель) на класс CMyCell

class CPMyCell

{

public:

CPMyCell();

CPMyCell(CMyCell * pMyCell);

void SetPointer(CMyCell * pMyCell);

CMyCell * GetPointer() const;

void Destroy();

operator CMyCell*();

CMyCell * operator->();

private:

CMyCell * pCell;

};

#endif

Mycell. cpp

// mycell. cpp

// Реализация класса CMyCell, т.е. класса ячейка

#include "stdafx. h"

#include "mycell. h"

CMyCell:: CMyCell(int x, int y, int state)

: cellX(x), cellY(y), cellState(state) // доступ к переменным

{

// cellX = x;

// cellY = y;

// cellState = state;

}

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

CMyCell:: CMyCell(const CMyCell & copy)

: cellX(copy. GetX()), cellY(copy. GetY()), cellState(copy. GetState()) // копирующий уонструктор

{

}

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

CMyCell:: ~CMyCell() // деструктор

{

}

int CMyCell:: GetX() const

{

return cellX; // возвращает значение x

}

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

int CMyCell:: GetY() const

{

returncellY; // возвращает значение у

}

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

int CMyCell:: GetState() const

{

returncellState; // возвращает значение позиции

}

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

void CMyCell:: SetX(int x) // проверка на то, чтоб координата х была больше нуля

{

if (x >= 0)

cellX = x;

else

cellX = 0; // error

}

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

void CMyCell:: SetY(int y) // проверка на то, чтоб координата у была больше нуля

{

if (y >= 0)

cellY = y;

else

cellY = 0; // error

}

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

void CMyCell:: SetState(int state) // проверка на то, чтоб значение позиции было больше нуля

{

if (state >= 0)

cellState = state;

else

cellState = 0; // error

}

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

bool CMyCell:: HitToPoint(const CPoint & point) // создание ячейки

// проверка положения ячейки

{ if ((point. x > 10 + GetY() * (SIZE + 2)) && (point. x < 10 + GetY() * (SIZE + 2) + SIZE) &&

(point. y > 10 + GetX() * (SIZE + 2)) && (point. y < 10 + GetX() * (SIZE + 2) + SIZE))

return true;

return false;

}

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

void CMyCell:: DrawClosedCell(CDC * dc) // прорисовка закрытой ячейки

{

CPen pen(PS_SOLID, 1, RGB(0, 0, 0));

CBrush brush(RGB(204, 204, 204));

CPen * oldPen = dc->SelectObject(&pen);

CBrush * oldBrush = dc->SelectObject(&brush);

dc->Rectangle(10 + GetY() * (SIZE + 2), 10 + GetX() * (SIZE + 2),

10 + GetY() * (SIZE + 2) + SIZE, 10 + GetX() * (SIZE + 2) + SIZE);

dc->SelectObject(oldBrush);

dc->SelectObject(oldPen);

}

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

void CMyCell:: DrawBlockedCell(CDC * dc) // прорисовка заблокированной ячейки

{

CPen pen(PS_SOLID, 1, RGB(0, 0, 0));

CBrush brush(RGB(204, 204, 204));

// CPen penBlock(PS_SOLID, 4, RGB(0, 0, 0));

CPen * oldPen = dc->SelectObject(&pen);

CBrush * oldBrush = dc->SelectObject(&brush);

dc->Rectangle(10 + GetY() * (SIZE + 2), 10 + GetX() * (SIZE + 2),

10 + GetY() * (SIZE + 2) + SIZE, 10 + GetX() * (SIZE + 2) + SIZE);

// CPen * oldBlockPen = dc->SelectObject(&penBlock);

dc->TextOutA(10 + GetY() * (SIZE + 2) + 6, 10 + GetX() * (SIZE + 2) + 3, "B", 1); // обозначение флажка

// dc->SelectObject(oldBlockPen);

dc->SelectObject(oldBrush); // указатель на обьект ячейки

dc->SelectObject(oldPen);

}

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

// Реализация класса CPMyCell // // // // // // // // // // // // // // // // // /

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

CPMyCell:: CPMyCell()

: pCell (NULL) // конструктор по умолчанию

{

}

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

CPMyCell:: CPMyCell(CMyCell * pMyCell)

: pCell (pMyCell)

{

}

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

void CPMyCell:: SetPointer(CMyCell * pMyCell)

{

pCell = pMyCell; // конструктор копирования, установка указателя

}

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

CMyCell * CPMyCell:: GetPointer() const

{

returnpCell; // взятие указателя

}

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

void CPMyCell:: Destroy() // удаление ячейки

{

if (pCell! = NULL)

delete pCell;

pCell = NULL;

}

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

CPMyCell:: operator CMyCell *()

{

return pCell;

}

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

CMyCell * CPMyCell:: operator - >()

{

return pCell;

}

Mycellbomb. h

#ifndef MYCELL_BOMB_H_

#define MYCELL_BOMB_H_

#include "mycell. h"

class CMyCellBomb: public CMyCell // ячейка с бомбой

{

public:

CMyCellBomb(int x = 0, int y = 0, int state = CLOSED); // задаем координаты ячейки с бомбо. изначальный вид - ячейка закрыта

CMyCellBomb(const CMyCellBomb & copy); // конструктор копирования

~CMyCellBomb();

// Рисует ячейку

virtual void Draw(CDC * dc);

// Выполняет действия при щелчке на эту ячейку

virtual int Click(CDC * dc);

// Возвращает значение, по которому определяется, есть ли тут бомба.

// Необходимо для инициализации поля

virtual bool isBomb() const;

};

#endif

Mycellbomb. cpp

// mycellbomb. cpp

// Реализация класса CMyCellBomb, т.е. ячейки с бомбой

#include "stdafx. h"

#include "mycellbomb. h"

CMyCellBomb:: CMyCellBomb(int x, int y, int state)

: CMyCell(x, y, state) // устанавливаем координаты ячейки, конструктор по умолчанию

{

}

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

CMyCellBomb:: CMyCellBomb(const CMyCellBomb & copy)

: CMyCell(copy) // конструктор копирования

{

}

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

CMyCellBomb:: ~CMyCellBomb() // деструктор

{

}

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

voidCMyCellBomb:: Draw(CDC * dc) // рисуем бомбы

{

if (GetState() == CLOSED) // если закрыто, то рисуем закрытую ячейку

CMyCell:: DrawClosedCell(dc);

else if (GetState() == BLOCK) // если стоит флажок, то рисуем флажок

CMyCell:: DrawBlockedCell(dc);

else

// рисуем бомбы

{

CPen pen(PS_SOLID, 1, RGB(0, 0, 0));

CBrush brush(RGB(255, 0, 0));

CBrush brushCircle(RGB(0, 0, 0));

CPen * oldPen = dc->SelectObject(&pen);

CBrush * oldBrush = dc->SelectObject(&brush);

dc->Rectangle(10 + GetY() * (SIZE + 2), 10 + GetX() * (SIZE + 2),

10 + GetY() * (SIZE + 2) + SIZE, 10 + GetX() * (SIZE + 2) + SIZE);

CBrush * oldBrushCircle = dc->SelectObject(&brushCircle);

dc->Ellipse(10 + GetY() * (SIZE + 2) + 4, 10 + GetX() * (SIZE + 2) + 4,

10 + GetY() * (SIZE + 2) + SIZE - 4, 10 + GetX() * (SIZE + 2) + SIZE - 4);

dc->SelectObject(oldBrushCircle);

dc->SelectObject(oldBrush);

dc->SelectObject(oldPen);

}

}

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

int CMyCellBomb:: Click(CDC * dc) // проверка на щелчок

{

if (GetState() == BLOCK) // если стоит флажок, то ячейка не откроется при нажатии

return 0;

SetState(OPENED); // открытие ячейки

Draw(dc);

return REDRAW | GAMEOVER; // т. к. в ячейке находится бомба, а вы ее открываете, то следовательно вы проиграли

}

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

bool CMyCellBomb:: isBomb() const // есть ли это бомба

{

return true;

}

Mycellwob. h

#ifndef MYCELL_WOB_H_

#define MYCELL_WOB_H_

#include "mycell. h"

class CMyCellWob: public CMyCell // ячейка без бомбы

{

public:

CMyCellWob(int x = 0, int y = 0, int state = CLOSED, int val = 0); // задаем координаты ячейки и значение. начальное положение - закрытая ячейка

CMyCellWob(const CMyCellWob & copy); // копирующий конструктор

~CMyCellWob(); // деструктор

int GetValue() const; // передаем значения

void SetValue(int val);

// Рисует ячейку

virtual void Draw(CDC * dc);

// Выполняет действия при щелчке на эту ячейку

virtual int Click(CDC * dc);

// Возвращает значение, по которому определяется, есть ли тут бомба.

// Необходимо для инициализации поля

virtual bool isBomb() const;

private:

int value;

};

#endif

Mycellwob. cpp

// mycellbomb. cpp

// Реализация класса CMyCellBomb, т.е. ячейки с бомбой

#include "stdafx. h"

#include "mycellbomb. h"

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

CMyCellBomb:: CMyCellBomb(int x, int y, int state)

: CMyCell(x, y, state) // устанавливаем координаты ячейки, конструктор по умолчанию

{

}

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

CMyCellBomb:: CMyCellBomb(const CMyCellBomb & copy)

: CMyCell(copy) // конструктор копирования

{

}

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

CMyCellBomb:: ~CMyCellBomb() // деструктор

{

}

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

voidCMyCellBomb:: Draw(CDC * dc) // рисуем бомбы

{

if (GetState() == CLOSED) // если закрыто, то рисуем закрытую ячейку