diff options
Diffstat (limited to 'history.h')
-rw-r--r-- | history.h | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/history.h b/history.h new file mode 100644 index 0000000..281fa0f --- /dev/null +++ b/history.h @@ -0,0 +1,138 @@ +/* + * Spider-Arachnid: A plugin for the Video Disk Recorder + * + * See the README file for copyright information and how to reach the author. + * + * $Id$ + */ + +#ifndef VDR_SPIDER_HISTORY_H +#define VDR_SPIDER_HISTORY_H + +#include "spider.h" +class Pack; +class Pile; +typedef Array<Pile*> Piles; +class FinalHeap; +class Move; +typedef Vector<Move*> Moves; + + +/** --- class History ------------------------------------------------------ **/ + +class History +{ +private: + Moves history; + unsigned int executed; + +public: + + /** Constructor */ + History(); + + /** Destructor */ + ~History(); + + /** Current move in the history */ + Move* current(); + + /** Add a new move */ + void add(Move* move); + + /** Set previous move as current */ + void backward(); + + /** Set next move as current */ + void forward(); + + /** Are there executed moves in the history */ + bool movesExecuted(); + + /** Are there moves to execute in the history */ + bool movesToExecute(); +}; + + +/** --- base class Move ---------------------------------------------------- **/ + +class Move +{ +public: + + /** Do the move */ + virtual void execute() = 0; + + /** Redo the move */ + virtual void takeBack() = 0; +}; + + +/** --- class DealMove ----------------------------------------------------- **/ + +class DealMove : public Move +{ +private: + Pack* source; + Piles& destination; + +public: + + /** Constructor */ + DealMove(Pack* s, Piles& d); + + /** Do the move */ + void execute(); + + /** Redo the move */ + void takeBack(); +}; + + +/** --- class NormalMove --------------------------------------------------- **/ + +class NormalMove : public Move +{ +private: + Pile* source; + Pile* destination; + int count; + bool turn; + +public: + + /** Constructor */ + NormalMove(Pile* s, Pile* d, int c, bool t); + + /** Do the move */ + void execute(); + + /** Redo the move */ + void takeBack(); +}; + + +/** --- class FinalMove ---------------------------------------------------- **/ + +class FinalMove : public Move +{ +private: + Pile* source; + FinalHeap* destination; + int count; + bool turn; + bool bonus; + +public: + + /** Constructor */ + FinalMove(Pile* s, FinalHeap* d, int c, bool t, bool b); + + /** Do the move */ + void execute(); + + /** Redo the move */ + void takeBack(); +}; + +#endif // VDR_SPIDER_HISTORY_H |