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

MainGameFunctions.cpp

Go to the documentation of this file.
00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 #include "MainGameFunctions.h"
00010 
00011 void MainCreate(FCSPresetID GamePreset, FCCommandLineArguments* CommandLine,
00012                 FCSFreecellSolvingAlgorithm** FreecellSolvingAlgorithm,
00013                 FCSSimpleSimonSolvingAlgorithm** SimpleSimonSolvingAlgorithm,
00014                 FCSTalonSolvingAlgorithm** TalonSolvingAlgorithm)
00015 {
00016     switch(GamePreset)
00017     {
00018     case FCS_PRESET_NONE:
00019     case FCS_PRESET_BAKERS_DOZEN:
00020     case FCS_PRESET_BAKERS_GAME:
00021     case FCS_PRESET_CRUEL:
00022     case FCS_PRESET_DER_KATZENSCHWANZ:
00023     case FCS_PRESET_DIE_SCHLANGE:
00024     case FCS_PRESET_EIGHT_OFF:
00025     case FCS_PRESET_FORECELL: 
00026     case FCS_PRESET_FREECELL:
00027     case FCS_PRESET_GOOD_MEASURE:
00028     case FCS_PRESET_KINGS_ONLY_BAKERS_GAME:
00029     case FCS_PRESET_RELAXED_FREECELL:
00030     case FCS_PRESET_RELAXED_SEAHAVEN_TOWERS:
00031     case FCS_PRESET_SEAHAVEN_TOWERS:
00032         *FreecellSolvingAlgorithm = FCSFreecellSolvingAlgorithm::Create(CommandLine);
00033         break;
00034     case FCS_PRESET_SIMPLE_SIMON:
00035         *SimpleSimonSolvingAlgorithm = FCSSimpleSimonSolvingAlgorithm::Create(CommandLine);
00036         break;
00037     case FCS_PRESET_KLONDIKE:
00038         *TalonSolvingAlgorithm = FCSTalonSolvingAlgorithm::Create(CommandLine);
00039         break;
00040     case FCS_PRESET_YUKON:
00041     case FCS_PRESET_BELEAGUERED_CASTLE:
00042     default:
00043         break;
00044     }
00045 }
00046 
00047 FCSStateSolvingReturnCodes MainSolve(FCSPresetID GamePreset, FCSStateWithLocations *InitialState,
00048                 FCSFreecellSolvingAlgorithm* FreecellSolvingAlgorithm,
00049                 FCSSimpleSimonSolvingAlgorithm* SimpleSimonSolvingAlgorithm,
00050                 FCSTalonSolvingAlgorithm* TalonSolvingAlgorithm)
00051 {
00052     switch(GamePreset)
00053     {
00054     case FCS_PRESET_NONE:
00055     case FCS_PRESET_BAKERS_DOZEN:
00056     case FCS_PRESET_BAKERS_GAME:
00057     case FCS_PRESET_CRUEL:
00058     case FCS_PRESET_DER_KATZENSCHWANZ:
00059     case FCS_PRESET_DIE_SCHLANGE:
00060     case FCS_PRESET_EIGHT_OFF:
00061     case FCS_PRESET_FORECELL: 
00062     case FCS_PRESET_FREECELL:
00063     case FCS_PRESET_GOOD_MEASURE:
00064     case FCS_PRESET_KINGS_ONLY_BAKERS_GAME:
00065     case FCS_PRESET_RELAXED_FREECELL:
00066     case FCS_PRESET_RELAXED_SEAHAVEN_TOWERS:
00067     case FCS_PRESET_SEAHAVEN_TOWERS:
00068         return FreecellSolvingAlgorithm->Solve(InitialState, 0);
00069     case FCS_PRESET_SIMPLE_SIMON:
00070         return SimpleSimonSolvingAlgorithm->Solve(InitialState, 0);
00071     case FCS_PRESET_KLONDIKE:
00072         return TalonSolvingAlgorithm->Solve(InitialState, 0);
00073     case FCS_PRESET_YUKON:
00074     case FCS_PRESET_BELEAGUERED_CASTLE:
00075     default:
00076         return FCS_STATE_DOES_NOT_EXIST;
00077     }
00078 
00079     return FCS_STATE_DOES_NOT_EXIST;
00080 }
00081 
00082 FCSStateSolvingReturnCodes MainResume(FCSPresetID GamePreset,
00083                 FCSFreecellSolvingAlgorithm* FreecellSolvingAlgorithm,
00084                 FCSSimpleSimonSolvingAlgorithm* SimpleSimonSolvingAlgorithm,
00085                 FCSTalonSolvingAlgorithm* TalonSolvingAlgorithm)
00086 {
00087     switch(GamePreset)
00088     {
00089     case FCS_PRESET_NONE:
00090     case FCS_PRESET_BAKERS_DOZEN:
00091     case FCS_PRESET_BAKERS_GAME:
00092     case FCS_PRESET_CRUEL:
00093     case FCS_PRESET_DER_KATZENSCHWANZ:
00094     case FCS_PRESET_DIE_SCHLANGE:
00095     case FCS_PRESET_EIGHT_OFF:
00096     case FCS_PRESET_FORECELL: 
00097     case FCS_PRESET_FREECELL:
00098     case FCS_PRESET_GOOD_MEASURE:
00099     case FCS_PRESET_KINGS_ONLY_BAKERS_GAME:
00100     case FCS_PRESET_RELAXED_FREECELL:
00101     case FCS_PRESET_RELAXED_SEAHAVEN_TOWERS:
00102     case FCS_PRESET_SEAHAVEN_TOWERS:
00103         FreecellSolvingAlgorithm->IncreaseMaxNumberOfCheckedStates();
00104         return FreecellSolvingAlgorithm->Resume(0);
00105     case FCS_PRESET_SIMPLE_SIMON:
00106         SimpleSimonSolvingAlgorithm->IncreaseMaxNumberOfCheckedStates();
00107         return SimpleSimonSolvingAlgorithm->Resume(0);
00108     case FCS_PRESET_KLONDIKE:
00109         TalonSolvingAlgorithm->IncreaseMaxNumberOfCheckedStates();
00110         return TalonSolvingAlgorithm->Resume(0);
00111     case FCS_PRESET_YUKON:
00112     case FCS_PRESET_BELEAGUERED_CASTLE:
00113     default:
00114         return FCS_STATE_DOES_NOT_EXIST;
00115     }
00116 
00117     return FCS_STATE_DOES_NOT_EXIST;
00118 
00119 }
00120 
00121 
00122 void MainOptimize(FCSPresetID GamePreset, FCSStateWithLocations *InitialState, FCSStateWithLocations *DuplicateInitialState,
00123                 FCSFreecellSolvingAlgorithm* FreecellSolvingAlgorithm,
00124                 FCSSimpleSimonSolvingAlgorithm* SimpleSimonSolvingAlgorithm,
00125                 FCSTalonSolvingAlgorithm* TalonSolvingAlgorithm)
00126 {
00127     FCSOptimizeSolvingAlgorithm<FCSFreecellSolvingAlgorithm>* FreecellOptimize;
00128     FCSOptimizeSolvingAlgorithm<FCSSimpleSimonSolvingAlgorithm>* SimpleSimonOptimize;
00129     FCSOptimizeSolvingAlgorithm<FCSTalonSolvingAlgorithm>* TalonOptimize;
00130 
00131     switch(GamePreset)
00132     {
00133     case FCS_PRESET_NONE:
00134     case FCS_PRESET_BAKERS_DOZEN:
00135     case FCS_PRESET_BAKERS_GAME:
00136     case FCS_PRESET_CRUEL:
00137     case FCS_PRESET_DER_KATZENSCHWANZ:
00138     case FCS_PRESET_DIE_SCHLANGE:
00139     case FCS_PRESET_EIGHT_OFF:
00140     case FCS_PRESET_FORECELL: 
00141     case FCS_PRESET_FREECELL:
00142     case FCS_PRESET_GOOD_MEASURE:
00143     case FCS_PRESET_KINGS_ONLY_BAKERS_GAME:
00144     case FCS_PRESET_RELAXED_FREECELL:
00145     case FCS_PRESET_RELAXED_SEAHAVEN_TOWERS:
00146     case FCS_PRESET_SEAHAVEN_TOWERS:
00147         FreecellSolvingAlgorithm->CleanData();
00148         FreecellOptimize = new FCSOptimizeSolvingAlgorithm<FCSFreecellSolvingAlgorithm>(FreecellSolvingAlgorithm);
00149         FreecellOptimize->Solve(InitialState, 0);
00150         FreecellOptimize->TraceSolution();
00151         FreecellOptimize->ShowSolution(InitialState, DuplicateInitialState);
00152         delete FreecellOptimize;
00153         break;
00154     case FCS_PRESET_SIMPLE_SIMON:
00155         SimpleSimonSolvingAlgorithm->CleanData();
00156         SimpleSimonOptimize = new FCSOptimizeSolvingAlgorithm<FCSSimpleSimonSolvingAlgorithm>(SimpleSimonSolvingAlgorithm);
00157         SimpleSimonOptimize->Solve(InitialState, 0);
00158         SimpleSimonOptimize->TraceSolution();
00159         SimpleSimonOptimize->ShowSolution(InitialState, DuplicateInitialState);
00160         delete SimpleSimonOptimize;
00161         break;
00162     case FCS_PRESET_KLONDIKE:
00163         TalonSolvingAlgorithm->CleanData();
00164         TalonOptimize = new FCSOptimizeSolvingAlgorithm<FCSTalonSolvingAlgorithm>(TalonSolvingAlgorithm);
00165         TalonOptimize->Solve(InitialState, 0);
00166         TalonOptimize->TraceSolution();
00167         TalonOptimize->ShowSolution(InitialState, DuplicateInitialState);
00168         delete TalonOptimize;
00169         break;
00170     case FCS_PRESET_YUKON:
00171     case FCS_PRESET_BELEAGUERED_CASTLE:
00172     default:
00173         break;
00174     }
00175 }
00176 
00177 void MainSolution(FCSPresetID GamePreset, FCSStateWithLocations *InitialState, FCSStateWithLocations *DuplicateInitialState,
00178                 FCSFreecellSolvingAlgorithm* FreecellSolvingAlgorithm,
00179                 FCSSimpleSimonSolvingAlgorithm* SimpleSimonSolvingAlgorithm,
00180                 FCSTalonSolvingAlgorithm* TalonSolvingAlgorithm)
00181 {
00182     switch(GamePreset)
00183     {
00184     case FCS_PRESET_NONE:
00185     case FCS_PRESET_BAKERS_DOZEN:
00186     case FCS_PRESET_BAKERS_GAME:
00187     case FCS_PRESET_CRUEL:
00188     case FCS_PRESET_DER_KATZENSCHWANZ:
00189     case FCS_PRESET_DIE_SCHLANGE:
00190     case FCS_PRESET_EIGHT_OFF:
00191     case FCS_PRESET_FORECELL: 
00192     case FCS_PRESET_FREECELL:
00193     case FCS_PRESET_GOOD_MEASURE:
00194     case FCS_PRESET_KINGS_ONLY_BAKERS_GAME:
00195     case FCS_PRESET_RELAXED_FREECELL:
00196     case FCS_PRESET_RELAXED_SEAHAVEN_TOWERS:
00197     case FCS_PRESET_SEAHAVEN_TOWERS:
00198         FreecellSolvingAlgorithm->TraceSolution();
00199         FreecellSolvingAlgorithm->ShowSolution(InitialState, DuplicateInitialState);
00200         break;
00201     case FCS_PRESET_SIMPLE_SIMON:
00202         SimpleSimonSolvingAlgorithm->TraceSolution();
00203         SimpleSimonSolvingAlgorithm->ShowSolution(InitialState, DuplicateInitialState);
00204         break;
00205     case FCS_PRESET_KLONDIKE:
00206         TalonSolvingAlgorithm->TraceSolution();
00207         TalonSolvingAlgorithm->ShowSolution(InitialState, DuplicateInitialState);
00208         break;
00209     case FCS_PRESET_YUKON:
00210     case FCS_PRESET_BELEAGUERED_CASTLE:
00211     default:
00212         break;
00213     }
00214 }
00215 
00216 
00217 void MainStats(FCSPresetID GamePreset,
00218                 FCSFreecellSolvingAlgorithm* FreecellSolvingAlgorithm,
00219                 FCSSimpleSimonSolvingAlgorithm* SimpleSimonSolvingAlgorithm,
00220                 FCSTalonSolvingAlgorithm* TalonSolvingAlgorithm)
00221 {
00222     switch(GamePreset)
00223     {
00224     case FCS_PRESET_NONE:
00225     case FCS_PRESET_BAKERS_DOZEN:
00226     case FCS_PRESET_BAKERS_GAME:
00227     case FCS_PRESET_CRUEL:
00228     case FCS_PRESET_DER_KATZENSCHWANZ:
00229     case FCS_PRESET_DIE_SCHLANGE:
00230     case FCS_PRESET_EIGHT_OFF:
00231     case FCS_PRESET_FORECELL: 
00232     case FCS_PRESET_FREECELL:
00233     case FCS_PRESET_GOOD_MEASURE:
00234     case FCS_PRESET_KINGS_ONLY_BAKERS_GAME:
00235     case FCS_PRESET_RELAXED_FREECELL:
00236     case FCS_PRESET_RELAXED_SEAHAVEN_TOWERS:
00237     case FCS_PRESET_SEAHAVEN_TOWERS:
00238         cout << "Total number of states checked is " << FreecellSolvingAlgorithm->GetNumberOfCheckedStates() << "." << endl;
00239         cout << "This scan generated " << FreecellSolvingAlgorithm->GetNumberOfStatesInCollection() <<  " states." << endl;
00240         break;
00241     case FCS_PRESET_SIMPLE_SIMON:
00242         cout << "Total number of states checked is " << SimpleSimonSolvingAlgorithm->GetNumberOfCheckedStates() << "." << endl;
00243         cout << "This scan generated " << SimpleSimonSolvingAlgorithm->GetNumberOfStatesInCollection() <<  " states." << endl;
00244         break;
00245     case FCS_PRESET_KLONDIKE:
00246         cout << "Total number of states checked is " << TalonSolvingAlgorithm->GetNumberOfCheckedStates() << "." << endl;
00247         cout << "This scan generated " << TalonSolvingAlgorithm->GetNumberOfStatesInCollection() <<  " states." << endl;
00248         break;
00249     case FCS_PRESET_YUKON:
00250     case FCS_PRESET_BELEAGUERED_CASTLE:
00251     default:
00252         break;
00253     }
00254 }

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