//Обновить инф. о положении фигур на доске (массивы фигур,клеток и взятых фигур) internal void UpdatePiecesOnDesk(PieceMove pieceMove, Color inGameColor) { curKilledPieceSquare = "none"; Square kingSq = FindKing(inGameColor); King k = (King)kingSq.ownedPiece; if (pieceMove.name != " 0-0 " && pieceMove.name != "0-0-0") { int fromX = pieceMove.fromX; int fromY = pieceMove.fromY; int toX = pieceMove.toX; int toY = pieceMove.toY; //перемещение фигуры if (pieces[toX, toY] != Piece.nullPiece) { pieces[toX, toY].movesVector.status = "delete"; curKilledPieceSquare = pieceMove.to; deadPieces.Add((char)pieces[toX, toY].pieceKey); } pieces[toX, toY] = pieces[fromX, fromY]; pieces[toX, toY].movesVector.status = "recalculate"; pieces[toX, toY].movesVector.startPosition = pieceMove.to; pieces[fromX, fromY] = Piece.nullPiece; //взятие на проходе if ((pieceMove.pieceKey == blackPawn || pieceMove.pieceKey == whitePawn) && notation.EnPassant == deskSquares[toX, toY].Name) { pieces[toX, fromY].movesVector.status = "delete"; curKilledPieceSquare = deskSquares[toX, fromY].Name; deadPieces.Add((char)pieces[toX, fromY].pieceKey); pieces[toX, fromY] = Piece.nullPiece; } //определяем был ли совершен ход пешкой на две клетки if (Math.Abs(toY - fromY) == 2 && (pieceMove.pieceKey == blackPawn || pieceMove.pieceKey == whitePawn)) { notation.EnPassant = deskSquares[(toX + fromX) / 2, (toY + fromY) / 2].Name; } else { notation.EnPassant = "-"; } //превращение пешки (Pe7e8N,Pa7b8Q и т.д.). Превращение фиксируется на 6-ом знаке(если оно есть) if (pieceMove.promotion) { Piece piece = ParseToPiece(pieceMove.promotionCharKey); pieces[toX, toY] = piece; } //право рокировки навсегда теряется при ходе короля if ((k.shortCastling || k.longCastling) && pieceMove.pieceKey == k.pieceKey) { k.shortCastling = false; k.longCastling = false; } //право рокировки с ладьей навсегда теряется при ходе этой ладьи или ее взятии if (k.shortCastling && k.pieceKey == whiteKing && pieces[7, 0].pieceKey != whiteRook) { k.shortCastling = false; } if (k.longCastling && k.pieceKey == whiteKing && pieces[0, 0].pieceKey != whiteRook) { k.longCastling = false; } if (k.shortCastling && k.pieceKey == blackKing && pieces[7, 7].pieceKey != blackRook) { k.shortCastling = false; } if (k.longCastling && k.pieceKey == blackKing && pieces[0, 7].pieceKey != blackRook) { k.longCastling = false; } } else { MakeCastling(k, pieceMove); } UpdateDeskSquares(); }