Exemplo n.º 1
0
        void Knight::calcTrajectory()
        {
            //Knights can only move in 3-long 2-short L shapes

            for(Position_t m : {Position_t( 1, -2)
                               ,Position_t( 2, -1)
                               ,Position_t( 2,  1)
                               ,Position_t( 1,  2)
                               ,Position_t(-1,  2)
                               ,Position_t(-2,  1)
                               ,Position_t(-2, -1)
                               ,Position_t(-1, -2)})
            {
                Position_t t = Position_t(pos).move(m.x, m.y);
                addTrajectory(t);
                addCapturing(t);
            }
        }
Exemplo n.º 2
0
 void King::calcTrajectory()
 {
     //Kings can move one space in all eight directions
     using Dir = util::Direction;
     for(Dir d : {Dir::North
                 ,Dir::NorthEast
                 ,Dir::East
                 ,Dir::SouthEast
                 ,Dir::South
                 ,Dir::SouthWest
                 ,Dir::West
                 ,Dir::NorthWest})
     {
         Position_t t = Position_t(pos).move(d);
         addTrajectory(t);
         addCapturing(t);
     }
 }
Exemplo n.º 3
0
 void Rook::calcTrajectory()
 {
     //Rooks can move infinitely in the four straight directions
     using Dir = util::Direction;
     for(Dir d : {Dir::North
                 ,Dir::East
                 ,Dir::South
                 ,Dir::West})
     {
         Position_t t;
         for(signed i = 1; board.valid(t = Position_t(pos).move(d, i)); ++i)
         {
             addCapturing(t);
             if(!board.occupied(t))
             {
                 addTrajectory(t);
             }
             else break; //can't jump over pieces
         }
     }
 }