effect5x3d.h
Go to the documentation of this file.
00001 /* effect5x3.h
00002  */
00003 #ifndef PROGRESS_EFFECT5X3D_H
00004 #define PROGRESS_EFFECT5X3D_H
00005 
00006 #include "osl/progress/progress16.h"
00007 #include "osl/state/numEffectState.h"
00008 #include "osl/centering5x3.h"
00009 #include "osl/misc/carray.h"
00010 #include <algorithm>
00011 namespace osl
00012 {
00013   namespace progress
00014   {
00021     struct Effect5x3d
00022     {
00031       static int makeProgress(Player defense, const NumEffectState& state,
00032                               Square king);
00033       static int makeProgress(Player defense, const NumEffectState& state){
00034         return makeProgress(defense,state,state.kingSquare(defense));
00035       }
00036       static int makeProgress(const NumEffectState& state)
00037       {
00038         return makeProgress(BLACK, state) + makeProgress(WHITE, state);
00039       }
00043       static const Progress16 progress16(int progress)
00044       {
00045         assert(progress >= 0);
00046         const int rank = progress / 8 - 16; // 適当
00047         return Progress16(std::max(std::min(rank, 15), 0));
00048       }
00053       static const Progress16 progress16each(int progress)
00054       {
00055         assert(progress >= 0);
00056         const int rank = progress / 8 - 8; // 調整中
00057         return Progress16(std::max(std::min(rank, 15), 0));
00058       }
00059     private:
00060       CArray<int,2> progresses;
00061     public:
00062       explicit Effect5x3d(const NumEffectState& state) 
00063       {
00064         progresses[BLACK]=makeProgress(BLACK, state);
00065         progresses[WHITE]=makeProgress(WHITE, state);
00066       }
00067       void changeTurn() {}
00068       int progress(Player p) const { return progresses[p]; }
00069       const Progress16 progress16() const
00070       {
00071         return progress16(progresses[0] + progresses[1]);
00072       }
00073       const Progress16 progress16(Player p) const
00074       {
00075         return progress16each(progress(p));
00076       }
00077       // 必要なもの
00078       void update(const NumEffectState& new_state, Move last_move);
00079     };
00080   } // namespace progress
00081 } // namespace osl
00082 
00083 #endif /* PROGRESS_EFFECT5X3D_H */
00084 // ;;; Local Variables:
00085 // ;;; mode:c++
00086 // ;;; c-basic-offset:2
00087 // ;;; End:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines