My Project
effect5x3.h
Go to the documentation of this file.
1 /* effect5x3.h
2  */
3 #ifndef PROGRESS_EFFECT5X3_H
4 #define PROGRESS_EFFECT5X3_H
5 
6 #include "osl/progress.h"
7 #include "osl/numEffectState.h"
9 #include "osl/container.h"
10 #include <algorithm>
11 namespace osl
12 {
13  namespace progress
14  {
26  struct Effect5x3
27  {
28  public:
29  static void updateStand(int& old_stand, Move last_move);
30  static int makeProgressAll(Player defense, const NumEffectState& state,
31  Square king);
32  static int makeProgressArea(Player attack, const NumEffectState& state,
33  Square king);
34  public:
35  static int makeProgressStand(Player attack, const NumEffectState& state);
44  static int makeProgress(Player defense, const NumEffectState& state){
45  return makeProgressAll(defense,state,state.kingSquare(defense));
46  }
47  static int makeProgress(const NumEffectState& state)
48  {
49  return makeProgress(BLACK, state) + makeProgress(WHITE, state);
50  }
54  static const Progress16 progress16(int progress)
55  {
56  assert(progress >= 0);
57  const int rank = progress / 8; // 適当
58  return Progress16(std::min(rank, 15));
59  }
65  {
66  assert(progress >= 0);
67  const int rank = progress / 8; // 調整中
68  return Progress16(std::min(rank, 15));
69  }
70  protected:
72  public:
73  explicit Effect5x3(const NumEffectState& state);
74  void changeTurn() {}
75  int progress(Player p) const { return progresses[p]; }
76  const Progress16 progress16() const
77  {
78  return progress16(progresses[0] + progresses[1]);
79  }
80  const Progress16 progress16(Player p) const
81  {
82  return progress16each(progress(p));
83  }
84  // 必要なもの
85  Effect5x3 expect(const NumEffectState& state, Move move) const;
86  void update(const NumEffectState& new_state, Move last_move);
87  };
88  struct Effect5x3WithBonus : public Effect5x3
89  {
90  explicit Effect5x3WithBonus(const NumEffectState& state);
91  template <Player Attack>
92  static int makeProgressAreaBonus(const NumEffectState& state,
93  Square king);
94  template <Player Attack, bool AlwaysPromotable, bool AlwaysNotPromotable>
95  static int makeProgressAreaBonus(const NumEffectState& state,
96  Square king, Square center);
98  {
100  stand_progresses[p]);
101  }
102  void update(const NumEffectState& new_state, Move last_move);
103  Effect5x3WithBonus expect(const NumEffectState& state, Move move) const;
104  // Public for testing
105  int countEffectPieces(const NumEffectState &state, Player attack) const;
106  // p is defense player
107  const PieceMask effect5x3Mask(Player p) const { return effect_mask[p]; }
108  private:
109  void updateProgressBonuses(const NumEffectState& state, bool black=true, bool white=true);
110  static int attackEffect3(const NumEffectState& state, Player attack, Square target);
111  template <Player Defense>
114 
117  };
118  } // namespace progress
119 } // namespace osl
120 
121 #endif /* PROGRESS_EFFECT5X3_H */
122 // ;;; Local Variables:
123 // ;;; mode:c++
124 // ;;; c-basic-offset:2
125 // ;;; End:
osl::progress::Effect5x3WithBonus::attackEffect3
static int attackEffect3(const NumEffectState &state, Player attack, Square target)
Definition: effect5x3.cc:148
osl::progress::Progress16
ProgressN< 16 > Progress16
Definition: progress.h:42
osl::Square
Definition: basic_type.h:532
osl::eval::min
int min(Player p, int v1, int v2)
Definition: evalTraits.h:92
osl::WHITE
@ WHITE
Definition: basic_type.h:10
centering5x3.h
osl::progress::Effect5x3WithBonus
Definition: effect5x3.h:89
osl::progress::Effect5x3::progress16
const Progress16 progress16(Player p) const
Definition: effect5x3.h:80
osl::progress::Effect5x3::progress16each
static const Progress16 progress16each(int progress)
0-15 の値を返す.
Definition: effect5x3.h:64
osl::Move
圧縮していない moveの表現 .
Definition: basic_type.h:1052
osl::progress::Effect5x3::Effect5x3
Effect5x3(const NumEffectState &state)
Definition: effect5x3.cc:7
osl::progress::ProgressN
Definition: progress.h:15
osl::progress::Effect5x3::progress16
static const Progress16 progress16(int progress)
0-15 の値を返す
Definition: effect5x3.h:54
osl::progress::Effect5x3WithBonus::Effect5x3WithBonus
Effect5x3WithBonus(const NumEffectState &state)
Definition: effect5x3.cc:113
osl::progress::Effect5x3WithBonus::makeProgressAreaBonus
static int makeProgressAreaBonus(const NumEffectState &state, Square king)
Definition: effect5x3.cc:292
osl::progress::Effect5x3::makeProgress
static int makeProgress(const NumEffectState &state)
Definition: effect5x3.h:47
osl::progress::Effect5x3WithBonus::updateProgressBonuses
void updateProgressBonuses(const NumEffectState &state, bool black=true, bool white=true)
Definition: effect5x3.cc:345
osl::progress::Effect5x3::changeTurn
void changeTurn()
Definition: effect5x3.h:74
osl::progress::Effect5x3WithBonus::makeEffectMask
static PieceMask makeEffectMask(const NumEffectState &state)
osl::progress::Effect5x3::progress16
const Progress16 progress16() const
Definition: effect5x3.h:76
osl::progress::Effect5x3::area_progresses
CArray< int, 2 > area_progresses
Definition: effect5x3.h:71
osl::progress::Effect5x3WithBonus::effect_mask
CArray< PieceMask, 2 > effect_mask
Definition: effect5x3.h:116
osl::progress::Effect5x3
玉の周囲5x3の領域の利きの数と持駒から計算した進行度.
Definition: effect5x3.h:27
osl::progress::Effect5x3WithBonus::countEffectPieces
int countEffectPieces(const NumEffectState &state, Player attack) const
Definition: effect5x3.cc:364
osl::progress::Effect5x3::update
void update(const NumEffectState &new_state, Move last_move)
Definition: effect5x3.cc:80
container.h
osl::progress::Effect5x3WithBonus::update
void update(const NumEffectState &new_state, Move last_move)
Definition: effect5x3.cc:307
osl::progress::Effect5x3::updateStand
static void updateStand(int &old_stand, Move last_move)
Definition: effect5x3.cc:65
osl::progress::Effect5x3WithBonus::progress_bonuses
CArray< int, 2 > progress_bonuses
Definition: effect5x3.h:115
osl::progress::Effect5x3WithBonus::progress16bonus
const Progress16 progress16bonus(Player p) const
Definition: effect5x3.h:97
osl::progress::Effect5x3WithBonus::expect
Effect5x3WithBonus expect(const NumEffectState &state, Move move) const
Definition: effect5x3.cc:332
osl::progress::Effect5x3::makeProgress
static int makeProgress(Player defense, const NumEffectState &state)
王の位置を指定したprogressの計算.
Definition: effect5x3.h:44
osl::NumEffectState
利きを持つ局面
Definition: numEffectState.h:34
osl::progress::Effect5x3::makeProgressStand
static int makeProgressStand(Player attack, const NumEffectState &state)
Definition: effect5x3.cc:50
osl::SimpleState::kingSquare
Square kingSquare() const
Definition: simpleState.h:94
osl::progress::Effect5x3::expect
Effect5x3 expect(const NumEffectState &state, Move move) const
Definition: effect5x3.cc:98
progress.h
osl::progress::Effect5x3WithBonus::updateStand
void updateStand(Player pl, Move m)
Definition: effect5x3.h:113
osl::BLACK
@ BLACK
Definition: basic_type.h:9
osl::Player
Player
Definition: basic_type.h:8
numEffectState.h
osl::progress::Effect5x3::stand_progresses
CArray< int, 2 > stand_progresses
Definition: effect5x3.h:71
osl::CArray< int, 2 >
osl::progress::Effect5x3WithBonus::effect5x3Mask
const PieceMask effect5x3Mask(Player p) const
Definition: effect5x3.h:107
osl::progress::Effect5x3::progress
int progress(Player p) const
Definition: effect5x3.h:75
osl::PieceMask
駒番号のビットセット.
Definition: pieceMask.h:21
osl::progress::Effect5x3::makeProgressAll
static int makeProgressAll(Player defense, const NumEffectState &state, Square king)
Definition: effect5x3.cc:18
osl::progress::Effect5x3::progresses
CArray< int, 2 > progresses
Definition: effect5x3.h:71
osl
Definition: additionalEffect.h:6
osl::progress::Effect5x3::makeProgressArea
static int makeProgressArea(Player attack, const NumEffectState &state, Square king)
Definition: effect5x3.cc:26