biquadris / board.h
board.h
Raw
/*
    Board class module
    
    the abstract class for BaseBoard and BoardDecorator
    more documentation on baseboard.h and boardDecorator.h
*/

#ifndef _BOARD_H_
#define _BOARD_H_

#include "subject.h"
#include <string>
#include <memory>

class Block;

class Board: public Subject {
    public:
        virtual ~Board();
        virtual std::shared_ptr<Board> getComponent() = 0;
        virtual void move(char direction, int n, int weight) = 0;
        virtual void drop() = 0;

        virtual void placeCurrBlock() = 0;
        virtual void replaceCurrBlock(char type,  bool safety = true) = 0;

        virtual int getLevel() const noexcept = 0;
        virtual int getWidth() const noexcept = 0;
        virtual int getHeight() const noexcept = 0;
        virtual int getBoardId() const noexcept = 0;
        virtual char getNextBlock() const noexcept = 0;
        virtual int getLastNumLinesCleared() const noexcept = 0;
        virtual char getType(int row, int col) = 0;
        virtual std::string getHint() = 0;
        virtual void hint() = 0;

        virtual Block* getBlock(int row, int col) = 0;
        virtual void drawBlock(int row, int col, Block *block) = 0;
        virtual void eraseBlock(int row, int col) = 0;
        virtual void rotate(bool isClockwise, int n, int weight) = 0;

        virtual void levelUp() = 0;
        virtual void levelDown() = 0;
        virtual void setSequence(std::string file) = 0;
        virtual void setRandom(bool r) = 0;

        virtual void restart() = 0;
};

#endif