My Project
mobilityTable.cc
Go to the documentation of this file.
1 /* mobilityTable.cc
2  */
4 #include "osl/bits/ptypeTable.h"
5 #include "osl/bits/boardTable.h"
6 #include <iostream>
7 
9 {
10  for(int num=32;num<=39;num++){
11  osl::Piece p=state.pieceOf(num);
12  if(!p.isOnBoard()) continue;
13  int moveMask=Ptype_Table.getMoveMask(p.ptype());
14  for(int i=0;i<8;i++){
15  Direction d=static_cast<Direction>(i);
16  if(p.owner()==WHITE) d=inverse(d);
17  d=shortToLong(d);
18  if((moveMask&dirToMask(d))==0) continue;
19  Offset o=Board_Table.getOffsetForBlack(static_cast<Direction>(i));
20  Square pos=p.square()+o;
21  for(;state.pieceAt(pos).isEmpty();pos+=o) ;
22  if(state.pieceAt(pos)==Piece::EDGE()) pos-=o;
23  this->set(static_cast<Direction>(i),num,pos);
24  }
25  }
26 }
27 
28 std::ostream& osl::mobility::operator<<(std::ostream& os,osl::mobility::MobilityContent const& mc)
29 {
30  os << "[";
31  for(int i=0;i<7;i++) os << mc.get(static_cast<Direction>(i)) << ",";
32  return os << mc.get(static_cast<Direction>(7)) << "]";
33 }
34 
35 std::ostream& osl::mobility::operator<<(std::ostream& os,osl::mobility::MobilityTable const& mt)
36 {
37  os << "MobilityTable(\n";
38  for(int num=32;num<=39;num++){
39  os << "num=" << num << ",[";
40  for(int i=0;i<8;i++){
41  Direction d=static_cast<Direction>(i);
42  os << " " << mt.get(d,num);
43  }
44  os << "]\n";
45  }
46  return os << ")" << std::endl;
47 }
48 
50 {
51  for(int num=32;num<=39;num++){
52  for(int i=0;i<8;i++){
53  Direction d=static_cast<Direction>(i);
54  if(mt1.get(d,num)!=mt2.get(d,num) ) return false;
55  }
56  }
57  return true;
58 }
59 
60 /* ------------------------------------------------------------------------- */
61 // ;;; Local Variables:
62 // ;;; mode:c++
63 // ;;; c-basic-offset:2
64 // ;;; End:
const Offset getOffsetForBlack(Direction dir) const
黒にとってのoffsetを返す
Definition: boardTable.h:37
座標の差分
Definition: basic_type.h:430
Ptype ptype() const
Definition: basic_type.h:821
const Square square() const
Definition: basic_type.h:832
Player owner() const
Definition: basic_type.h:963
bool isOnBoard() const
Definition: basic_type.h:985
static const Piece EDGE()
Definition: basic_type.h:798
int getMoveMask(Ptype ptype) const
Definition: ptypeTable.h:84
const Piece pieceOf(int num) const
Definition: simpleState.h:76
const Piece pieceAt(Square sq) const
Definition: simpleState.h:167
駒毎に指定の方向の利きを持つ最後のSquare.
Definition: mobilityTable.h:30
const Square get(Direction d) const
Definition: mobilityTable.h:39
駒番号からMobilityContentを得る
Definition: mobilityTable.h:52
const Square get(Direction d, int num) const
Definition: mobilityTable.h:65
void set(Direction d, int num, Square pos)
Definition: mobilityTable.h:61
std::ostream & operator<<(std::ostream &os, MobilityContent const &mc)
bool operator==(const MobilityTable &, const MobilityTable &)
const PtypeTable Ptype_Table
Definition: tables.cc:97
constexpr int dirToMask(Direction dir)
Definition: basic_type.h:393
const BoardTable Board_Table
Definition: tables.cc:95
Direction
Definition: basic_type.h:310
@ WHITE
Definition: basic_type.h:10
constexpr Direction shortToLong(Direction d)
引数に longDirを与えてはいけない
Definition: basic_type.h:388
constexpr Direction inverse(Direction d)
Definition: basic_type.h:358