예제 #1
0
        private void ChessBoard_ChessBoardClicked(object sender, EventArgs e)
        {
            ChessBoardClickedEventArgs args = (ChessBoardClickedEventArgs)e;
            Position position = args.Position;

            // Jeżeli nic nie zaznaczone to wybieramy bierke do zaznaczenia
            if (Dragged == null)
            {
                if (BlackPieces.Exists(p => p.Position.Equals(position)))
                {
                    Dragged = BlackPieces.Find(p => p.Position.Equals(position));
                }
                else if (WhitePieces.Exists(p => p.Position.Equals(position)))
                {
                    Dragged = WhitePieces.Find(p => p.Position.Equals(position));
                }
            }
            // Wykonanie ruchu
            else
            {
                try
                {
                    // Sprawdzenie czy mozna wykonac ruch
                    if (Dragged.Color == PieceColor.White)
                    {
                        if (!Dragged.AllowMove(position, WhitePieces, BlackPieces))
                        {
                            return;
                        }
                    }
                    else
                    {
                        if (!Dragged.AllowMove(position, BlackPieces, WhitePieces))
                        {
                            return;
                        }
                    }
                    if (BlackPieces.Exists(p => p.Position.Equals(position)))
                    {
                        BlackPieces.Remove(BlackPieces.Find(p => p.Position.Equals(position)));
                        WhitePieces.Remove(WhitePieces.Find(p => p.Position.Equals(Dragged.Position)));
                        Dragged.Position = position;
                        WhitePieces.Add(Dragged);
                    }
                    else if (WhitePieces.Exists(p => p.Position.Equals(position)))
                    {
                        BlackPieces.Remove(BlackPieces.Find(p => p.Position.Equals(Dragged.Position)));
                        WhitePieces.Remove(WhitePieces.Find(p => p.Position.Equals(position)));
                        Dragged.Position = position;
                        BlackPieces.Add(Dragged);
                    }
                    else
                    {
                        if (Dragged.Color == Models.PieceColor.White)
                        {
                            WhitePieces.Find(x => x.Position.Equals(Dragged.Position)).Position = position;
                        }
                        else
                        {
                            BlackPieces.Find(x => x.Position.Equals(Dragged.Position)).Position = position;
                        }
                    }
                }
                finally
                {
                    ChessBoard.GenerateBoardPieces(WhitePieces, BlackPieces);
                    Dragged = null;
                }
            }
        }