private Board GenerateBoardFromGrid(Grid currentState) { Board b = new Board(false); List<Tuple<char, int>> HaveAlreadyMoved = new List<Tuple<char, int>>(); //0 Special Pawn foreach (Pawn pawn in currentState.PawnLocations) { if(pawn.Coord.x < 1 || pawn.Coord.y < 1){ //Special Pawn! if (pawn.Name == EnPassantSpecialName) { b.EnPassant = new Tuple<char, int>(Board.Columns_Inv[Math.Abs(pawn.Coord.x)], Math.Abs(pawn.Coord.y)); } else { if (pawn.Name == HaveAlreadyMovedSpecialName) { var hasAlreadyMoved = new Tuple<char, int>(Board.Columns_Inv[Math.Abs(pawn.Coord.x)], Math.Abs(pawn.Coord.y)); HaveAlreadyMoved.Add(hasAlreadyMoved); } else { throw new Exception(String.Format("Piece Unknown ({0}) or badly located: [{1},{2}]", pawn.Name, pawn.Coord.x, pawn.Coord.y)); } } } else{ if (pawn.Coord.x < 9 && pawn.Coord.y < 9) { var p = GetPiece(pawn); b.PutPiece(p, Board.Columns_Inv[pawn.Coord.x], pawn.Coord.y); } } } foreach (var hasAlreadyMoved in HaveAlreadyMoved) { var piece = b.GetPiece(hasAlreadyMoved.Item1, hasAlreadyMoved.Item2); ((IHasAlreadyMoved)piece).HasAlreadyMoved = true; } return b; }