-
Notifications
You must be signed in to change notification settings - Fork 0
/
Board.h
40 lines (35 loc) · 1.1 KB
/
Board.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#pragma once
#include <vector>
#include <algorithm>
#include <utility>
#include <tuple>
#include "Piece.h"
using namespace std;
class Board
{
public:
virtual ~Board();
virtual void Initialize() = 0;
virtual Board* Clone() = 0;
virtual Piece* CreatePiece(PieceType pieceType, PieceColour pieceColour, bool isPromoted = false) = 0;
virtual void GetMoves(Piece *piece, int x, int y) = 0;
void RemoveMove(int x, int y);
vector<tuple<int, int, int, int>> GetAllMoves(PieceColour pieceColour);
virtual bool Move(int oldX, int oldY, int newX, int newY);
vector<pair<int, int>> Moves() const;
Piece* GetData(int x, int y);
void SetData(int x, int y, Piece *p);
int GetWidth() const;
int GetHeight() const;
bool CheckPosition(int x, int y) const;
protected:
void CheckMove(Piece *piece, int x, int y);
void CheckDirection(Piece *piece, int x, int y, Direction direction);
bool CheckDirectionAux(int x, int y, Direction direction) const;
static void CheckDirectionInc(int &x, int &y, Direction direction);
vector<pair<int, int>> _moves;
int _width = -1;
int _height = -1;
Piece* _data[12][12];
private:
};