Exemplo n.º 1
0
        void AutoPlay_Stopped(object sender, EventArgs e)
        {
            Board           = CurrentBoard.Clone();
            EvaluationValue = CurrentEvaluationValue;

            this.lastPlayedTime = DateTime.Now;
        }
Exemplo n.º 2
0
        /// <summary>
        /// 可能なら変化の自動再生を開始します。
        /// </summary>
        /// <remarks>
        /// GUIスレッドで呼んでください。
        /// </remarks>
        private void PlayVariation(VariationInfo variation,
                                   IEnumerable <BoardMove> bmoveList)
        {
            if (true)
            {
                return;
            }

            var shogi = Global.ShogiControl;

            if (shogi == null || shogi.AutoPlayState == AutoPlayState.Playing)
            {
                return;
            }

            // 引数にBoardを渡すことで、Boardそのものを変えながら
            // 自動再生を行うようにします。
            var board    = CurrentBoard.Clone();
            var autoPlay = new AutoPlay(board, bmoveList)
            {
                IsChangeBackground = true,
                EndingInterval     = TimeSpan.FromSeconds(0.1),
            };

            autoPlay.Stopped += AutoPlay_Stopped;

            // 評価値を表示している変化に合わせます。
            EvaluationValue = variation.Value;

            // 再生済みフラグを立ててしまいます。
            variation.IsShowed = true;

            Board = board;
            shogi.StartAutoPlay(autoPlay);
        }
Exemplo n.º 3
0
        /// <summary>
        /// 現局面の指し手を進めます。
        /// </summary>
        public void DoMove(BoardMove bmove, int seconds)
        {
            var prevCurrentBoard = CurrentBoard.Clone();

            // 符号は設定されていないことがあります。
            //csaMove.Side = CurrentBoard.Turn;

            /*var bmove = CurrentBoard.ConvertCsaMove(csaMove);
             * if (bmove == null || !bmove.Validate())
             * {
             *  Log.Error("{0}手目 {1}を変換できませんでした。",
             *      CurrentBoard.MoveCount,
             *      csaMove.ToPersonalString());
             *  return;
             * }*/

            if (!CurrentBoard.DoMove(bmove))
            {
                Log.Error("{0}手目 {1}を指せませんでした。",
                          CurrentBoard.MoveCount, bmove);
                return;
            }

            // 手番側の残り時間を減らしたのち、手番を入れ替えます。
            DecBaseLeaveTime(CurrentTurn, seconds);

            InitBoard(CurrentBoard, false, false);

            WPFUtil.UIProcess(() =>
            {
                // 実際に指した手と一致する変化は残します。
                var list = VariationList
                           .Where(_ => _.MoveList.Count() >= 2)
                           .Where(_ => bmove.Equals(_.MoveList[0]))
                           .Select(_ =>
                                   new VariationInfo
                {
                    IsShowed  = false,
                    MoveList  = _.MoveList.Skip(1).ToList(),
                    Value     = _.Value,
                    NodeCount = _.NodeCount,
                })
                           .ToList();

                VariationList.Clear();
                list.ForEach(_ => VariationList.Add(_));

                // 指し手の再生を行います。
                AddDoMoveAutoPlay(prevCurrentBoard, bmove);
            });
        }
Exemplo n.º 4
0
        public void MakeMove(ChessMove move)
        {
            PreviousMove  = move;
            PreviousBoard = CurrentBoard.Clone();
            CurrentBoard.MakeMove(move);

            if (CurrentPlayerColor == ChessColor.White)
            {
                CurrentPlayerColor = ChessColor.Black;
            }
            else
            {
                CurrentPlayerColor = ChessColor.White;
            }
        }
Exemplo n.º 5
0
        private IEnumerable <BoardMove> GetVariationMoveList(VariationInfo variation)
        {
            var board     = CurrentBoard.Clone();
            var bmoveList = new List <BoardMove>();

            foreach (var bmove in variation.MoveList)
            {
                if (!board.DoMove(bmove))
                {
                    break;
                }

                bmoveList.Add(bmove);
            }

            // 7手以下の場合は、再生しません。
            return(bmoveList.Count < 7 ? null : bmoveList);
        }