Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
        /// <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);
        }
Exemplo n.º 4
0
        /// <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);
        }
Exemplo n.º 5
0
        /// <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);
        }
Exemplo n.º 6
0
        /// <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);
        }
Exemplo n.º 7
0
        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;
        }