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; }
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"); } }
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); }
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; }
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; } }