Перемещение элементов в карте указателей базового класса - PullRequest
0 голосов
/ 27 апреля 2020

поэтому я сейчас создаю программу для настольной игры, и главное, с чем у меня сейчас проблемы, это передвигать свои фигуры, что намного сложнее, чем я думал. Мой основной метод до сих пор состоял в том, чтобы иметь класс для моей доски, который содержит карту пространства на доске, с частями, которые могут 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"; }

    }
};

Однако, по какой-либо причине код не перемещает фигуру , Указатели меняются, но когда доска распечатывается, кусок остается на том же месте. Кто-нибудь знает, что я делаю неправильно и как это можно исправить?

...