コード例 #1
0
ファイル: Queen.cs プロジェクト: slapadominik/Chess
        private int?GetHorizontalVerticalDirectionIndicator(string to)
        {
            if (LocationToNumberMapper.ContainsKey(to))
            {
                var valueFrom = LocationToNumberMapper[CurrentLocation];
                var valueTo   = LocationToNumberMapper[to];
                var diff      = valueTo - valueFrom;

                if (diff < 0 && diff % UP_INDICATOR == 0)
                {
                    return(UP_INDICATOR);
                }
                if (diff > 0 && diff % DOWN_INDICATOR == 0)
                {
                    return(DOWN_INDICATOR);
                }

                if (diff < 0 && CurrentLocation[1] == to[1])
                {
                    return(LEFT_INDICATOR);
                }

                if (diff > 0 && CurrentLocation[1] == to[1])
                {
                    return(RIGHT_INDICATOR);
                }

                return(null);
            }
            throw new InvalidFieldException($"Destination field [{to}] doesn't exist!");
        }
コード例 #2
0
        private bool CanMoveHorizontally(IBoard board, string to, int directionIndicator)
        {
            if (LocationToNumberMapper.ContainsKey(to))
            {
                return(IsHorizontalMoveValid(to, _validHorizontalMoves) && !IsCollisionOnPath(board, to, directionIndicator));
            }

            return(false);
        }
コード例 #3
0
 private bool CanMakeMoveToDestination(string field)
 {
     if (LocationToNumberMapper.ContainsKey(field))
     {
         var valueFrom = LocationToNumberMapper[CurrentLocation];
         var valueTo   = LocationToNumberMapper[field];
         foreach (var validMove in _validMoves)
         {
             if (valueTo - valueFrom == validMove)
             {
                 return(true);
             }
         }
     }
     return(false);
 }
コード例 #4
0
 private bool IsHorizontalMoveValid(string to, IEnumerable <int> validMoves)
 {
     if (LocationToNumberMapper.ContainsKey(to))
     {
         var valueFrom = LocationToNumberMapper[CurrentLocation];
         var valueTo   = LocationToNumberMapper[to];
         foreach (var validMove in validMoves)
         {
             if (Math.Abs(valueTo - valueFrom) == validMove)
             {
                 return(true);
             }
         }
     }
     return(false);
 }
コード例 #5
0
ファイル: Knight.cs プロジェクト: slapadominik/Chess
        private bool IsMoveValid(string to)
        {
            if (LocationToNumberMapper.ContainsKey(to))
            {
                var valueFrom = LocationToNumberMapper[CurrentLocation];
                var valueTo   = LocationToNumberMapper[to];
                foreach (var validMove in _validMoves)
                {
                    if (valueTo - valueFrom == validMove)
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }
コード例 #6
0
ファイル: Pawn.cs プロジェクト: slapadominik/Chess
        public override bool CanAttackField(IBoard board, string to)
        {
            if (LocationToNumberMapper.ContainsKey(to))
            {
                var locationDifference = LocationToNumberMapper[to] - LocationToNumberMapper[CurrentLocation];

                switch (Math.Abs(locationDifference))
                {
                case CAPTURE1_MOVE_DIFFERENCE:
                case CAPTURE2_MOVE_DIFFERENCE:
                    return(GetColor() == Color.White ? locationDifference < 0 : locationDifference > 0);

                default:
                    return(false);
                }
            }

            return(false);
        }
コード例 #7
0
ファイル: Pawn.cs プロジェクト: slapadominik/Chess
        private bool IsMoveValid(IBoard board, string to)
        {
            if (LocationToNumberMapper.ContainsKey(to))
            {
                if (board.GetChessman(to)?.GetColor() == GetColor())
                {
                    return(false);
                }

                var locationDifference = LocationToNumberMapper[to] - LocationToNumberMapper[CurrentLocation];

                switch (Math.Abs(locationDifference))
                {
                case NORMAL_MOVE_DIFFERENCE:
                    if (board.GetChessman(to) != null)
                    {
                        return(false);
                    }
                    return(GetColor() == Color.White ? locationDifference < 0 : locationDifference > 0);

                case CAPTURE1_MOVE_DIFFERENCE:
                case CAPTURE2_MOVE_DIFFERENCE:
                    if (board.GetChessman(to) == null)
                    {
                        return(false);
                    }
                    return(board.GetChessman(to).GetColor() != GetColor() && GetColor() == Color.White ? locationDifference < 0 : locationDifference > 0);

                case FIRST_MOVE_DIFFERENCE:
                    if (!IsFirstMove)
                    {
                        return(false);
                    }
                    return(GetColor() == Color.White ? locationDifference < 0 : locationDifference > 0 && IsPrecedingFieldEmpty(board, GetColor()));

                default:
                    return(false);
                }
            }

            return(false);
        }