/// <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); }); }