p align="left">// Рисует заблокированую ячейку 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 { return cellY; // возвращает значение у } // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // / int CMyCell:: GetState() const { return cellState; // возвращает значение позиции } // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // / 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 { return pCell; // взятие указателя } // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // / 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() // деструктор { } // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // / void CMyCellBomb:: 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 // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // / 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); // Выполняет действия при щелчке на эту ячейку
Страницы: 1, 2, 3, 4
|