Esempio n. 1
0
 internal override List <Position> GetMovablePositions(Game game)
 {
     return(Position.Whole
            .Where(pos => Position.Distance(pos, Position) == 1)
            .Where(pos => game.GetPieceAt(pos) == null)
            .SelectMany(middlePos =>
     {
         int diffX = middlePos.X - Position.X;
         int diffY = middlePos.Y - Position.Y;
         if (diffX != 0)
         {
             return new List <Position>
             {
                 new Position(middlePos.X + diffX, Position.Y - 1),
                 new Position(middlePos.X + diffX, Position.Y + 1)
             };
         }
         else
         {
             return new List <Position>
             {
                 new Position(Position.X - 1, middlePos.Y + diffY),
                 new Position(Position.X + 1, middlePos.Y + diffY)
             };
         }
     })
            .Where(pos => Position.IsOnTable(pos))
            .Where(pos => !IsSameColor(game.GetPieceAt(pos)))
            .ToList());
 }
Esempio n. 2
0
 internal override List <Position> GetMovablePositions(Game game)
 {
     return(Position.Whole
            .Where(pos => pos.X == Position.X || pos.Y == Position.Y)
            .Where(pos => Position.Route(Position, pos).All(routePos => game.GetPieceAt(routePos) == null))
            .Where(pos => !IsSameColor(game.GetPieceAt(pos)))
            .ToList());
 }
Esempio n. 3
0
 internal override List <Position> GetMovablePositions(Game game)
 {
     return(Position.Palaces[Color]
            .Where(pos => Position.Distance(pos, Position) == 2 && pos.X != Position.X && pos.Y != Position.Y)
            .Where(pos => !IsSameColor(game.GetPieceAt(pos)))
            .ToList());
 }
Esempio n. 4
0
 internal override List <Position> GetMovablePositions(Game game)
 {
     return(Position.Halves[Color]
            .Where(pos => Position.Distance(pos, Position) == 4 && pos.X != Position.X && pos.Y != Position.Y)
            .Where(pos =>
     {
         var route = Position.Route(Position, pos);
         if (route.Count != 1)
         {
             return false;
         }
         return game.GetPieceAt(route[0]) == null;
     })
            .Where(pos => !IsSameColor(game.GetPieceAt(pos)))
            .ToList());
 }
Esempio n. 5
0
        internal override List <Position> GetMovablePositions(Game game)
        {
            var list = new List <Position>();

            list.AddRange(Position.Palaces[Color]
                          .Where(pos => Position.Distance(pos, Position) == 1)
                          .Where(pos => !IsSameColor(game.GetPieceAt(pos)))
                          );
            list.AddRange(
                new List <Position> {
                game.Pieces.First(piece => piece is General && piece != this).Position
            }
                .Where(pos => Position.X == pos.X)
                .Where(pos => Position.Route(pos, Position).All(routePos => game.GetPieceAt(routePos) == null))
                );
            return(list);
        }
Esempio n. 6
0
        internal override List <Position> GetMovablePositions(Game game)
        {
            var list = new List <Position>();

            list.AddRange(
                Position.Whole
                .Where(pos => pos.X == Position.X || pos.Y == Position.Y)
                .Where(pos => Position.Route(Position, pos).All(routePos => game.GetPieceAt(routePos) == null))
                .Where(pos => game.GetPieceAt(pos) == null)
                );
            list.AddRange(
                Position.Whole
                .Where(pos => pos.X == Position.X || pos.Y == Position.Y)
                .Where(pos => game.GetPieceAt(pos) != null && !IsSameColor(game.GetPieceAt(pos)))
                .Where(pos => Position.Route(Position, pos).Count(routePos => game.GetPieceAt(routePos) != null) == 1)
                );
            return(list);
        }
Esempio n. 7
0
        internal override List <Position> GetMovablePositions(Game game)
        {
            var list = new List <Position>();

            list.AddRange(
                new List <Position> {
                Position.move(0, 1 * UpwardFactor)
            }.Where(pos => !IsSameColor(game.GetPieceAt(pos)))
                );
            if (!Position.Halves[Color].Contains(Position))
            {
                list.AddRange(
                    new List <Position> {
                    Position.move(-1, 0), Position.move(1, 0)
                }.Where(pos => !IsSameColor(game.GetPieceAt(pos)))
                    );
            }
            return(list);
        }