説明を見る。00001
00002
00003 #ifndef PROGRESS_EFFECT5X3D_H
00004 #define PROGRESS_EFFECT5X3D_H
00005
00006 #include "osl/progress.h"
00007 #include "osl/numEffectState.h"
00008 #include <algorithm>
00009 namespace osl
00010 {
00011 namespace progress
00012 {
00019 struct Effect5x3d
00020 {
00029 static int makeProgress(Player defense, const NumEffectState& state,
00030 Square king);
00031 static int makeProgress(Player defense, const NumEffectState& state){
00032 return makeProgress(defense,state,state.kingSquare(defense));
00033 }
00034 static int makeProgress(const NumEffectState& state)
00035 {
00036 return makeProgress(BLACK, state) + makeProgress(WHITE, state);
00037 }
00041 static const Progress16 progress16(int progress)
00042 {
00043 assert(progress >= 0);
00044 const int rank = progress / 8 - 16;
00045 return Progress16(std::max(std::min(rank, 15), 0));
00046 }
00051 static const Progress16 progress16each(int progress)
00052 {
00053 assert(progress >= 0);
00054 const int rank = progress / 8 - 8;
00055 return Progress16(std::max(std::min(rank, 15), 0));
00056 }
00057 private:
00058 CArray<int,2> progresses;
00059 public:
00060 explicit Effect5x3d(const NumEffectState& state)
00061 {
00062 progresses[BLACK]=makeProgress(BLACK, state);
00063 progresses[WHITE]=makeProgress(WHITE, state);
00064 }
00065 void changeTurn() {}
00066 int progress(Player p) const { return progresses[p]; }
00067 const Progress16 progress16() const
00068 {
00069 return progress16(progresses[0] + progresses[1]);
00070 }
00071 const Progress16 progress16(Player p) const
00072 {
00073 return progress16each(progress(p));
00074 }
00075
00076 void update(const NumEffectState& new_state, Move last_move);
00077 };
00078 }
00079 }
00080
00081 #endif
00082
00083
00084
00085