My Project
king8Group.cc
Go to the documentation of this file.
1 /* king8Group.cc
2  */
4 #include <sstream>
5 
7  : Group("AttackKing8")
8 {
9  for (int attack=0; attack<3; ++attack) {
10  for (int defense=0; defense<3; ++defense) {
11  for (int s=PTYPE_PIECE_MIN; s<= PTYPE_MAX; ++s) {
12  for (int t=PTYPE_PIECE_MIN; t<= PTYPE_MAX; ++t) {
13  for (int p=0; p<8; ++p) // progress8
14  push_back(new AttackKing8(static_cast<Ptype>(s), static_cast<Ptype>(t), true, attack, defense));
15  for (int p=0; p<8; ++p) // progress8
16  push_back(new AttackKing8(static_cast<Ptype>(s), static_cast<Ptype>(t), false, attack, defense));
17  }
18  for (int p=0; p<8; ++p) // progress8
19  push_back(new AttackKing8(static_cast<Ptype>(s), PTYPE_EMPTY, true, attack, defense));
20  }
21  }
22  }
23 }
24 
25 int osl::rating::AttackKing8Group::findMatch(const NumEffectState& state, Move move, const RatingEnv& env) const
26 {
27  const Ptype self = move.ptype();
28  const Square position
29  = Neighboring8Direct::findNearest(state, move.ptypeO(), move.to(),
30  state.kingSquare(alt(state.turn())));
31  if (position.isPieceStand() || position == move.from())
32  return -1;
33  if (! move.isDrop() && state.hasEffectByPiece(state.pieceOnBoard(move.from()), position))
34  return -1;
35  const Piece p = state.pieceAt(position);
36  const Ptype target = p.ptype();
37  const int base = CountEffect2::index(state, position, env)
38  * (PTYPE_MAX+1 - PTYPE_PIECE_MIN) * ((PTYPE_MAX+1 - PTYPE_PIECE_MIN)*2 +1);
39 
40  const int self_index = self - PTYPE_PIECE_MIN;
41 
42  int index = base + self_index*((PTYPE_MAX+1 - PTYPE_PIECE_MIN)*2 +1);
43  if (!isPiece(target)) {
44  index += (PTYPE_MAX+1 - PTYPE_PIECE_MIN)*2;
45  }
46  else {
47  index += (target - PTYPE_PIECE_MIN)*2 + (p.owner() != move.player());
48  }
49 
50  const int progress8 = env.progress.value()/2;
51  return index*8 + progress8;
52 }
53 
55  : Group("DefenseKing8")
56 {
57  for (int danger=0; danger<=4; ++danger) {
58  for (int s=PTYPE_PIECE_MIN; s<= PTYPE_MAX; ++s) {
59  for (int p=0; p<8; ++p) // progress8
60  push_back(new DefenseKing8(static_cast<Ptype>(s), true, danger));
61  for (int p=0; p<8; ++p) // progress8
62  push_back(new DefenseKing8(static_cast<Ptype>(s), false, danger));
63  }
64  }
65 }
66 
68 {
69  assert(env.attack_count_for_turn == DefenseKing8::count(state));
70  const int self_index = (move.ptype() - PTYPE_PIECE_MIN)*2;
71  int index;
72  if (DefenseKing8::matchDrop(state, move))
73  index = env.attack_count_for_turn*(PTYPE_MAX+1-PTYPE_PIECE_MIN)*2 + self_index;
74  else if (DefenseKing8::matchMove(state, move))
75  index = env.attack_count_for_turn*(PTYPE_MAX+1-PTYPE_PIECE_MIN)*2 + self_index + 1;
76  else
77  return -1;
78  const int progress8 = env.progress.value()/2;
79  return index*8 + progress8;
80 }
81 
82 /* ------------------------------------------------------------------------- */
83 // ;;; Local Variables:
84 // ;;; mode:c++
85 // ;;; c-basic-offset:2
86 // ;;; End:
osl::SimpleState::pieceAt
const Piece pieceAt(Square sq) const
Definition: simpleState.h:167
osl::PTYPE_PIECE_MIN
@ PTYPE_PIECE_MIN
Definition: basic_type.h:104
osl::Square
Definition: basic_type.h:532
osl::rating::DefenseKing8Group::DefenseKing8Group
DefenseKing8Group()
Definition: king8Group.cc:54
osl::alt
constexpr Player alt(Player player)
Definition: basic_type.h:13
osl::rating::DefenseKing8::matchMove
static bool matchMove(const NumEffectState &state, Move move)
Definition: std/osl/rating/feature/king8.h:101
osl::effect_util::Neighboring8Direct::findNearest
static Square findNearest(const NumEffectState &state, PtypeO ptypeo, Square from, Square target)
Definition: neighboring8Direct.h:124
osl::rating::DefenseKing8::matchDrop
static bool matchDrop(const NumEffectState &state, Move move)
Definition: std/osl/rating/feature/king8.h:91
osl::Move
圧縮していない moveの表現 .
Definition: basic_type.h:1052
osl::rating::Group
mutually exclusive set of features
Definition: group.h:17
osl::rating::DefenseKing8
Definition: std/osl/rating/feature/king8.h:47
king8Group.h
osl::rating::RatingEnv::progress
Progress16 progress
Definition: ratingEnv.h:22
osl::rating::DefenseKing8::count
static int count(const NumEffectState &state)
Definition: std/osl/rating/feature/king8.h:57
osl::Ptype
Ptype
駒の種類を4ビットでコード化する
Definition: basic_type.h:84
osl::rating::DefenseKing8Group::findMatch
int findMatch(const NumEffectState &state, Move m, const RatingEnv &) const
Definition: king8Group.cc:67
osl::Piece
駒.
Definition: basic_type.h:788
osl::rating::RatingEnv
Definition: ratingEnv.h:16
osl::PTYPE_MAX
@ PTYPE_MAX
Definition: basic_type.h:105
osl::SimpleState::pieceOnBoard
const Piece pieceOnBoard(Square sq) const
Definition: simpleState.h:170
osl::Square::isPieceStand
bool isPieceStand() const
Definition: basic_type.h:576
osl::Move::isDrop
bool isDrop() const
Definition: basic_type.h:1150
osl::Move::ptypeO
PtypeO ptypeO() const
移動後のPtype, i.e., 成る手だった場合成った後
Definition: basic_type.h:1162
osl::rating::CountEffect2::index
static int index(const NumEffectState &state, Square position, const RatingEnv &env)
Definition: countEffect2.h:43
osl::NumEffectState::hasEffectByPiece
bool hasEffectByPiece(Piece attack, Square target) const
駒attack が target に利きを持つか (旧hasEffectToと統合)
Definition: numEffectState.h:450
osl::Piece::owner
Player owner() const
Definition: basic_type.h:963
osl::rating::AttackKing8
Definition: std/osl/rating/feature/king8.h:15
osl::Move::from
const Square from() const
Definition: basic_type.h:1125
osl::NumEffectState
利きを持つ局面
Definition: numEffectState.h:34
osl::isPiece
constexpr bool isPiece(Ptype ptype)
ptypeが空白やEDGEでないかのチェック
Definition: basic_type.h:120
osl::SimpleState::kingSquare
Square kingSquare() const
Definition: simpleState.h:94
osl::rating::AttackKing8Group::AttackKing8Group
AttackKing8Group()
Definition: king8Group.cc:6
osl::Piece::ptype
Ptype ptype() const
Definition: basic_type.h:821
osl::Move::ptype
Ptype ptype() const
Definition: basic_type.h:1155
osl::PTYPE_EMPTY
@ PTYPE_EMPTY
Definition: basic_type.h:85
osl::SimpleState::turn
Player turn() const
Definition: simpleState.h:220
osl::Move::to
const Square to() const
Definition: basic_type.h:1132
osl::rating::RatingEnv::attack_count_for_turn
int attack_count_for_turn
Definition: ratingEnv.h:21
osl::rating::AttackKing8Group::findMatch
int findMatch(const NumEffectState &state, Move m, const RatingEnv &) const
Definition: king8Group.cc:25
osl::Move::player
Player player() const
Definition: basic_type.h:1195