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 }
osl::Piece::number
int number() const
Definition: basic_type.h:828
osl::effect::EffectedNumTable::clear
void clear()
Definition: effectedNumTable.cc:9
osl::SimpleState::pieceAt
const Piece pieceAt(Square sq) const
Definition: simpleState.h:167
osl::Square
Definition: basic_type.h:532
osl::effect::operator==
bool operator==(const EffectedNumTable &, const EffectedNumTable &)
Definition: effectedNumTable.cc:47
osl::WHITE
@ WHITE
Definition: basic_type.h:10
ptypeTable.h
osl::Board_Table
const BoardTable Board_Table
Definition: tables.cc:95
osl::effect::operator<<
std::ostream & operator<<(std::ostream &, const EffectedNumTable &)
Definition: effectedNumTable.cc:37
osl::inverse
constexpr Direction inverse(Direction d)
Definition: basic_type.h:358
boardTable.h
osl::SimpleState
Definition: simpleState.h:35
osl::Offset
座標の差分
Definition: basic_type.h:430
osl::effect::EffectedNumTable::EffectedNumTable
EffectedNumTable()
Definition: effectedNumTable.h:51
osl::Ptype_Table
const PtypeTable Ptype_Table
Definition: tables.cc:97
osl::Piece
駒.
Definition: basic_type.h:788
osl::PtypeTable::getMoveMask
int getMoveMask(Ptype ptype) const
Definition: ptypeTable.h:84
osl::SimpleState::pieceOf
const Piece pieceOf(int num) const
Definition: simpleState.h:76
effectedNumTable.h
osl::shortToLong
constexpr Direction shortToLong(Direction d)
引数に longDirを与えてはいけない
Definition: basic_type.h:388
osl::Piece::owner
Player owner() const
Definition: basic_type.h:963
osl::BoardTable::getOffsetForBlack
const Offset getOffsetForBlack(Direction dir) const
黒にとってのoffsetを返す
Definition: boardTable.h:37
osl::Direction
Direction
Definition: basic_type.h:310
osl::Square::isEdge
bool isEdge() const
onBoardから8近傍のオフセットを足した点がedgeかどうかの判定 そこそこ速くなった.
Definition: basic_type.h:591
osl::effect::EffectedNumTable
Definition: effectedNumTable.h:44
osl::Piece::square
const Square square() const
Definition: basic_type.h:832
osl::Piece::ptype
Ptype ptype() const
Definition: basic_type.h:821
osl::Piece::isOnBoard
bool isOnBoard() const
Definition: basic_type.h:985
osl::effect::EffectedNumTable::contents
CArray< EffectedNum, 40 > contents
Definition: effectedNumTable.h:49
osl::dirToMask
constexpr int dirToMask(Direction dir)
Definition: basic_type.h:393