/// <summary> /// Совершить ход. /// </summary> public void MakeMove(Point location, bool coolAI) { if (SelectedPeice is null) // нужно, чтобы пользователь выбрал клетку { return; } // определяем, что ход корректен var point = new GamePoint(location.X, location.Y); var moves = SelectedPeice.Value.GetMoves(InnerGame); if (!moves.Any(x => x.DestinationPoint.Equals(point))) { return; } // определяем тип хода var moveType = GameMoveType.Attack; var tile = InnerGame.GetGameTile(point, InnerGame.Turn); if (tile == GameTile.Another) { moveType = GameMoveType.Special; } if (tile == GameTile.Enemy) { moveType = GameMoveType.Attack; } if (tile == GameTile.Free) { moveType = GameMoveType.Standart; } // совершаем ход InnerGame.MakeMove(new GameMove(SelectedPeice.Value, moveType, point)); SelectedPeice = null; var turn = InnerGame.Turn == GameSide.White ? GameSide.Black : GameSide.White; InnerGame = new ChessGame(turn, InnerGame.Board, InnerGame.GameMoves); // если конец игры if (InnerGame.IsEndGame) { Winner = GameSide.White; return; } // ход ИИ var aiMove = InnerGame.AIMove(coolAI); if (aiMove.IsDefined) // если ИИ смог совершить ход { InnerGame.MakeMove(aiMove); turn = InnerGame.Turn == GameSide.White ? GameSide.Black : GameSide.White; InnerGame = new ChessGame(turn, InnerGame.Board, InnerGame.GameMoves); if (InnerGame.IsEndGame) { Winner = GameSide.Black; return; } } else // иначе продолжаем ход игрока (внештатная ситуация, не должен сюда переходить) { turn = InnerGame.Turn == GameSide.White ? GameSide.Black : GameSide.White; InnerGame = new ChessGame(turn, InnerGame.Board, InnerGame.GameMoves); } }