Пример #1
0
        // 成れない駒(X Koma) 捨て王手指し
        public static void GenerateNx_SuteOteZasi()
        {
            // 王手に限る☆
            GenerateMove03.SiborikomiOte();
            // 紐を付けない☆
            GenerateMove03.KesuHimoduke();

            while (PureMemory.ssss_bbVar_idosaki_narazu.Ref_PopNTZ(out PureMemory.ssss_ugoki_ms_dst)) // 立っているビットを降ろすぜ☆
            {
                if (GenerateMove03.TadasuteNoUgoki())                                                 // タダ捨ての動きに限る☆
                {
                    PureMemory.SetSsssGenk(
                        Tume1Hantei.CheckBegin_Tume1_BanjoKoma(),// 一手詰めルーチン☆
                        false,
                        NigemitiWatasuKansyu.IsNigemitiWoAkeru()
                        );

                    MoveGenAccessor.AddMoveNarazuGoodXorBad();

                    if (Tume1Hantei.CheckEnd_Tume1())
                    {
                        break;
                    }                                           //終了☆
                }
            }
        }
Пример #2
0
        // 成れる駒(Nareru Koma) 捨て緩慢指し(タダ捨て指し)
        public static void GenerateNk_SuteKanmanZasi()
        {
            // 王手も除外するぜ☆(^▽^)
            GenerateMove03.KesuOte();

            // 成れる場合
            while (PureMemory.ssss_bbVar_idosaki_nari.Ref_PopNTZ(out PureMemory.ssss_ugoki_ms_dst)) // 立っているビットを降ろすぜ☆
            {
                if (GenerateMove03.TadasuteNoUgoki())                                               // 相手の利きがあって、自分を除いた味方の利きがない升 に限るぜ☆(^▽^)www
                {
                    PureMemory.SetSsssGenk(
                        false, // タダ捨てに、一手詰めは無いだろう☆(*^~^*)
                        GenerateMove03.IsMisuteruUgoki(),
                        false  //逃げ道を開けて逃がすかどうかは判定しないぜ☆(^~^)
                        );

                    MoveGenAccessor.AddMoveNariGood();
                }
            }

            while (PureMemory.ssss_bbVar_idosaki_narazu.Ref_PopNTZ(out PureMemory.ssss_ugoki_ms_dst)) // 立っているビットを降ろすぜ☆
            {
                if (GenerateMove03.TadasuteNoUgoki())                                                 // 相手の利きがあって、自分を除いた味方の利きがない升 に限るぜ☆(^▽^)www
                {
                    PureMemory.SetSsssGenk(
                        false, // タダ捨てに、一手詰めは無いだろう☆(*^~^*)
                        GenerateMove03.IsMisuteruUgoki(),
                        false  //逃げ道を開けて逃がすかどうかは判定しないぜ☆(^~^)
                        );

                    MoveGenAccessor.AddMoveNarazuGoodXorBad();
                }
            }
        }
Пример #3
0
        // ぼっち緩慢指 | 紐付緩慢指
        public static void Generate02NiwatoriNado_BottiKanmanZasi_HimodukiKanmanZasi()
        {
            // 王手も除外するぜ☆(^▽^)
            GenerateMove03.KesuOte();

            while (PureMemory.ssss_bbVar_idosaki_narazu.Ref_PopNTZ(out PureMemory.ssss_ugoki_ms_dst)) // 立っているビットを降ろすぜ☆
            {
                if (!GenerateMove03.TadasuteNoUgoki())                                                // タダ捨てではない動きに限るぜ☆(^▽^)
                {
                    // 一手詰めルーチン☆
                    PureMemory.SetSsssGenk(
                        Tume1Hantei.CheckBegin_Tume1_BanjoKoma(),
                        GenerateMove03.IsMisuteruUgoki(),
                        false//逃げ道を開けて逃がすかどうかは判定しないぜ☆(^~^)
                        );

                    MoveGenAccessor.AddMoveNarazuGoodXorBad();

                    if (Tume1Hantei.CheckEnd_Tume1())
                    {
                        break;
                    }                                           //終了☆
                }
            }
        }
Пример #4
0
        // らいおん 駒を取る手
        public static void GenerateRaion_KomaWoToruTe()
        {
            // トライ は除外するぜ☆(^▽^)
            GenerateMove03.KesuTry();

            // らいおん が自分から 相手の利きに飛び込むのを防ぐぜ☆(^▽^)www
            GenerateMove03.KesuRaionJisatusyu();

            while (PureMemory.ssss_bbVar_idosaki_narazu.Ref_PopNTZ(out PureMemory.ssss_ugoki_ms_dst))
            {
                // 駒を取るような全ての手は、選択肢に入れるぜ☆(^~^)

                PureMemory.SetSsssGenk(
                    Tume1Hantei.CheckBegin_Tume1_BanjoKoma(),// 一手詰めルーチン☆
                    false,
                    NigemitiWatasuKansyu.IsNigemitiWoAkeru()
                    );

                MoveGenAccessor.AddMoveNarazuGoodXorBad();

                if (Tume1Hantei.CheckEnd_Tume1())
                {
                    break;
                }                                           //終了☆
            }
        }
