/// <summary> /// KifuTimeSettingから、このクラスのインスタンスを構築して返す。 /// </summary> /// <param name="kifuTimeSettings"></param> public static UsiThinkLimit FromTimeSetting(PlayTimers timer, Color us) { var limit = new UsiThinkLimit(); limit.LimitType = UsiThinkLimitEnum.Time; var blackPlayer = timer.Player(Color.BLACK).KifuTimeSetting; var whitePlayer = timer.Player(Color.WHITE).KifuTimeSetting; // USIプロトコルでは先後の秒読みの違いを表現できないが、無理やり表現する //limit.ByoyomiTime = new TimeSpan(0, 0, ourPlayer.Byoyomi); // byoyomiとinctimeを同時に選択は出来ないので、IncTimeEnableを見て代入するほうを切り替える。 if (blackPlayer.IncTimeEnable) { limit.IncTimeBlack = new TimeSpan(0, 0, blackPlayer.IncTime); } else { limit.ByoyomiTimeBlack = new TimeSpan(0, 0, blackPlayer.Byoyomi); } if (whitePlayer.IncTimeEnable) { limit.IncTimeWhite = new TimeSpan(0, 0, whitePlayer.IncTime); } else { limit.ByoyomiTimeWhite = new TimeSpan(0, 0, whitePlayer.Byoyomi); } // 先後の残り時間を保存 limit.RestTimeBlack = timer.GetKifuMoveTimes().Player(Color.BLACK).RestTime; limit.RestTimeWhite = timer.GetKifuMoveTimes().Player(Color.WHITE).RestTime; var ourPlayer = timer.Player(us).KifuTimeSetting; if (ourPlayer.TimeLimitless) { // 検討モードでもないのに無制限に思考するわけにはいかないので、1手5秒とかに設定しておいてやる。 //limit.LimitType = UsiThinkLimitEnum.Infinite; limit.LimitType = UsiThinkLimitEnum.Time; if (us == Color.BLACK) { limit.ByoyomiTimeBlack = new TimeSpan(0, 0, 5); limit.IncTimeBlack = TimeSpan.Zero; limit.RestTimeBlack = TimeSpan.Zero; } else { limit.ByoyomiTimeWhite = new TimeSpan(0, 0, 5); limit.IncTimeWhite = TimeSpan.Zero; limit.RestTimeWhite = TimeSpan.Zero; } } return(limit); }
/// <summary> /// KifuTimeSettingから、このクラスのインスタンスを構築して返す。 /// </summary> /// <param name="kifuTimeSettings"></param> public static UsiThinkLimit FromTimeSetting(PlayTimers timer, Color us) { var limit = new UsiThinkLimit(); var ourPlayer = timer.Player(us).KifuTimeSetting; if (ourPlayer.IgnoreTime) { limit.LimitType = UsiThinkLimitEnum.Infinite; } else { limit.LimitType = UsiThinkLimitEnum.Time; // USIプロトコルでは先後の秒読みの違いを表現できない…。 limit.ByoyomiTime = new TimeSpan(0, 0, ourPlayer.Byoyomi); var blackPlayer = timer.Player(Color.BLACK).KifuTimeSetting; var whitePlayer = timer.Player(Color.WHITE).KifuTimeSetting; if (blackPlayer.IncTimeEnable) { limit.IncTimeBlack = new TimeSpan(0, 0, blackPlayer.IncTime); } if (whitePlayer.IncTimeEnable) { limit.IncTimeBlack = new TimeSpan(0, 0, whitePlayer.IncTime); } // 先後の残り時間を保存 limit.RestTimeBlack = timer.GetKifuMoveTimes().Player(Color.BLACK).RestTime; limit.RestTimeWhite = timer.GetKifuMoveTimes().Player(Color.WHITE).RestTime; } return(limit); }