При выполнении курсового проекта произведено знакомство с реферативными журналами и другими информационными источниками по объектно-ориентированному и системному программированию с целью анализа состояния решаемой задачи.
Получены практические навыки работы в среде 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) // если закрыто, то рисуем закрытую ячейку