Esempio n. 1
0
 private function FindTilesAttackedByRook($nRank, $nFile)
 {
     // $this->nCalls++;
     // $nTile = $nRank * 8 + $nFile; $nBlockingTile = 0;
     // // Find tiles to attack in the four horizontal/vertical directions
     // $n64Blockers = BitBoard::_AND_($this->n64All, $this->Plus8[$nTile]);
     // $nBlockingTile = $n64Blockers->get_pos_of_first_one_bit(); // $this->ChessUtils->FindFirstOneBit($n64Blockers);
     // $n64AttackedTiles = BitBoard::_XOR_($this->Plus8[$nTile], $this->Plus8[$nBlockingTile]);
     // $n64Blockers = BitBoard::_AND_($this->n64All, $this->Plus1[$nTile]);
     // $nBlockingTile = $n64Blockers->get_pos_of_first_one_bit(); // $this->ChessUtils->FindFirstOneBit($n64Blockers);
     // $n64AttackedTiles->_OR(BitBoard::_XOR_($this->Plus1[$nTile], $this->Plus1[$nBlockingTile]));
     // $n64Blockers = BitBoard::_AND_($this->n64All, $this->Minus8[$nTile]);
     // $nBlockingTile = $n64Blockers->get_pos_of_last_one_bit(); // $this->ChessUtils->FindLastOneBit($n64Blockers);
     // $n64AttackedTiles->_OR(BitBoard::_XOR_($this->Minus8[$nTile], $this->Minus8[$nBlockingTile]));
     // $n64Blockers = BitBoard::_AND_($this->n64All, $this->Minus1[$nTile]);
     // $nBlockingTile = $n64Blockers->get_pos_of_last_one_bit(); // $this->ChessUtils->FindLastOneBit($n64Blockers);
     // $n64AttackedTiles->_OR(BitBoard::_XOR_($this->Minus1[$nTile], $this->Minus1[$nBlockingTile]));
     // return $n64AttackedTiles;
     // NOTE: is this way faster? It creates less duplicates.
     $this->nCalls++;
     $nTile = $nRank * 8 + $nFile;
     $nBlockingTile = 0;
     $tmp = new BitBoard();
     // Find tiles to attack in the four horizontal/vertical directions
     $n64Blockers = $tmp->_OR($this->n64All)->_AND($this->Plus8[$nTile]);
     $nBlockingTile = $n64Blockers->get_pos_of_first_one_bit();
     // $this->ChessUtils->FindFirstOneBit($n64Blockers);
     $n64AttackedTiles = BitBoard::_XOR_($this->Plus8[$nTile], $this->Plus8[$nBlockingTile]);
     $tmp->set_to_zero();
     $n64Blockers = $tmp->_OR($this->n64All)->_AND($this->Plus1[$nTile]);
     $nBlockingTile = $n64Blockers->get_pos_of_first_one_bit();
     // $this->ChessUtils->FindFirstOneBit($n64Blockers);
     $n64AttackedTiles->_OR(BitBoard::_XOR_($this->Plus1[$nTile], $this->Plus1[$nBlockingTile]));
     $tmp->set_to_zero();
     $n64Blockers = $tmp->_OR($this->n64All)->_AND($this->Minus8[$nTile]);
     $nBlockingTile = $n64Blockers->get_pos_of_last_one_bit();
     // $this->ChessUtils->FindLastOneBit($n64Blockers);
     $n64AttackedTiles->_OR(BitBoard::_XOR_($this->Minus8[$nTile], $this->Minus8[$nBlockingTile]));
     $tmp->set_to_zero();
     $n64Blockers = $tmp->_OR($this->n64All)->_AND($this->Minus1[$nTile]);
     $nBlockingTile = $n64Blockers->get_pos_of_last_one_bit();
     // $this->ChessUtils->FindLastOneBit($n64Blockers);
     $n64AttackedTiles->_OR(BitBoard::_XOR_($this->Minus1[$nTile], $this->Minus1[$nBlockingTile]));
     return $n64AttackedTiles;
 }