Я пишу шахматную игру на C ++. У меня есть абстрактный класс Piece и классы, которые его наследуют. Класс Piece имеет чисто виртуальный метод, который возвращает все возможные ходы. Но у меня проблема с положением пешки, потому что пешка для каждого игрока может двигаться только вперёд, но на доске (которая является матрицей фигуры) форвард выглядит по-разному для каждого игрока. Как я могу реализовать possibleMoves () для пешек?
Спасибо!
class Piece
{
public:
Piece(std::string, char verticalPosition, char horizontalPosition);
virtual std::pair<char,char>* possibleMoves() const = 0;
virtual ~Piece();
protected:
std::string name;
std::pair <char,char> initPosition;
std::pair <char,char> currPosition;
};
Передайте направление, в котором пешка может перейти в свой конструктор в качестве параметра, и сохранить как переменную-член. Используйте это при определении возможных ходов для пешки.
Как сказал BobTFish в комментариях, объект пешки должен знать, что это
цвет. Что касается позиции, думаю, я бы передал ее в качестве аргумента
в possibleMoves
; Вы, вероятно, также должны пройти доску, поэтому
тот possibleMoves
может обнаружить ходы, которые являются захватами (и en
пассант, который становится более сложным, так как он действителен только
впервые появляется такая возможность).