Beispiel #1
0
int QPosition::FindBPawnsMoves(void){
  QBitBoard bpmov(BlackPawnMovement(bpawns()));
  const int nbp = bpmov.PopCount();
  for(int i=0; i<nbp; i++){
    const int loc = bpmov.PopFirst();
    const U64& to = Piece[loc];
    const int cpiece = CheckWPiece(to);
    if(cpiece == -1){
      const U64 from = nortOne(to);// forward movements
      if(from & bpawns()) moves.push_back(QMove(from,to,0,true,cpiece));
      else                moves.push_back(QMove(nortOne(from),to,0,true,cpiece));
    } else{
      const U64 fromNoEa = noEaOne(to);
      if(fromNoEa & bpawns()){
        moves.push_back(QMove(fromNoEa,to,0,true,cpiece));
        cap_moves.push_back(moves.size()-1);
      }
      const U64 fromNoWe = noWeOne(to);
      if(fromNoWe & bpawns()){
        moves.push_back(QMove(fromNoWe,to,0,true,cpiece));
        cap_moves.push_back(moves.size()-1);
      }
    }
  }
  return moves.size();
}
Beispiel #2
0
int QPosition::FindWPawnsMoves(void){
  QBitBoard wpmov(WhitePawnMovement(wpawns()));
  const int nwp = wpmov.PopCount();
  for(int i=0; i<nwp; i++){
    const int loc = wpmov.PopFirst();
    const U64& to = Piece[loc];
    const int cpiece = CheckBPiece(to);
    if(cpiece == -1){
      const U64 from = soutOne(to);// forward movements
      if(from & wpawns()) moves.push_back(QMove(from,to,0,false,cpiece));
      else                moves.push_back(QMove(soutOne(from),to,0,false,cpiece));
    } else{
      const U64 fromSoEa = soEaOne(to);
      if(fromSoEa & wpawns()){
        moves.push_back(QMove(fromSoEa,to,0,false,cpiece));
        cap_moves.push_back(moves.size()-1);
      }
      const U64 fromSoWe = soWeOne(to);
      if(fromSoWe & wpawns()){
        moves.push_back(QMove(fromSoWe,to,0,false,cpiece));
        cap_moves.push_back(moves.size()-1);
      }
    }
  }
  return moves.size();
}
Beispiel #3
0
int QPosition::FindKingMoves(void){
  const U64& k = turnFlag ? bking() : wking();
  const U64& occ = turnFlag ? boccupancy : woccupancy;
  QBitBoard kmov(KingMovement(k,occ));
  const int nkmov = kmov.PopCount();
  for(int j=0; j<nkmov; j++){
    const int to_loc = kmov.PopFirst();
    const int cpiece = turnFlag ? CheckWPiece(Piece[to_loc]) : CheckBPiece(Piece[to_loc]);
    moves.push_back(QMove(k,Piece[to_loc],5,turnFlag,cpiece));
    if(cpiece != -1) cap_moves.push_back(moves.size()-1);
  }
  return moves.size();
}
Beispiel #4
0
void SPlotRect( IRect *irect )

{
	float xmin = XTRANS(irect->xmin);
	float ymin = YTRANS(irect->ymin);
	float xmax = XTRANS(irect->xmax);
	float ymax = YTRANS(irect->ymax);

	QMove( xmin , ymin );
	QPlot( xmin , ymax );
	QPlot( xmax , ymax );
	QPlot( xmax , ymin );
	QPlot( xmin , ymin );
}
Beispiel #5
0
int QPosition::FindQueenMoves(void){
  QBitBoard q(turnFlag ? bqueens() : wqueens());
  const int nq = q.PopCount();
  for(int i=0; i<nq; i++){
    const int from_loc = q.PopFirst();
    const U64& occ = turnFlag ? boccupancy : woccupancy;
    QBitBoard qmov(RookMovement(Piece[from_loc],occ));
    const int nqmov = qmov.PopCount();
    for(int j=0; j<nqmov; j++){
      const int to_loc = qmov.PopFirst();
      const int cpiece = turnFlag ? CheckWPiece(Piece[to_loc]) : CheckBPiece(Piece[to_loc]);
      moves.push_back(QMove(Piece[from_loc],Piece[to_loc],4,turnFlag,cpiece));
      if(cpiece != -1) cap_moves.push_back(moves.size()-1);
    }
  }
  return moves.size();
}
Beispiel #6
0
int QPosition::FindBishopMoves(void){
  QBitBoard b(turnFlag ? bbishops() : wbishops());
  const int nb = b.PopCount();
  for(int i=0; i<nb; i++){
    const int from_loc = b.PopFirst();
    const U64& occ = turnFlag ? boccupancy : woccupancy;
    QBitBoard bmov(BishopMovement(Piece[from_loc],occ));
    const int nbmov = bmov.PopCount();
    for(int j=0; j<nbmov; j++){
      const int to_loc = bmov.PopFirst();
      const int cpiece = turnFlag ? CheckWPiece(Piece[to_loc]) : CheckBPiece(Piece[to_loc]);
      moves.push_back(QMove(Piece[from_loc],Piece[to_loc],2,turnFlag,cpiece));
      if(cpiece != -1) cap_moves.push_back(moves.size()-1);
    }
  }
  return moves.size();
}
Beispiel #7
0
int QPosition::FindKnightMoves(void){
  QBitBoard kn(turnFlag ? bknights() : wknights());
  const int nkn = kn.PopCount();
  for(int i=0; i<nkn; i++){
    const int from_loc = kn.PopFirst();
    const U64& occ = turnFlag ? boccupancy : woccupancy;
    QBitBoard knmov(KnightMovement(Piece[from_loc],occ));
    const int nmov = knmov.PopCount();
    for(int j=0; j<nmov; j++){
      const int to_loc = knmov.PopFirst();
      const int cpiece = turnFlag ? CheckWPiece(Piece[to_loc]) : CheckBPiece(Piece[to_loc]);
      moves.push_back(QMove(Piece[from_loc],Piece[to_loc],1,turnFlag,cpiece));
      if(cpiece != -1) cap_moves.push_back(moves.size()-1);
    }
  }
  return moves.size();
}
Beispiel #8
0
void SMove( int x , int y )

{
	QMove( XTRANS(x) , YTRANS(y) );
}