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 4803 Точки

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

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 4803 Точки

Заповядай:

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
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.