СТРУКТУРА ВХОДНЫХ И ВЫХОДНЫХ ДАННЫХ

 

Входные данные:

Camera – экземпляр класса Camera, позволяет управлять камерой в игровом мире;

Board – экземпляр класса Chessboard, представляет игровое поле с расположенными на нем фигурами;

g_pDevice – указатель на интерфейс IDirect3DDevice9, предоставляет возможности работы с графикой;

g_Matrix – экземпляр структуры D3DXMATRIX, является матрицей преобразования;

Выходные данные:

hWnd – дескриптор окна с прорисованным игровым миром;

hResult – переменная типа HRESULT, используется как статус состояния игры.

 

 

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

ОПИСАНИЕ КЛАССОВ

Абстрактный класс для описания фигуры, в котором определяются ее цвет, метод его установки и получения Figure
Экземпляр класса является фигурой – король King
Экземпляр класса является фигурой – королева Queen
Экземпляр класса является фигурой – пешка Pawn
Экземпляр класса является фигурой – слон Bishop
Экземпляр класса является фигурой – ладья Rook
Экземпляр класса является фигурой – конь Horse
Структура для хранения двумерных координат Position
Класс исключений bvException
Класс исключения: ход на дружественную фигуру FriendlyFire
Класс исключения: выбора пустой клетки EmptyCell
Класс исключения: неверного хода BadMove
Класс исключения: наличие фигур на диагональной линии BadDiagLine
Класс исключения: наличие фигур на прямой линии BadStraightLine
Класс исключения: нарушение очередности хода NotUrTurn
Класс служит для обзора игрового мира Camera
Класс, представляющий собой структурную ячейку класса Chessboard Cell
Класс служит для представления шахматной доски Chessboard

Figure – абстрактный класс для описания фигуры, в определяются ее цвет, метод его установки и получения:

 

class Figure

{

protected:

std::string _sColor; // figure's color

public:

std::string GetColor( ); // Method for receiving figure's color

void SetColor( std::string sColor ); // Method for set figure's color

//

// abstract method for check if move is correct

//

virtual bool CheckMove( Cell& currentCell, Cell& nextCell ) = 0;

//

// abstract method for draw figure

//

virtual void Draw( int material ) = 0;

};

 

Cell – класс, представляющий собой структурную ячейку класса Chessboard

 

class Cell

{

Figure* _figure; // pointer to figure object

Pos _cPos; // cell's position

public:

Cell( int x, int y, Figure* figure ); // constructor with parameters

Cell( ); // default constructor

~Cell( ); // destructor

Pos GetPos( ); // method for receiving cell's position

Figure* GetFigure( ); // method for receiving figure's pointer

void SetPos( Pos& cPos ); // method for set cell's position ( Pos& )

void SetPos( int x, int y ); // method for set cell's position ( int, int )

void SetFigure( Figure* figure ); // method for set figure

bool MoveFigure( Cell& nextCell ); // method for move figure to next cell

bool IsEmpty( ); // method for check is cell is empty

std::string GetColor( ); // method for receiving figure's color

void Draw( int material ); // method for draw cell

};

 

 

Chessboard – класс служит для представления шахматной доски

 

class Chessboard

{

Figure* _WhitePawns;

Figure* _BlackPawns;

Figure* _WhiteKing;

Figure* _BlackKing;

Figure* _WhiteHorses;

Figure* _BlackHorses; // Figure pointers

Figure* _WhiteRooks;

Figure* _BlackRooks;

Figure* _WhiteBishops;

Figure* _BlackBishops;

Figure* _WhiteQueen;

Figure* _BlackQueen;

Cell _board[MAX_CELL_NUMBER][MAX_CELL_NUMBER]; // Matrix of cell object

int _iTurnCount; // int variable to choose player's turn

int _currentX; // int variable that mark on current cell

int _currentY; // int variable that mark on current cell

int _chosenX;

int _chosenY;

int _chosenNextX; // variables for making player's move

int _chosenNextY;

bool _isChosen;

public:

Chessboard( ); // constructor

~Chessboard( ); // destructor

void Move( int x, int y, int nx, int ny ); // method for move figure

// method for draw chessboard

void Draw( D3DXMATRIX g_Matrix, IDirect3DDevice9* g_pDevice );

void IncX( ); // method for increase current X coordinate

void IncY( ); // method for increase current Y coordinate

void DecX( ); // method for decrease current X coordinate

void DecY( ); // method for decrease current Y coordinate

int GetCurrentX( ); // method for receiving current X coordinate

int GetCurrentY( ); // method for receiving current Y coordinate

void SetChosenX( int x ); // method for set chosen X coordinate

void SetChosenY( int y ); // method for set chosen Y coordinate

void SetChosenNextX( int nx ); // method for set next chosen X coordinate

void SetChosenNextY( int ny ); // method for set next chosen Y coordinate

void SetChosenFlag( bool flag ); // method for set flag of chosen cell

bool GetChosenFlag( ); // method for receiving flag of chosen cell

int GetChosenX( ); // method for receiving chosen X coordinate

int GetChosenY( ); // method for receiving chosen Y coordinate

int GetChosenNextX( ); // method for receiving next chosen X coordinate

int GetChosenNextY( ); // method for receiving next chosen Y coordinate

int GetTurnCount( ); // method for receiving turn count

 

//

// method for check is striaght line is empty

//

 

bool CheckStraightLine( Cell& currentCell, Cell& nextCell );

 

//

// method for check is diagonal line is empty

//

 

bool CheckDiagLine( Cell& currentCell, Cell& nextCell );

};