Пример #5
0
        // らいおん 逼迫返討手
        public static void GenerateRaion_HippakuKaeriutiTe()
        {
            if (PureMemory.hot_isNigerarenaiCheckerAr[PureMemory.kifu_nTeban])
            {
                // 逃げられない状況で、王手が掛かけられていれば☆(^~^)

                // らいおん が自分から利きに飛び込むのを防ぐぜ☆(^▽^)www
                GenerateMove03.KesuRaionJisatusyu();

                while (PureMemory.ssss_bbVar_idosaki_narazu.Ref_PopNTZ(out PureMemory.ssss_ugoki_ms_dst))
                {
                    PureMemory.SetSsssGenk(
                        Tume1Hantei.CheckBegin_Tume1_BanjoKoma(),// 一手詰めルーチン☆
                        false,
                        false
                        );

                    // チェッカーを取るような全ての手は、選択肢に入れるぜ☆(^~^)
                    MoveGenAccessor.AddMoveNarazuGood();

                    if (Tume1Hantei.CheckEnd_Tume1())
                    {
                        break;
                    }                                           //終了☆
                }
            }
        }
Пример #6
0
        /// <summary>
        /// グローバル変数 Util_MoveSeisei.Movelist[fukasa] に、指し手が追加されていくぜ☆(^▽^)
        /// 捨て緩慢打(タダ捨て打)
        /// </summary>
        /// <param name="mks"></param>
        /// <param name="mk"></param>
        /// <param name="ks"></param>
        public static void GenerateMotigoma_SuteDa()
        {
            while (PureMemory.ssss_bbVar_idosaki_narazu.Ref_PopNTZ(out PureMemory.ssss_ugoki_ms_dst)) // 立っているビットを降ろすぜ☆
            {
                if (GenerateMove03.TadasuteNoUgoki())                                                 // タダ捨ての動きに限る☆
                {
                    PureMemory.SetSsssGenk(
                        false, // タダ捨てに、一手詰めは無いだろう☆(*^~^*)
                        false, // 持ち駒を打つのに、見捨てる動きも無いだろう☆(^~^)
                        false  // 持ち駒を打つのに、逃げ道を開けて逃がす動きも無いだろう☆(^~^)
                        );

                    MoveGenAccessor.AddMoveUttaGood();
                }
            }
        }
Пример #7
0
        // らいおん トライ
        public static void GenerateRaion_Try()
        {
            // らいおん が自分から 相手の利きに飛び込むのを防ぐぜ☆(^▽^)www
            GenerateMove03.KesuRaionJisatusyu();

            Pure.Sc.Push("トライ", PureMemory.tnsk_hyoji);
            Bitboard trysakiBB = Util_TryRule.GetTrySaki(PureMemory.ssss_bbVar_idosaki_narazu, PureMemory.ssss_ugoki_ms_src);

            Pure.Sc.Pop();

            if (trysakiBB.GetNTZ(out PureMemory.ssss_ugoki_ms_dst))// トライはどこか1つ行けばいい
            {
                MoveGenAccessor.AddMoveNarazuGood();
                PureMemory.SetTansakuUtikiri(TansakuUtikiri.Try);
            }
        }
Пример #8
0
        // 仲間を見捨てる動きは Badへ☆(^~^)
        // らいおん ぼっち緩慢指 | 紐付き緩慢指 (らいおんは 捨て緩慢指し をやらないぜ☆)
        public static void GenerateRaion_BottiKanmanZasi_HimodukiKanmanZasi()
        {
            // トライ は除外するぜ☆(^▽^)
            GenerateMove03.KesuTry();
            // らいおん が自分から 相手の利きに飛び込むのを防ぐぜ☆(^▽^)www
            GenerateMove03.KesuRaionJisatusyu();

            while (PureMemory.ssss_bbVar_idosaki_narazu.Ref_PopNTZ(out PureMemory.ssss_ugoki_ms_dst))// 立っているビットを降ろすぜ☆
            {
                PureMemory.SetSsssGenk(
                    Tume1Hantei.CheckBegin_Tume1_BanjoKoma(), // 一手詰めルーチン☆
                    GenerateMove03.IsMisuteruUgoki(),
                    false                                     //逃げ道を開けて逃がすかどうかは判定しないぜ☆(^~^)
                    );

                MoveGenAccessor.AddMoveNarazuGoodXorBad();

                if (Tume1Hantei.CheckEnd_Tume1())
                {
                    break;
                }                                           //終了☆
            }
        }