поэтому я сейчас создаю программу для настольной игры, и главное, с чем у меня сейчас проблемы, это передвигать свои фигуры, что намного сложнее, чем я думал. Мой основной метод до сих пор состоял в том, чтобы иметь класс для моей доски, который содержит карту пространства на доске, с частями, которые могут go на доске, все имеют указатель на указанную доску, чтобы они могли получить доступ к карте пространства в их функциях. Затем функция перемещения принимает входные данные, перемещает фигуру в новое пространство и затем соответственно устанавливает новые координаты, как показано ниже ...
#include<map>
#include<string>
#include<iostream>
#include<memory>
class piece; // piece is prototyped so that it can be used in board.
class board // class for the board of the game
{
private:
std::map<std::string, std::unique_ptr<piece>> board_spaces{}; // map of spaces on the board,
// key's are alphanumeric designations of spaces e.g. A1, A2, B1, ect..
public:
std::unique_ptr<piece>& piece_at(std::pair<int, int> indexes); // function to convert from normal coordinates to a key,
// return that key's pointer.
};
class piece // class for a piece on the board, is an interface for derived classes.
{
private:
std::pair<int, int> coordinates{}; // coordinates of piece.
std::shared_ptr<board> board_piece_is_on{}; // pointer to the board, when pieces are added this gets set to the correct board.
// this is so that all pieces can "see" the board.
public:
void move() {
// Imagine input code for a, b goes here
// this code here should move a piece from one space to another.
std::pair<int, int> new_coords{ a,b };
if (board_piece_is_on->piece_at(new_coords).get() == nullptr) {
board_piece_is_on->piece_at(new_coords) = std::move(board_piece_is_on->piece_at(coordinates));
coordinates = new_coords;
}
else { std::cout << "There is a piece on this space!\n"; }
}
};
Однако, по какой-либо причине код не перемещает фигуру , Указатели меняются, но когда доска распечатывается, кусок остается на том же месте. Кто-нибудь знает, что я делаю неправильно и как это можно исправить?