/// <summary> /// 指定した駒全てについて、基本的な駒の動きを返します。(金は「前、ななめ前、横、下に進める」のような) /// </summary> /// <param name="srcSky"></param> /// <param name="fingers"></param> /// <returns></returns> public static Maps_OneAndOne <Finger, SySet <SyElement> > GetPotentialMoves( SkyConst srcSky, Fingers fingers ) { if (fingers is null) { throw new ArgumentNullException(nameof(fingers)); } Maps_OneAndOne <Finger, SySet <SyElement> > kiki_fMs = new Maps_OneAndOne <Finger, SySet <SyElement> >();// 「どの駒を、どこに進める」の一覧 foreach (Finger finger in fingers.Items) { // ポテンシャル・ムーブを調べます。 SySet <SyElement> move = Util_Sky_SyugoQuery.KomaKidou_Potential(finger, srcSky);//←ポテンシャル・ムーブ取得関数を選択。歩とか。 if (!move.IsEmptySet()) { // 移動可能升があるなら Util_Sky258A.AddOverwrite(kiki_fMs, finger, move); } } return(kiki_fMs); }
/// <summary> /// 攻め手の持駒利き /// </summary> /// <param name="fingers_seme_MOTI"></param> /// <param name="masus_kurau_IKUSA"></param> /// <param name="src_Sky"></param> /// <param name="hint"></param> /// <returns></returns> public static List_OneAndMulti <Finger, SySet <SyElement> > Get_Move_Moti( Fingers fingers_seme_MOTI, SySet <SyElement> masus_seme_IKUSA, SySet <SyElement> masus_kurau_IKUSA, SkyConst src_Sky, string hint_orNull ) { // 「どの持ち駒を」「どこに置けるか」のコレクション。 List_OneAndMulti <Finger, SySet <SyElement> > om; // 持ち駒を置けない升 SySet <SyElement> okenaiMasus = new SySet_Default <SyElement>("持ち駒を置けない升"); { // 自分の駒がある升 okenaiMasus.AddSupersets(masus_seme_IKUSA); // 相手番の駒がある升 okenaiMasus.AddSupersets(masus_kurau_IKUSA); } om = Play.Get_PotentialMove_Motikoma(src_Sky, fingers_seme_MOTI, okenaiMasus); return(om); }
/// <summary> /// a - b = c /// </summary> /// <param name="a"></param> /// <param name="b"></param> /// <param name="sbGohosyu"></param> public static Maps_OneAndOne <Finger, SySet <SyElement> > MinusMasus( SkyConst src_Sky_forLog, Maps_OneAndOne <Finger, SySet <SyElement> > a1, SySet <SyElement> b ) { //GraphicalLogUtil.Log(enableLog, "Thought_KomaAndMove#MinusMasus", // "["+ // GraphicalLogUtil.JsonKyokumens_MultiKomabetuMasus(enableLog, siteiSky_forLog, a1, "a1") + // "]" // ); Maps_OneAndOne <Finger, SySet <SyElement> > c = new Maps_OneAndOne <Finger, SySet <SyElement> >(a1); List <Finger> list_koma = c.ToKeyList();//調べたい側の全駒 foreach (Finger selfKoma in list_koma) { SySet <SyElement> srcMasus = c.ElementAt(selfKoma); SySet <SyElement> minusedMasus = srcMasus.Minus_Closed(b, Util_SyElement_BinaryOperator.Dlgt_Equals_MasuNumber); // 差替え c.AddReplace(selfKoma, minusedMasus, false);//差分に差替えます。もともと無い駒なら何もしません。 } return(c); }
public void AddSupersets(SySet <T1> superset) { foreach (T1 element in superset.Elements) { this.AddElement(element); } }
/// <summary> /// this -=overThere b /// /// この集合から、指定の要素を全て削除した結果を返します。 /// /// この集合自身は変更しません。 /// /// 順序はないが、Minus無印と同じではない☆ /// 最初の1個(原点)は削除してはいけない☆ /// </summary> /// <param name="targetMasus"></param> /// <returns></returns> public void MinusMe_Opened(SySet <T1> b, DLGT_SyElement_BynaryOperate dlgt_equals) { // このセットの中にある、スーパーセット1つ1つにも、Minus_OverThere をします。 foreach (SySet <T1> superset2 in this.Supersets) { superset2.MinusMe_Opened(b, dlgt_equals); } if (b is SySet_Ordered <T1> ) { // 方向をもつ集合で 引こうとした場合だけ有効です。 // 要素の削除 { int index = 0; foreach (T1 element in b.Elements) { if (index == 0) { // 最初の要素は、削除しません。 goto gt_Next; } this.Minus_Closed(element, dlgt_equals); gt_Next: index++; } } } // 方向を持っていない集合では、Minus_OverThere は無効とします。 }
/// <summary> /// 指定した持ち駒全てについて、基本的な駒の動きを返します。(金は「前、ななめ前、横、下に進める」のような) /// /// TODO: 打ち歩詰めチェック /// /// </summary> /// <param name="src_Sky"></param> /// <param name="fingers"></param> /// <returns></returns> public static List_OneAndMulti <Finger, SySet <SyElement> > Get_PotentialMove_Motikoma( SkyConst src_Sky, Fingers fingers, SySet <SyElement> okenaiMasus ) { // 「どの持ち駒を」「どこに置いたとき」「どこに利きがある」のコレクション。 List_OneAndMulti <Finger, SySet <SyElement> > resultOmm = new List_OneAndMulti <Finger, SySet <SyElement> >(); foreach (Finger donoKoma in fingers.Items) { // ポテンシャル・ムーブを調べます。 RO_Star_Koma koma = Util_Koma.AsKoma(src_Sky.StarlightIndexOf(donoKoma).Now); PieceType syurui = Haiyaku184Array.Syurui(koma.Haiyaku); // 置ける升 SySet <SyElement> okeruMasus = Util_Sky.KomaKidou_Potential(donoKoma, src_Sky); // 置けない升を引きます。 okeruMasus = okeruMasus.Minus_Closed(okenaiMasus); if (syurui == PieceType.P) { // 二歩チェック int suji; Util_MasuNum.MasuToSuji(koma.Masu, out suji); Fingers sujiKomas = Util_Sky.Fingers_InSuji(src_Sky, suji); Starlight fu = src_Sky.StarlightIndexOf(donoKoma); Fingers existFu = Util_Sky.Matches(fu, src_Sky, sujiKomas); if (0 < existFu.Count) { // 二歩だ☆! goto gt_Next; } // TODO:打ち歩詰めチェック } if (!okeruMasus.IsEmptySet()) { // 空でないなら resultOmm.AddNew(donoKoma, okeruMasus); } gt_Next: ; } return(resultOmm); }
public static void SplitGroup_Ikusa( out SySet <SyElement> masus_seme_IKUSA, out SySet <SyElement> masus_kurau_IKUSA, SkyConst src_Sky, Fingers fingers_kurau_IKUSA, //戦駒(喰らう側) Fingers fingers_seme_IKUSA //戦駒(利きを調べる側) ) { masus_seme_IKUSA = Converter04.Fingers_ToMasus(fingers_seme_IKUSA, src_Sky); // 盤上のマス(利きを調べる側の駒) masus_kurau_IKUSA = Converter04.Fingers_ToMasus(fingers_kurau_IKUSA, src_Sky); // 盤上のマス(喰らう側の駒) }
/// <summary> /// 盤上の駒を、攻め側と、食らう側に グループ分けします。 /// </summary> /// <param name="out_masus_seme"></param> /// <param name="out_masus_kurau"></param> /// <param name="src_Sky"></param> /// <param name="fs_kurau">fingers</param> /// <param name="fs_seme"></param> public static void SplitGroup_Banjo( out SySet <SyElement> out_masus_seme, out SySet <SyElement> out_masus_kurau, SkyConst src_Sky, Fingers fs_kurau, //盤上の駒(喰らう側) Fingers fs_seme //盤上の駒(利きを調べる側) ) { out_masus_seme = Conv_Fingers.ToMasus(fs_seme, src_Sky); // 盤上のマス(利きを調べる側の駒) out_masus_kurau = Conv_Fingers.ToMasus(fs_kurau, src_Sky); // 盤上のマス(喰らう側の駒) }
public static string Dump_Elements(SySet <SyElement> sySet) { StringBuilder sb = new StringBuilder(); foreach (SyElement syElement in sySet.Elements) { sb.Append(Conv_Sy.Query_Word(syElement.Bitfield)); sb.Append(","); } return(sb.ToString()); }
/// <summary> /// 単語登録 /// </summary> /// <param name="newWord"></param> /// <param name="mean"></param> public void AddWord(string newWord, SySet <T1> mean) { if (this.dictionary.ContainsKey(newWord.Trim())) { // キーが既存なら this.dictionary[newWord.Trim()] = mean; } else { this.dictionary.Add(newWord.Trim(), mean); } }
/// <summary> /// this - b = c /// /// この集合から、指定の要素を全て削除した結果を返します。 /// /// この集合自身は変更しません。 /// </summary> /// <param name="b"></param> /// <returns></returns> public SySet <T1> Minus_Closed(SySet <T1> b, DLGT_SyElement_BynaryOperate dlgt_equals) { // クローンを作成します。 SySet <T1> c = this.Clone(); // 要素の削除 foreach (T1 bElement in b.Elements) { c.Minus_Closed(bElement, dlgt_equals); } return(c); }
/// <summary> /// this - b = c /// /// この集合から、指定の要素を全て削除した結果を返します。 /// /// この集合自身は変更しません。 /// </summary> /// <param name="b"></param> /// <returns></returns> public SySet <T1> Minus_Closed(SySet <T1> b) { // クローンを作成します。 SySet <T1> c = this.Clone(); // 要素の削除 foreach (T1 bElement in b.Elements) { c.Minus_Closed(bElement); } return(c); }
/// <summary> /// this -= b /// </summary> /// <param name="b"></param> /// <returns></returns> public void MinusMe_Opened(SySet <T1> b, DLGT_SyElement_BynaryOperate dlgt_equals) { // このセットの中にある、スーパーセット1つ1つにも、Minus_OverThere をします。 foreach (SySet <T1> superset2 in this.Supersets) { superset2.MinusMe_Opened(b, dlgt_equals); } foreach (T1 bElement in b.Elements) { // bを含まない、それより後ろの要素を丸ごと削除します。 this.Minus_Opened(bElement, dlgt_equals); } }
/// <summary> /// this -= b /// </summary> /// <param name="b"></param> /// <returns></returns> public void MinusMe_Opened(SySet <T1> b) { // このセットの中にある、スーパーセット1つ1つにも、Minus_OverThere をします。 foreach (SySet <T1> superset2 in this.Supersets) { superset2.MinusMe_Opened(b); } foreach (T1 bElement in b.Elements) { // bを含まない、それより後ろの要素を丸ごと削除します。 this.Minus_Opened(bElement); } }
/// <summary> /// this - b = c /// /// この集合のメンバーから、指定の集合のメンバーを削除します。 /// </summary> /// <param name="b"></param> /// <returns></returns> public SySet <T1> Minus_Closed(SySet <T1> b, DLGT_SyElement_BynaryOperate dlgt_equals) { // クローンを作成します。 SySet <T1> c = this.Clone(); // 指定の要素が含まれているかどうか1つ1つ調べます。 foreach (T1 bElement in b.Elements) { // 要素を1つ1つ削除していきます。 c.Minus_Closed(bElement, dlgt_equals); } return(c); }
/// <summary> /// 無ければ追加、あれば上書き。 /// </summary> /// <param name="hKoma"></param> /// <param name="masus"></param> public static void AddOverwrite( Maps_OneAndOne <Finger, SySet <SyElement> > komabetuMasus, Finger finger, SySet <SyElement> masus) { if (komabetuMasus.Items.ContainsKey(finger)) { komabetuMasus.Items[finger].AddSupersets(masus);//追加します。 } else { // 無かったので、新しく追加します。 komabetuMasus.Items.Add(finger, masus); } }
/// <summary> /// this - b = c /// /// この集合のメンバーから、指定の集合のメンバーを削除します。 /// </summary> /// <param name="b"></param> /// <returns></returns> public SySet <T1> Minus_Closed(SySet <T1> b) { // クローンを作成します。 SySet <T1> c = this.Clone(); // 指定の要素が含まれているかどうか1つ1つ調べます。 foreach (T1 bElement in b.Elements) { // 要素を1つ1つ削除していきます。 c.Minus_Closed(bElement); } return(c); }
/// <summary> /// ************************************************************************************************************************ /// この集合は、指定した要素を全てもっているか。 /// ************************************************************************************************************************ /// </summary> /// <param name="handle"></param> /// <returns></returns> public bool ContainsAll(SySet <T1> superset2) { bool matched = true; foreach (T1 element in superset2.Elements) { if (!this.elements_.Contains(element)) { matched = false; break; } } return(matched); }
/// <summary> /// ************************************************************************************************************************ /// 軌道上の駒たち /// ************************************************************************************************************************ /// </summary> /// <param name="km"></param> /// <returns></returns> public static void Fingers_EachSrcNow(out Fingers out_fingers, SySet <SyElement> srcList, SkyConst src_Sky, Playerside pside, IMoveHalf itaru) { out_fingers = new Fingers(); foreach (SyElement masu in srcList.Elements) { Finger finger = Util_Sky_FingerQuery.InShogibanMasuNow(src_Sky, pside, masu); if (Util_Finger.ForHonshogi(finger)) { // 指定の升に駒がありました。 //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> out_fingers.Add(finger); } } }
/// <summary> /// 盤上の駒の利き(利きを調べる側) /// </summary> /// <param name="fs_sirabetaiKoma">fingers</param> /// <param name="masus_mikata_Banjo"></param> /// <param name="masus_aite_Banjo"></param> /// <param name="src_Sky"></param> /// <returns></returns> public static Maps_OneAndOne <Finger, SySet <SyElement> > To_KomabetuKiki_OnBanjo( Fingers fs_sirabetaiKoma, SySet <SyElement> masus_mikata_Banjo, SySet <SyElement> masus_aite_Banjo, SkyConst src_Sky ) { // 利きを調べる側の利き(戦駒) Maps_OneAndOne <Finger, SySet <SyElement> > komabetuKiki = QuerySkyFingers.GetPotentialMoves(src_Sky, fs_sirabetaiKoma); // 盤上の現手番の駒利きから、 現手番の駒がある枡を除外します。 komabetuKiki = Play_KomaAndMove.MinusMasus(src_Sky, komabetuKiki, masus_mikata_Banjo); // そこから、相手番の駒がある枡「以降」を更に除外します。 komabetuKiki = Play_KomaAndMove.Minus_OverThereMasus(src_Sky, komabetuKiki, masus_aite_Banjo); return(komabetuKiki); }
/// <summary> /// a - b = c /// </summary> /// <param name="a"></param> /// <param name="b"></param> /// <param name="sbGohosyu"></param> public static Maps_OneAndOne <Finger, SySet <SyElement> > Minus_OverThereMasus( SkyConst src_srcSky_forLog, Maps_OneAndOne <Finger, SySet <SyElement> > a, SySet <SyElement> b ) { Maps_OneAndOne <Finger, SySet <SyElement> > c = new Maps_OneAndOne <Finger, SySet <SyElement> >(a); bool enableLog = false; //if (null != errH_orNull) //{ // enableLog = errH_orNull.Logger.Enable; //} foreach (Finger selfKoma in c.ToKeyList())//調べたい側の全駒 { SySet <SyElement> srcMasus = c.ElementAt(selfKoma); // a -overThere b するぜ☆ Util_GraphicalLog.WriteHtml5(enableLog, "Thought_KomaAndMove Minus_OverThereMasus1", $@"[ [ {Util_FormatJson_LogGraphicEx.JsonElements_Masus(enableLog, srcMasus, "(1)引く前")} ], ], " ); SySet <SyElement> minusedMasus = srcMasus.Clone(); minusedMasus.MinusMe_Opened(b, Util_SyElement_BinaryOperator.Dlgt_Equals_MasuNumber); // 差替え c.AddReplace(selfKoma, minusedMasus, false);//差分に差替えます。もともと無い駒なら何もしません。 } Util_GraphicalLog.WriteHtml5(enableLog, "Thought_KomaAndMove Minus_OverThereMasus2", $@"[ [ {Util_FormatJson_LogGraphicEx.JsonKyokumens_MultiKomabetuMasus(enableLog, src_srcSky_forLog, a, "(1)a")}{Util_FormatJson_LogGraphicEx.JsonElements_Masus(enableLog, b, "(2)-overThere_b")}{Util_FormatJson_LogGraphicEx.JsonKyokumens_MultiKomabetuMasus(enableLog, src_srcSky_forLog, c, "(3)=c")} ], ], " ); return(c); }
/// <summary> /// v(^▽^)v超能力『メナス』だぜ☆ 未来の脅威を予測し、可視化するぜ☆www /// </summary> public static void Menace(MainGui_Csharp mainGui) { if (0 < mainGui.Model_Manual.GuiTemezumi) { // 処理の順序が悪く、初回はうまく判定できない。 SkyConst src_Sky = mainGui.Model_Manual.GuiSkyConst; //---------- // 将棋盤上の駒 //---------- mainGui.RepaintRequest.SetFlag_RefreshRequest(); // [クリアー] mainGui.Shape_PnlTaikyoku.Shogiban.ClearHMasu_KikiKomaList(); // 全駒 foreach (Finger figKoma in Finger_Honshogi.Items_KomaOnly) { RO_Star koma = Util_Starlightable.AsKoma(src_Sky.StarlightIndexOf(figKoma).Now); if ( Okiba.ShogiBan == Conv_SyElement.ToOkiba(koma.Masu) && mainGui.Model_Manual.GuiPside != koma.Pside ) { // 駒の利き SySet <SyElement> kikiZukei = Util_Sky_SyugoQuery.KomaKidou_Potential(figKoma, src_Sky); IEnumerable <SyElement> kikiMasuList = kikiZukei.Elements; foreach (SyElement masu in kikiMasuList) { // その枡に利いている駒のハンドルを追加 if (!Masu_Honshogi.IsErrorBasho(masu)) { mainGui.Shape_PnlTaikyoku.Shogiban.HMasu_KikiKomaList[Conv_SyElement.ToMasuNumber(masu)].Add((int)figKoma); } } } } } }
/// <summary> /// v(^▽^)v超能力『メナス』だぜ☆ 未来の脅威を予測し、可視化するぜ☆www /// </summary> public static void Menace(NarabeRoomViewModel shogiGui) { if (0 < shogiGui.GameViewModel.GuiTesumi) { // 処理の順序が悪く、初回はうまく判定できない。 SkyConst src_Sky = shogiGui.GameViewModel.GuiSkyConst; //---------- // 将棋盤上の駒 //---------- shogiGui.ResponseData.ToRedraw(); // [クリアー] shogiGui.Shape_PnlTaikyoku.Shogiban.ClearHMasu_KikiKomaList(); // 全駒 foreach (Finger figKoma in Finger_Honshogi.Items_KomaOnly) { RO_Star_Koma koma = Util_Koma.AsKoma(src_Sky.StarlightIndexOf(figKoma).Now); if ( Okiba.ShogiBan == Util_Masu.Masu_ToOkiba(koma.Masu) && shogiGui.GameViewModel.GuiPside != koma.Pside ) { // 駒の利き SySet <SyElement> kikiZukei = Util_Sky.KomaKidou_Potential(figKoma, src_Sky); IEnumerable <SyElement> kikiMasuList = kikiZukei.Elements; foreach (SyElement masu in kikiMasuList) { // その枡に利いている駒のハンドルを追加 if (Masu_Honshogi.Error != masu) { shogiGui.Shape_PnlTaikyoku.Shogiban.HMasu_KikiKomaList[Util_Masu.AsMasuNumber(masu)].Add((int)figKoma); } } } } } }
/// <summary> /// 変換『「駒→手」のコレクション』→『「駒、指し手」のペアのリスト』 /// </summary> public static List <Couple <Finger, SyElement> > KomabetuMasus_ToKamList( Maps_OneAndOne <Finger, SySet <SyElement> > km ) { List <Couple <Finger, SyElement> > kmList = new List <Couple <Finger, SyElement> >(); foreach (Finger koma in km.ToKeyList()) { SySet <SyElement> masus = km.ElementAt(koma); foreach (SyElement masu in masus.Elements) { // セットとして作っているので、重複エレメントは無いはず……☆ kmList.Add(new Couple <Finger, SyElement>(koma, masu)); } } return(kmList); }
/// <summary> /// 戦駒の利き(利きを調べる側) /// </summary> /// <param name="enableLog"></param> /// <param name="fingers_seme_IKUSA"></param> /// <param name="masus_seme_IKUSA"></param> /// <param name="masus_kurau_IKUSA"></param> /// <param name="src_Sky"></param> /// <param name="hint"></param> /// <returns></returns> public static Maps_OneAndOne <Finger, SySet <SyElement> > Get_KmEffect_seme_IKUSA( Fingers fingers_seme_IKUSA, SySet <SyElement> masus_seme_IKUSA, SySet <SyElement> masus_kurau_IKUSA, SkyConst src_Sky, bool enableLog, string hint_orNull ) { // 利きを調べる側の利き(戦駒) Maps_OneAndOne <Finger, SySet <SyElement> > km = Play.Get_PotentialMoves_Ikusa(src_Sky, fingers_seme_IKUSA); // 盤上の現手番の駒利きから、 現手番の駒がある枡を除外します。 km = Play_KomaAndMove.MinusMasus(false, src_Sky, km, masus_seme_IKUSA); // そこから、相手番の駒がある枡「以降」を更に除外します。 km = Play_KomaAndMove.Minus_OverThereMasus(enableLog, src_Sky, km, masus_kurau_IKUSA); return(km); }
/// <summary> /// 指定した駒全てについて、基本的な駒の動きを返します。(金は「前、ななめ前、横、下に進める」のような) /// </summary> /// <param name="src_Sky"></param> /// <param name="fingers"></param> /// <returns></returns> public static Maps_OneAndOne <Finger, SySet <SyElement> > Get_PotentialMoves_Ikusa( SkyConst src_Sky, Fingers fingers ) { Maps_OneAndOne <Finger, SySet <SyElement> > kiki_fMs = new Maps_OneAndOne <Finger, SySet <SyElement> >();// 「どの駒を、どこに進める」の一覧 foreach (Finger finger in fingers.Items) { // ポテンシャル・ムーブを調べます。 SySet <SyElement> move = Util_Sky.KomaKidou_Potential(finger, src_Sky);//←ポテンシャル・ムーブ取得関数を選択。歩とか。 if (!move.IsEmptySet()) { // 移動可能升があるなら Util_KomabetuMasus.AddOverwrite(kiki_fMs, finger, move); } } return(kiki_fMs); }
/// <summary> /// a - b = c /// </summary> /// <param name="a"></param> /// <param name="b"></param> /// <param name="sbGohosyu"></param> public static Maps_OneAndOne <Finger, SySet <SyElement> > Minus_OverThereMasus( bool enableLog, SkyConst src_srcSky_forLog, Maps_OneAndOne <Finger, SySet <SyElement> > a, SySet <SyElement> b ) { Maps_OneAndOne <Finger, SySet <SyElement> > c = new Maps_OneAndOne <Finger, SySet <SyElement> >(a); foreach (Finger selfKoma in c.ToKeyList())//調べたい側の全駒 { SySet <SyElement> srcMasus = c.ElementAt(selfKoma); // a -overThere b するぜ☆ Util_GraphicalLog.Log(enableLog, "Thought_KomaAndMove Minus_OverThereMasus", "[\n" + " [\n" + Util_GraphicalLog.JsonElements_Masus(enableLog, srcMasus, "(1)引く前") + " ],\n" + "],\n" ); SySet <SyElement> minusedMasus = srcMasus.Clone(); minusedMasus.MinusMe_Opened(b); // 差替え c.AddReplace(selfKoma, minusedMasus, false);//差分に差替えます。もともと無い駒なら何もしません。 } Util_GraphicalLog.Log(enableLog, "Thought_KomaAndMove Minus_OverThereMasus", "[\n" + " [\n" + Util_GraphicalLog.JsonKyokumens_MultiKomabetuMasus(enableLog, src_srcSky_forLog, a, "(1)a") + Util_GraphicalLog.JsonElements_Masus(enableLog, b, "(2)-overThere_b") + Util_GraphicalLog.JsonKyokumens_MultiKomabetuMasus(enableLog, src_srcSky_forLog, c, "(3)=c") + " ],\n" + "],\n" ); return(c); }
/// <summary> /// 将棋盤上での検索 /// </summary> /// <param name="srcAll">候補マス</param> /// <param name="komas"></param> /// <returns></returns> public static bool Query_Koma( Playerside pside, PieceType syurui, SySet <SyElement> srcAll, SkyConst src_Sky,//KifuTree kifu, out Finger foundKoma ) { //SkyConst src_Sky = kifu.CurNode.Value.ToKyokumenConst; bool hit = false; foundKoma = Fingers.Error_1; foreach (New_Basho masu1 in srcAll.Elements)//筋・段。(先後、種類は入っていません) { foreach (Finger koma1 in Finger_Honshogi.Items_KomaOnly) { RO_Star koma2 = Util_Starlightable.AsKoma(src_Sky.StarlightIndexOf(koma1).Now); if (pside == koma2.Pside && Okiba.ShogiBan == Conv_SyElement.ToOkiba(koma2.Masu) && Util_Komasyurui14.Matches(syurui, Util_Komahaiyaku184.Syurui(koma2.Haiyaku)) && masu1 == koma2.Masu ) { // 候補マスにいた //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> hit = true; foundKoma = koma1; break; } } } return(hit); }
public static string JsonElements_Masus(bool enableLog, SySet <SyElement> masus, string comment) { StringBuilder sb = new StringBuilder(); if (!enableLog) { goto gt_EndMethod; } sb.AppendLine(" { act:\"colorMasu\", style:\"rgba(100,240,100,0.5)\" },\n"); foreach (New_Basho masu in masus.Elements) { sb.AppendLine($" {{ act:\"drawMasu\" , masu:{((int)masu.MasuNumber)} }},\n"); } sb.AppendLine($" {{ act:\"drawText\", text:\"{comment}\" , x:0, y:20 }},\n"); gt_EndMethod: return(sb.ToString()); }
/// <summary> /// 含まれるか判定。 /// </summary> /// <param name="masus"></param> /// <returns></returns> public static bool ExistsIn(IMoveHalf sl, SySet <SyElement> masus, SkyConst srcSky) { bool matched = false; foreach (SyElement masu in masus.Elements) { RO_Star koma = Util_Starlightable.AsKoma(sl.Now); Finger finger = Util_Sky_FingerQuery.InShogibanMasuNow(srcSky, koma.Pside, masu); if ( finger != Fingers.Error_1 && //2014-07-21 先後も見るように追記。 koma.Masu == masu ) { matched = true; break; } } return(matched); }