// -- screen update /// <summary> /// 選択しているプリセットが変更されたか、もしくはViewModelにセットされているEngineDefineが /// 変更になったかした時に、プリセットの説明文を更新するためのハンドラ /// </summary> private void UpdatePresetText(EngineDefineEx engineDefine) { string text = null; try { if (engineDefine == null) { return; } var presets = engineDefine.EngineDefine.Presets; var selectedIndex = comboBox1.SelectedIndex; // 未選択か? if (selectedIndex < 0) { return; } if (presets.Count <= selectedIndex) { selectedIndex = comboBox1.SelectedIndex = 0; } text = presets[selectedIndex].Description; } finally { textBox2.Text = text; } }
/// <summary> /// 各メンバーの値を設定する。CalcValue()の前に呼び出して設定しないといけない。 /// </summary> public void SetValue(Color c, EngineDefineEx engineDefineEx, EngineConfig config, EnginePreset preset, bool ponder) { EngineDefines[(int)c] = engineDefineEx; EngineConfigs[(int)c] = config; EnginePresets[(int)c] = preset; Ponders[(int)c] = ponder; }
/// <summary> /// エンジンを初期化する。 /// </summary> /// <param name="usiEnginePlayer"></param> /// <param name="selectedPresetIndex">プリセットの選択番号+1。選んでなければ0。</param> private void InitUsiEnginePlayer(Color c, UsiEnginePlayer usiEnginePlayer, EngineDefineEx engineDefineEx, int selectedPresetIndex, GameModeEnum nextGameMode, bool ponder) { EngineDefineExes[(int)c] = engineDefineEx; // ここに保存しておく。 var presets = engineDefineEx.EngineDefine.Presets; presetNames[(int)c] = (selectedPresetIndex < presets.Count) ? presets[selectedPresetIndex].Name : null; var engine_config = TheApp.app.EngineConfigs; EngineConfig config = null; switch (nextGameMode) { case GameModeEnum.InTheGame: config = engine_config.NormalConfig; break; case GameModeEnum.ConsiderationWithEngine: config = engine_config.ConsiderationConfig; break; case GameModeEnum.ConsiderationWithMateEngine: config = engine_config.MateConfig; break; } // Hash、Threadsのマネージメントのために代入しておく。 UsiEngineHashManager.SetValue(c, engineDefineEx, config, ponder); var engine = usiEnginePlayer.Engine; var engineDefine = engineDefineEx.EngineDefine; // "usiok"に対してオプションを設定するので、Stateの変更イベントをハンドルする。 engine.AddPropertyChangedHandler("State", (args) => { try { var state = (UsiEngineState)args.value; if (state == UsiEngineState.UsiOk) { // オプションの値を設定しなおす。 EngineDefineUtility.SetDefaultOption(engine.OptionList, engineDefineEx, selectedPresetIndex, config, UsiEngineHashManager.HashSize[(int)c], UsiEngineHashManager.Threads[(int)c], ponder); } } catch (Exception ex) { TheApp.app.MessageShow(ex); } }); // 通常探索なのか、詰将棋探索なのか。 usiEnginePlayer.IsMateSearch = nextGameMode == GameModeEnum.ConsiderationWithMateEngine; // 実行ファイルを起動する usiEnginePlayer.Start(engineDefine.EngineExeFileName()); }
/// <summary> /// 初期化する。 /// </summary> public void Init() { EngineDefines = new EngineDefineEx[2]; /* { null, null } */ EngineConfigs = new EngineConfig[2]; /* { null, null } */ Ponders = new bool[2]; /* { false , false } */ HashSize = new long[2]; /* { 0, 0 } */ Threads = new int[2]; /* { 0, 0 } */ }
/// <summary> /// エンジンを開始する。UsiEnginePlayer.Start()を呼び出す。 /// InitUsiEnginePlayer()をしたのちに、エンジンに接続したいタイミングで呼び出すべし。 /// </summary> /// <param name="usiEnginePlayer"></param> /// <param name="engineDefineEx"></param> private void StartEngine(UsiEnginePlayer usiEnginePlayer, EngineDefineEx engineDefineEx) { // 実行ファイルを起動する usiEnginePlayer.Start(engineDefineEx.EngineDefine.EngineExeFileName()); }