Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members

FCSMove.h

Go to the documentation of this file.
00001 #ifndef FCS_MOVE_H
00002 #define FCS_MOVE_H
00003 
00011 
00012 #include "FCEnums.h"
00013 
00015 #define FCS_MOVE_STACK_GROW_BY 16
00016 
00017 #ifdef max
00018 #undef max
00019 #endif
00020 
00021 #define max(a,b) ((a)>(b)?(a):(b))
00022 
00023 class FCSStateWithLocations;
00024 
00026 class FCSMove
00027 {
00028 public:
00032     static FCSMove* Create();
00033 
00037     static FCSMove* CreateArray(int Size);
00038 
00042     virtual void Copy(FCSMove* Move) = 0;
00043 
00047     virtual unsigned char GetSourceStack() = 0;
00048 
00052     virtual unsigned char GetSourceFreecell() = 0;
00053 
00057     virtual unsigned char GetDestStack() = 0;
00058 
00062     virtual unsigned char GetDestFreecell() = 0;
00063 
00067     virtual unsigned char GetFoundation() = 0;
00068 
00072     virtual FCSMoveTypes GetType() = 0;
00073 
00077     virtual unsigned char GetNumberOfCardsInSequence() = 0;
00078 
00082     virtual unsigned char GetNumberOfCardsFlipped() = 0;
00083 
00087     virtual void SetSourceStack(unsigned char StackNumber) = 0;
00088 
00092     virtual void SetSourceFreecell(unsigned char FreecellNumber) = 0;
00093 
00097     virtual void SetDestStack(unsigned char StackNumber) = 0;
00098     
00102     virtual void SetDestFreecell(unsigned char FreecellNumber) = 0;
00103 
00107     virtual void SetFoundation(unsigned char FoundationNumber) = 0;
00108 
00112     virtual void SetType(FCSMoveTypes MoveType) = 0;
00113 
00117     virtual void SetNumberOfCardsInSequence(unsigned char NumberOfCardsInSequence) = 0;
00118 
00122     virtual void SetNumberOfCardsFlipped(unsigned char NumberOfCardsFlipped) = 0;
00123 
00127     void MoveAsString(char* String);
00128 
00133     void MoveAsStringStandardNotation(char* String);
00134 };
00135 
00137 class FCSMoveStack
00138 {
00139 public: 
00140 
00142     virtual ~FCSMoveStack();
00143 
00150     void Normalize(FCSStateWithLocations* InitialState, 
00151                     int NumberOfFreecells, int NumberOfStacks, int NumberOfDecks);
00152 
00156     virtual FCSMoveStack* Copy() = 0;
00157 
00161     virtual void Push(FCSMove* Move) = 0;
00162 
00167     virtual int Pop(FCSMove** Move) = 0;
00168 
00170     void Reset();
00171 
00175     void SwallowStack(FCSMoveStack* SrcStack);
00176 
00180     int GetNumberOfMoves();
00181 
00182 protected:
00184     FCSMoveStack();
00185 
00187     int m_MaxNumberOfMoves;
00188 
00190     int m_NumberOfMoves;
00191 };
00192 
00196 FCSMoveStack* CreateMoveStack();
00197 
00205 void ReallocMoveStackArray(FCSMoveStack*** Array, int OldSize, int NewSize);
00206 
00207 
00215 void ApplyMove(FCSStateWithLocations* StateWithLocations, FCSMove* Move, 
00216                 int NumberOfFreecells, int NumberOfStacks, int NumberOfDecks);
00217 
00218 #endif

Generated on Sat Nov 5 11:20:15 2005 for Cpp Freecell Solver by  doxygen 1.4.4