00001
00002
00003
00004
00005
00006
00007
00008
00009 #include <iostream.h>
00010 #include <stdlib.h>
00011 #include "FCSDebugDisplayInfo.h"
00012 #include "FCState.h"
00013
00014 FCSDebugDisplayInfo::FCSDebugDisplayInfo()
00015 {
00016 m_DisplayDebug = false;
00017 m_DisplayDebugOptions = 0;
00018 m_NumberOfFreecells = 0;
00019 m_NumberOfStacks = 0;
00020 m_NumberOfDecks = 0;
00021 m_TalonType = FCS_TALON_NONE;
00022
00023 Write.open("StateOutput.txt");
00024 }
00025
00026 FCSDebugDisplayInfo::~FCSDebugDisplayInfo()
00027 {
00028 Write.close();
00029 }
00030
00031 void FCSDebugDisplayInfo::Display(FCStateType StateType, int NumberOfIterations,
00032 int Depth, FCSStateWithLocations* StateWithLocations,
00033 int ParentNumberOfIterations, int StoredStates)
00034 {
00035 if (m_DisplayDebug)
00036 {
00037 Write << "Iteration: " << NumberOfIterations << endl;
00038 Write << "Depth: " << Depth << endl;
00039 Write << "Stored-States: " << StoredStates << endl << endl;
00040
00041 if (m_DisplayDebugOptions & DEBUG_DISPLAY_PARENT_ITERATIONS)
00042 Write << "Parent Iteration: " << ParentNumberOfIterations << endl;
00043
00044 if (m_DisplayDebugOptions & DEBUG_ITERATIVE_STATE_OUTPUT)
00045 {
00046 char* AsString = new char[STATE_STRING_SIZE];
00047 StateWithLocations->StateAsString(AsString, this);
00048 Write << AsString << endl << "---------------" << endl << endl << endl;
00049 delete [] AsString;
00050 }
00051
00052 FCSCard* Card = NULL;
00053
00054 int Valid = StateWithLocations->CheckStateValidity(m_NumberOfFreecells, m_NumberOfStacks,
00055 m_NumberOfDecks, &Card, m_TalonType);
00056
00057 if (Valid != 0)
00058 {
00059 char CardString[10];
00060
00061 Card->Perl2User(CardString, (m_DisplayDebugOptions & DEBUG_DISPLAY_10_AS_T), m_DisplayDebug);
00062
00063 switch(Valid)
00064 {
00065 case 1:
00066 cerr << "Error! There's a missing card: " << CardString << endl;
00067 break;
00068 case 2:
00069 cerr << "Error! There's an extra card: " << CardString << endl;
00070 break;
00071 case 3:
00072 cerr << "Error! There's an empty slot in one of the stacks" << endl;
00073 break;
00074 }
00075
00076 exit(-1);
00077 }
00078 }
00079 }