Софтуерно Инженерство
Loading...
kaminka avatar kaminka 5 Точки

Task3. Chess Figures - Full OOP C++ Homework

Здравейте, 

За тази задача си имам освен клас за всяка фигура и един общ клас "Figure", който после всяка фигура го наследява: 

class Figure {
public:
    char symbol; // * Pawn // % Knight // & Bishop // # Rook // $ Queen // ! King
    bool color; // true->white false->black
    std::string position; //ex. G3

    virtual std::string* getAvailableMoves(const Figure & otherFigures) = 0;
    virtual bool moveFigure(const std::string newPosition, Figure & otherFigures) = 0;
};

Сигурно вече сте забелязали и къде ми е проблема. Имам затруднение с параметъра на функциите getAvailableMoves(otherFigures) и move(newPosition, otherFigures). Разбирам, че трябва да е array от пойнтъри като в демото от лекцията. Ама нещо нито мога да го сложа като параметър, нито после в main() да извикам функцията. Ето го main():

int main()
{
    typedef Figure * FigurePtr;
    FigurePtr figuresArr[32]{
        new Pawn(true,"A2"),
        new Pawn(true,"B2"),
        new Pawn(true,"C2"),
        new Pawn(true,"D2"),
        new Pawn(true,"E2"),
        new Pawn(true,"H2"),
        new Pawn(false,"A7"),
        new Pawn(false,"B7"),
        new Pawn(false,"C7"),
        new Pawn(false,"D7"),
        new Pawn(false,"E7"),
        new Pawn(false,"F7"),
        new Pawn(false,"G7"),
        new Pawn(false,"H7")
    };

    Pawn p1(false,"G7");

    bool test = p1.moveFigure("G6",figuresArr);

    std::cout << test;

    return 0;
}

Може ли някой да ми помогне с този параметър? Какъв трябва да бъде и как се вика?

Тагове:
1
C++ Programming 19/04/2017 16:30:52
MartinBG avatar MartinBG 765 Точки

В условието на задачата не е указан типа на този параметър, а само информацията, която трябва да носи:

getAvailableMoves(otherFigures) – gets a parameter which represents all other figures on the board (but doesn’t allow changing those other figures in any way – ensure that through the type of the parameter) and returns an array of positions to which this figure can make a valid move, based on its current position AND the positions of the other figures

Аз лично реших да използвам char array, който представлява цялата игрална дъска с всички фигури на нея:

typedef std::array<char, BOARD_SIZE> ChessBoard;

class ChessFigures
{
public:

    virtual std::vector<std::string> getAvailableMoves(const ChessBoard & otherFigures) const = 0;

    bool move(const std::string & newPosition, const ChessBoard & otherFigures)
    { ... }

...

}

Разбира се, това е само едно от многото възможни решения.

Мога да споделя и цялото решение на домашното си, ако те интересува.

0
kaminka avatar kaminka 5 Точки

Здравей Мартин, 

Благодаря ти за отговора. 

Би ми било интересно да видя твоето решение, тъй като е разлчино от моето и ми е интересно да видя друг подход за имплементацията на тази задача. 

0
MartinBG avatar MartinBG 765 Точки

Заповядай:

4-chess-figures.h

4-chess-figures.cpp

5-chess-game.h

5-chess-game.cpp

Пиши, ако имаш някакви въпроси по решенията ми, и ще се опитам да ги разясня.

Сега, като ги погледнах, виждам, че има какво да се желае по тях като OOP организация, но докато ги писах, това ми беше един от малките проблеми :)

Поздрави!

0
20/04/2017 20:40:53
kaminka avatar kaminka 5 Точки

Окей, мерси. 

0