示例#1
0
        public void AddMove(Move move)
        {
            var view = new NoteMoveView();

            const float verticalOffset = 30;
            const float width = (210 - 18) / 2;

            if (move.Piece.Color == PieceColor.White)
                view.Frame = new RectangleF(6, (move.Number / 2) * verticalOffset, width, verticalOffset);
            else
                view.Frame = new RectangleF(12 + width, (move.Number / 2) * verticalOffset, width, verticalOffset);

            view.Text = Notator.GetMoveNotation(move);

            noteContainer.Add(view);

            noteMoves[move.Id] = view;
        }
示例#2
0
 public void RemoveMove(Move move)
 {
     if (noteMoves.ContainsKey(move.Id))
     {
         noteMoves[move.Id].RemoveFromSuperview();
         noteMoves.Remove(move.Id);
     }
     else
     {
         Console.WriteLine("Missing move, cannot remove view from notation");
     }
 }
示例#3
0
        private void PerformMove(Move move)
        {
            Console.WriteLine("before: {0} - {1}", Moves.Count, MovesStorage.Count);

            var piece = move.Piece;

            move.Number = Moves.Count;

            Moves.Push(move);
            MovesStorage[move.Number] = move;

            var existing = GetPieceOn(move.ToX, move.ToY);
            if (existing != null)
            {
                Pieces.Remove(existing);
                move.CapturedPiece = existing;
                existing.RemoveFromSuperview();
            }
            piece.X = move.ToX;
            piece.Y = move.ToY;
            piece.Frame = new RectangleF(GetX(piece.X), GetY(piece.Y), CellWidth, CellWidth);
            piece.CurrentFrame = piece.Frame;
            isWhiteToMove = !isWhiteToMove;

            control.AddMove(move);

            Console.WriteLine("Performed move of {0} from {1} to {2}", piece.GetType().Name, move.FromX + "." + move.FromY, move.ToX + "." + move.ToY);

            Console.WriteLine("after: {0} - {1}", Moves.Count, MovesStorage.Count);
        }
示例#4
0
        public static string GetMoveNotation(Move move)
        {
            string result = "";

            if (move.Piece.Color == PieceColor.White)
                result += ((move.Number + 2) / 2) + ". ";

            result += GetPieceCode(move.Piece);

            result += move.CapturedPiece != null ? "x" : "";

            result += GetRow(move.FromX);

            result += (move.FromY + 1);

            result += "-" + GetRow(move.ToX);

            result += move.ToY + 1;

            return result;
        }
示例#5
0
        public override void TouchesEnded(NSSet touches, UIEvent evt)
        {
            var touch = touches.ToArray<UITouch>().First();

            var droppedPoint = touch.LocationInView(this);
            if (droppedPoint == PointF.Empty)
            {
                CleanupAfterDrop(null);
                return;
            }

            DragInfo drag;
            if (!drags.TryGetValue(touch, out drag))
            {
                CleanupAfterDrop(null);
                return;
            }

            drags.Remove(touch);
            var piece = drag.View;

            if ((isWhiteToMove && piece.IsBlack) ||
                (!isWhiteToMove && piece.IsWhite))
            {
                CleanupAfterDrop(piece);
                return;
            }

            var droppedCoords = GetXYFromCoords(droppedPoint);

            if (droppedCoords == null)
            {
                CleanupAfterDrop(piece);
                return;
            }

            int newX = droppedCoords.Item1;
            int newY = droppedCoords.Item2;

            CleanupAfterDrop(null);

            var moves = piece.GetMoves();

            if (IsPossibleMove(piece, newX, newY) && moves.Any(m => m.Item1 == newX && m.Item2 == newY))
            {
                var move = new Move
                {
                    Piece = piece,
                    FromX = piece.X,
                    FromY = piece.Y,
                    ToX = droppedCoords.Item1,
                    ToY = droppedCoords.Item2
                };

                PerformMove(move);
            }
            else
            {
                piece.Frame = piece.CurrentFrame;
            }
        }