My Project
mobilityTable.cc
Go to the documentation of this file.
1/* mobilityTable.cc
2 */
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;
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
28std::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
35std::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
駒毎に指定の方向の利きを持つ最後のSquare.
const Square get(Direction d) const
駒番号からMobilityContentを得る
const Square get(Direction d, int num) const
void set(Direction d, int num, Square pos)
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