Esempio n. 1
0
        public static void Setumei_Discovered(Masu ms_removed, Kyokumen.Sindanyo kys, StringBuilder syuturyoku)
        {
            kys.TryInControl(ms_removed, out Koma[] kmHairetu_control);

            Bitboard bb_relative = new Bitboard();//関連のある飛び利き駒

            // 飛び利きを計算し直す
            foreach (Koma km in kmHairetu_control)
            {
                if (Koma.PieceNum == km)
                {
                    break;
                }

                // 駒の居場所
                Bitboard bb_ibasho = new Bitboard();
                kys.ToSetIbasho(km, bb_ibasho);
                while (bb_ibasho.Ref_PopNTZ(out Masu ms_ibasho))
                {
                    bb_relative.Standup(ms_ibasho);
                }
            }

            Setumei_1Bitboard("関連する飛び利き駒", bb_relative, syuturyoku);
        }
Esempio n. 2
0
        public static Bitboard Kiki_BB(Koma km, Masu attackerMs, Shogiban shogiban)
        {
            Bitboard kiki = new Bitboard();

            // 盤上
            for (int iDan = 0; iDan < Option_Application.Optionlist.BanTateHaba; iDan++)
            {
                for (int iSuji = 0; iSuji < Option_Application.Optionlist.BanYokoHaba; iSuji++)
                {
                    if (Util_HiouteCase.IsLegalMove(km, (Masu)(iDan * Option_Application.Optionlist.BanYokoHaba + iSuji), attackerMs, shogiban))
                    {
                        kiki.Standup((Masu)(iDan * Option_Application.Optionlist.BanYokoHaba + iSuji));
                    }
                }
            }

            return(kiki);
        }