My Project
effectedNumTable.cc
Go to the documentation of this file.
1 /* effectedNumTable.cc
2  */
4 #include "osl/bits/ptypeTable.h"
5 #include "osl/bits/boardTable.h"
6 #include <iostream>
7 
8 void
10 {
11  for(int i=0;i<40;i++) contents[i].clear();
12 }
13 
15 {
16  clear();
17  for(int num=32;num<=39;num++){
18  osl::Piece p=state.pieceOf(num);
19  if(!p.isOnBoard()) continue;
20  int moveMask=Ptype_Table.getMoveMask(p.ptype());
21  for(int i=0;i<8;i++){
22  Direction d=static_cast<Direction>(i);
23  if(p.owner()==WHITE) d=inverse(d);
24  Direction longD=shortToLong(d);
25  if((moveMask&dirToMask(longD))==0) continue;
26  Offset o=Board_Table.getOffsetForBlack(static_cast<Direction>(i));
27  Square pos=p.square()+o;
28  Piece p1;
29  for(;(p1=state.pieceAt(pos)).isEmpty();pos+=o) ;
30  if(pos.isEdge()) continue;
31  int num1=p1.number();
32  contents[num1][static_cast<Direction>(i)]=num1;
33  }
34  }
35 }
36 
37 std::ostream& osl::effect::operator<<(std::ostream& os,osl::EffectedNumTable const& et)
38 {
39  os << "[\n";
40  for(int num=0;num<=39;num++){
41  os << " [";
42  for(int d=0;d<7;d++) os << et[num][static_cast<Direction>(d)] << ",";
43  os << et[num][static_cast<Direction>(7)] << "],\n";
44  }
45  return os << "]\n";
46 }
48 {
49  for(int i=0;i<8;i++){
50  for(int num=0;num<=39;num++){
51  if(e1[num][static_cast<Direction>(i)]!=e2[num][static_cast<Direction>(i)]) return false;
52  }
53  }
54  return true;
55 }
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
int number() const
Definition: basic_type.h:828
bool isOnBoard() const
Definition: basic_type.h:985
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
bool isEdge() const
onBoardから8近傍のオフセットを足した点がedgeかどうかの判定 そこそこ速くなった.
Definition: basic_type.h:591
CArray< EffectedNum, 40 > contents
std::ostream & operator<<(std::ostream &, const EffectedNumTable &)
bool operator==(const EffectedNumTable &, const EffectedNumTable &)
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