My Project
effectedNumTable.cc
Go to the documentation of this file.
1/* effectedNumTable.cc
2 */
6#include <iostream>
7
8void
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;
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
37std::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
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