00001
00002
00003 #ifndef _NTEUSKI_MOVE_GENERATOR_H
00004 #define _NTEUSKI_MOVE_GENERATOR_H
00005
00006 #include "osl/ntesuki/ntesukiMoveList.h"
00007 #include "osl/state/numEffectState.h"
00008
00009 namespace osl {
00010 namespace ntesuki {
00011 class NtesukiRecord;
00018 struct
00019 NtesukiMoveGenerator
00020 {
00021 bool verbose;
00022
00023 NtesukiMoveGenerator(bool verbose = false);
00024 ~NtesukiMoveGenerator();
00025 template <Player T>
00026 void generate(const NumEffectState& state,
00027 NtesukiMoveList& moves);
00028 void generateSlow(const Player T,
00029 const NumEffectState& state,
00030 NtesukiMoveList& moves)
00031 {
00032 if (T == BLACK)
00033 generate<BLACK>(state, moves);
00034 else
00035 generate<WHITE>(state, moves);
00036 }
00037
00038 template <Player T>
00039 void generateWithRzone(const NumEffectState& state,
00040 NtesukiRecord *record,
00041 int pass_left,
00042 NtesukiMoveList& moves);
00043 void generateWithRzoneSlow(const Player T,
00044 const NumEffectState& state,
00045 NtesukiRecord *record,
00046 int pass_left,
00047 NtesukiMoveList& moves)
00048 {
00049 if (T == BLACK)
00050 generateWithRzone<BLACK>(state, record, pass_left, moves);
00051 else
00052 generateWithRzone<WHITE>(state, record, pass_left, moves);
00053 }
00054
00055 private:
00056 template <Player T>
00057 void setOrder(const NumEffectState& state,
00058 NtesukiMoveList& moves);
00059
00060 };
00061
00062 }
00063 }
00064 #endif
00065
00066
00067
00068