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; }