public King(GameObject figure, Vector2 coords, FigColor color) : base(figure, coords, color) { r1 = Gameplay.keyValuePairs[0, (int)coords.y] as Rook; r2 = Gameplay.keyValuePairs[7, (int)coords.y] as Rook; }
public Queen(GameObject figure, Vector2 coords, FigColor color) : base(figure, coords, color) { }
public Figure(GameObject figure, Vector2 coords, FigColor color) { this.color = color; go = SpawnFigure(figure, coords); }
public Bishop(GameObject figure, Vector2 coords, FigColor color) : base(figure, coords, color) { }
public Knight(GameObject figure, Vector2 coords, FigColor color) : base(figure, coords, color) { }
private void Update() { //левый клик мыши if (Input.GetMouseButtonDown(0)) { //координаты клика Vector2 clickWorldPos = Camera.main.ScreenToWorldPoint(new Vector2(Input.mousePosition.x, Input.mousePosition.y)); //перевод клика в локальные координаты!!!!! Vector2 clickLocalPos = GameObject.Find("Game") .transform.InverseTransformPoint(clickWorldPos); //выравнивание clickLocalPos clickLocalPos.y = Convert.ToInt32(clickLocalPos.y); clickLocalPos.x = Convert.ToInt32(clickLocalPos.x); //если нет активной фигуры if (!figActivation) { //находим клетку на доске с координатами клика Figure clickedFigure = GetFigureByCoords(clickLocalPos); //проверяем содержит ли данная клетка фигуру if (clickedFigure is Figure) { //проверяем на поочередность фигуры if (clickedFigure.color == nowTurn) { activeFigure = clickedFigure; //записываем в лист возможные хода данной фигуры canMovesList = Aa(activeFigure, ReturnKingByColor(nowTurn)); //вывод возможных ходов ShowPossibleMoves(canMovesList); //если данной фигурой можно походить--активация фигуры if (canMovesList.Count != 0) { //делаем выбраную фигуру активной Vector3 thisPosVector = new Vector3(activeFigure.FigCoords.x, activeFigure.FigCoords.y, 1); print(thisPosVector); Instantiate(showThisPos, GameObject.Find("Game").transform.TransformPoint(thisPosVector), Quaternion.identity); figActivation = true; } } } } //если активная фигура есть else { //деактивация фигуры при повторном нажатии на неё if (clickLocalPos == activeFigure.FigCoords) { //очистка списка с возможными ходами canMovesList.Clear(); figActivation = false; foreach (GameObject obj in GameObject.FindGameObjectsWithTag("showMoves")) { Destroy(obj); } } //проверяет есть ли в списке возможных ходов выбранная клетка if (canMovesList.Contains(clickLocalPos)) { //если на выбранной клетке есть вражеская фигура, уничтожить её if (GetFigureByCoords(clickLocalPos) is Figure) { Destroy(GetFigureByCoords(clickLocalPos).go); } if (activeFigure is King) { if ((activeFigure as King).Castling(clickLocalPos)) { int diff = (int)clickLocalPos.x - (int)activeFigure.FigCoords.x; Rook castledRook = diff > 0 ? (activeFigure as King).r2 : (activeFigure as King).r1; int rookPos = diff > 0 ? (int)clickLocalPos.x - 1 : (int)clickLocalPos.x + 1; //обновляем матрицу keyValuePairs[(int)castledRook.FigCoords.x, (int)castledRook.FigCoords.y] = null; castledRook.FigCoords = new Vector2(rookPos, castledRook.FigCoords.y); keyValuePairs[(int)castledRook.FigCoords.x, (int)castledRook.FigCoords.y] = castledRook; } (activeFigure as King).canCastling = false; } if (activeFigure is Rook) { (activeFigure as Rook).canCastling = false; } //обновляем матрицу keyValuePairs[(int)clickLocalPos.x, (int)clickLocalPos.y] = activeFigure; keyValuePairs[(int)activeFigure.FigCoords.x, (int)activeFigure.FigCoords.y] = null; //меняем координаты выбраной фигуры activeFigure.FigCoords = clickLocalPos; if (activeFigure is Pawn && (activeFigure.FigCoords.y == 7 || activeFigure.FigCoords.y == 0)) { Destroy(activeFigure.go); keyValuePairs[(int)activeFigure.FigCoords.x, (int)activeFigure.FigCoords.y] = new Queen(queenW, activeFigure.FigCoords, activeFigure.color); } //деативируем фигуру figActivation = false; //удаление возможных ходов foreach (GameObject obj in GameObject.FindGameObjectsWithTag("showMoves")) { Destroy(obj); } //проверка на шах CheckCheck(whiteKing); CheckCheck(blackKing); if (CheckCheckMate(whiteKing)) { winnerText.text = "Black win"; winPanel.SetActive(true); } else if (CheckCheckMate(blackKing)) { winnerText.text = "White win"; winPanel.SetActive(true); } //смена очередности фигур if (nowTurn == FigColor.White) { nowTurn = FigColor.Black; nowTurnText.text = "Black Turn"; } else { nowTurn = FigColor.White; nowTurnText.text = "White Turn"; } //очистка списка с возможными ходами canMovesList.Clear(); } } } }
private King ReturnKingByColor(FigColor color) { return(color == FigColor.White ? whiteKing : blackKing); }