示例#1
0
        /// <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);
            }
        }