БЛОК-СХЕМА АЛГОРИТМА

6.1 Метод bool MoveFigure( Cell& nextCell ) класса Cell –метод перемещает фигуру с текущей клетку на nextCell клетку

 

6.2 Функция int EnterMsgLoop( bool ( *ptr_display ) ( float timeDelta ) ) –функция отображения игрового мира

АЛГОРИТМЫ ПО ШАГАМ

7.1 Метод void Draw(D3DXMATRIX g_Matrix, IDirect3DDevice9* g_pDevice) класса Chessboard –метод визуализации шахматной доски:

 

1. Начало.

2. Входные данные:

_board – массив клеток;

_currentX – Х-координата клетки, на которую установлен курсор;

_currentY – Y-координата клетки, на которую установлен курсор;

Выходные данные:

_board – массив клеток;

3. Вызов метода очистки экрана Clear() из интерфейса IDirect3DDevice9.

4. Вызов метода начала сцены BeginScene() из интерфейса IDirect3DDevice9.

5. Цикл с параметром y по вертикальному ряду шахматной доски.

5.1. Цикл с параметром x по горизонтальному ряду шахматной доски.

5.1.1. Вызов функции D3DXMatrixTranslation() для создания матрицы преобразования в g_Matrix.

5.1.2. Вызов метода SetTransform() из интерфейса IDirect3DDevice9 для установки мировой матрицы с параметрами g_Matrix.

5.1.3. Если _board[x][y] не содержит фигуры, то

5.1.3.1. Если x = _currentX и y = _currentY, то

5.1.3.1.1. Вызываем метод Draw() для клетки, устанавливаем зеленый цвет.

5.1.3.2. Иначе если x – четное число, то

5.1.3.2.1. Если y – четное число, то

5.1.3.2.1.1. Вызываем метод Draw() для клетки, устанавливаем белый цвет.

5.1.3.2.2. Иначе

5.1.3.2.2.1. Вызываем метод Draw() для клетки, устанавливаем черный цвет.

5.1.3.3. Иначе

5.1.3.3.1. Если y – четное число, то

5.1.3.3.1.1. Вызываем метод Draw() для клетки, устанавливаем черный цвет.

5.1.3.3.2. Иначе

5.1.3.3.2.1. Вызываем метод Draw() для клетки, устанавливаем белый цвет.

5.1.4. Иначе

5.1.4.1. Если x = _currentX и y = _currentY, то

5.1.4.1.1. Вызываем метод Draw для фигуры на клетке, устанавливаем зеленый цвет.

5.1.4.2. Иначе если фигура на клетке белая, то

5.1.4.2.1. Вызываем метод Draw для фигуры на клетке, устанавливаем желтый цвет.

5.1.4.3. Иначе если фигура на клетке черная, то

5.1.4.3.1. Вызываем метод Draw для фигуры на клетке, устанавливаем синий цвет.

5.2. Конец цикла с параметром x.

6. Конец цикла с параметром у.

7. Вызов метода конца сцены EndScene() из интерфейса IDirect3DDevice9.

8. Вызов метода отображения вторичного буфера Present() из интерфейса IDirect3DDevice9.

9. Конец.

 

7.2 Метод bool CheckMove(Cell& currentCell, Cell& nextCell) класса Rook –проверка правильности хода ладьи:

1. Начало.

2. Входные данные:

currentCell – ссылка на текущую клетку;

nextCell – ссылка на следующую клетку;

Промежуточные данные:

nextPos – координаты клетки nextCell;

currentPos – координаты клетки currentCell;

Выходные данные:

currentCell – ссылка на текущую клетку;

nextCell – ссылка на следующую клетку;

3. Если nextPos._x = currentPos._x и nextPos._y = currentPos._y, то

3.1. Генерация исключения BadMove().

4. Если nextPos._x != currentPos._x и nextPos._y != currentPos._y, то

4.1. Генерация исключения BadMove().

5. Если следующая клетка содержит фигуру, то

5.1. Если цвет фигуры на текущей клетке совпадает с цветом фигуры на следующей клетке, то

5.1.1. Генерация исключения FriendlyFire().

6. Возврат истинного значения.

7. Конец.

 

 



lude $_SERVER["DOCUMENT_ROOT"]."/cgi-bin/footer.php"; ?>