All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
additionalLance.cc
Go to the documentation of this file.
1 /* additionalLance.cc
2  */
5 
6 
7 template <osl::Player P>
9 generate(const NumEffectState& state, Square pawn, MoveVector& out)
10 {
11  assert((state.hasPieceOnStand<LANCE>(P)));
12  assert(state.pieceOnBoard(pawn).ptype() == PAWN);
13  Square back_position = pawn + DirectionPlayerTraits<D,P>::offset();
14  Piece target = state.pieceAt(back_position);
15  while (target.isEmpty())
16  {
17  if (state.hasEffectAt<PlayerTraits<P>::opponent>(back_position))
18  break;
19  out.push_back(Move(back_position, LANCE, P));
20 
21  back_position = back_position + DirectionPlayerTraits<D,P>::offset();
22  target = state.pieceAt(back_position);
23  }
24 }
25 
26 template <osl::Player P>
28 generateIfHasLance(const NumEffectState& state, Square pawn,
29  MoveVector& out)
30 {
31  if (state.hasPieceOnStand<LANCE>(P))
32  generate(state, pawn, out);
33 }
34 namespace osl
35 {
36  namespace move_generator
37  {
38  template struct AdditionalLance<BLACK>;
39  template struct AdditionalLance<WHITE>;
40  }
41 }
42 
43 /* ------------------------------------------------------------------------- */
44 // ;;; Local Variables:
45 // ;;; mode:c++
46 // ;;; c-basic-offset:2
47 // ;;; End: