/// <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); }
/// <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); }
/// <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 = 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, 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> /// 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); }
public static void Check_MouseoverKomaKiki(object obj_shogiGui, Finger finger) { NarabeRoomViewModel shogiGui = (NarabeRoomViewModel)obj_shogiGui; Starlight light = shogiGui.GameViewModel.GuiSkyConst.StarlightIndexOf(finger); shogiGui.Shape_PnlTaikyoku.Shogiban.KikiBan = new SySet_Default <SyElement>("利き盤");// .Clear(); // 駒の利き SySet <SyElement> kikiZukei = Util_Sky.KomaKidou_Potential(finger, shogiGui.GameViewModel.GuiSkyConst); //kikiZukei.DebugWrite("駒の利きLv1"); // 味方の駒 Node <ShootingStarlightable, KyokumenWrapper> siteiNode = KifuNarabe_KifuWrapper.CurNode(shogiGui.GameViewModel.Kifu); SySet <SyElement> mikataZukei = Util_Sky.Masus_Now(siteiNode.Value.ToKyokumenConst, Util_InServer.CurPside(shogiGui)); //mikataZukei.DebugWrite("味方の駒"); // 駒の利き上に駒がないか。 SySet <SyElement> ban2 = kikiZukei.Minus_Closed(mikataZukei); //kikiZukei.DebugWrite("駒の利きLv2"); shogiGui.Shape_PnlTaikyoku.Shogiban.KikiBan = ban2; }