Пример #1
0
 /// <summary>
 /// 指定のビット以外、降ろすぜ☆(*^~^*)
 /// </summary>
 /// <param name="bb"></param>
 public Bitboard Select(Bitboard bb)
 {
     m_value64127_ &= bb.Value64127;
     m_value063_   &= bb.Value063;
     return(this);
 }
Пример #2
0
        public static void Kiki(bool isSfen, string commandline, Kyokumen ky, out Masu out_ms, out Bitboard out_kikiBB)
        {
            //KomanoUgokikata komanoUgokikata,

            // うしろに続く文字は☆(^▽^)
            int caret = 0;

            Util_String.TobasuTangoToMatubiKuhaku(commandline, ref caret, "kiki ");
            string line = commandline.Substring(caret).TrimEnd();

            if (line.Length == 2)// kiki b3
            {
                out_kikiBB = null;

                // 升を返すぜ☆
                if (!Med_Parser.TryParseMs(isSfen, commandline, ky, ref caret, out out_ms))
                {
                    throw new Exception("パースエラー102");
                }
            }
            else// kiki b3 R 1
            {
                out_ms = ky.MASU_ERROR;

                // 盤面表示を返すぜ☆
                string moji1 = "";
                string moji2 = "";
                string moji3 = "";
                string moji4 = "";
                Match  m     = Itiran_FenParser.GetKikiCommandPattern(Option_Application.Optionlist.USI).Match(commandline, caret);
                if (m.Success)
                {
                    Util_String.SkipMatch(commandline, ref caret, m);

                    moji1 = m.Groups[1].Value;
                    moji2 = m.Groups[2].Value;
                    moji3 = m.Groups[3].Value;
                    moji4 = m.Groups[4].Value;

                    if (!Med_Parser.TryTaikyokusya(Option_Application.Optionlist.USI, moji4, out Option <Phase> phase))
                    {
                        throw new Exception($"対局者のパースエラー moji4=[{ moji4 }]");
                    }
                    out_kikiBB = Util_Application.Kiki_BB(Med_Koma.KomasyuruiAndTaikyokusyaToKoma(Med_Parser.Moji_Komasyurui(Option_Application.Optionlist.USI, moji3), phase), Med_Parser.FenSujiDan_Masu(Option_Application.Optionlist.USI, moji1, moji2), ky.Shogiban);// komanoUgokikata
                }
                else
                {
                    out_kikiBB = null;
                }
            }
        }
Пример #3
0
 /// <summary>
 /// 指定のビットを、降ろすぜ☆(*^~^*)
 /// </summary>
 /// <param name="bb"></param>
 public Bitboard Sitdown(Bitboard bb)
 {
     m_value64127_ &= ~bb.Value64127;
     m_value063_   &= ~bb.Value063;
     return(this);
 }
Пример #4
0
 ///// <summary>
 ///// 全てのビットを立てるぜ☆(^~^)
 ///// </summary>
 //public void StandupAllBits()
 //{
 //    m_value64127_ = ~0UL;
 //    m_value063_ = ~0UL;
 //}
 /// <summary>
 /// ビットを立てるぜ☆(^~^)
 /// </summary>
 /// <param name="bb"></param>
 public void Standup(Bitboard bb)
 {
     m_value64127_ |= bb.Value64127;
     m_value063_   |= bb.Value063;
 }
Пример #5
0
 public void Set(Bitboard bb)
 {
     m_value64127_ = bb.Value64127;
     m_value063_   = bb.Value063;
 }
Пример #6
0
 static Util_TryRule()
 {
     m_trySakiBB_ = new Bitboard();
 }
Пример #7
0
        /// <summary>
        /// トライできる先。
        /// </summary>
        /// <param name="ky">局面</param>
        /// <param name="kikiBB">手番らいおんの利きビットボード</param>
        /// <param name="tb">手番</param>
        /// <param name="ms1">手番らいおんがいる升</param>
        /// <returns></returns>
        public static Bitboard GetTrySaki(Kyokumen ky, Bitboard kikiBB, Option <Phase> optionalPhase, Masu ms1, StringBuilder syuturyoku)
        {
            var phaseIndex = OptionalPhase.IndexOf(optionalPhase);

            Util_Test.AppendLine("テスト: トライルール", syuturyoku);
            m_trySakiBB_.Clear();

            // 自分はN段目にいる☆
            int  dan     = Conv_Masu.ToDan_JibunSiten(optionalPhase, ms1, ky.Sindan);
            bool nidanme = 2 == dan;

            Util_Test.AppendLine("2段目にいるか☆?[{ nidanme }] わたしは[{ dan }]段目にいるぜ☆", syuturyoku);
            if (!nidanme)
            {
                Util_Test.AppendLine("むりだぜ☆", syuturyoku);
                Util_Test.Flush(syuturyoku);
                return(m_trySakiBB_);
            }

            // 1段目に移動できる升☆

            m_trySakiBB_.Set(kikiBB);
            m_trySakiBB_.Select(ky.BB_Try[phaseIndex]);
            Util_Test.TestCode((StringBuilder syuturyoku2) =>
            {
                Util_Information.Setumei_Bitboards(new string[] { "らいおんの利き", "1段目に移動できる升" },
                                                   new Bitboard[] { kikiBB, m_trySakiBB_ }, syuturyoku2);
            });

            // 味方の駒がないところ☆
            Bitboard spaceBB = new Bitboard();

            spaceBB.Set(ky.BB_BoardArea);
            spaceBB.Sitdown(ky.Shogiban.GetBBKomaZenbu(optionalPhase));
            m_trySakiBB_.Select(spaceBB);
            Util_Test.TestCode((StringBuilder str) =>
            {
                Util_Information.Setumei_Bitboards(new string[] { "味方駒無い所", "トライ先" },
                                                   new Bitboard[] { spaceBB, m_trySakiBB_ }, str);
            });
            if (m_trySakiBB_.IsEmpty())
            {
                Util_Test.AppendLine("むりだぜ☆", syuturyoku);
                Util_Test.Flush(syuturyoku);
                return(m_trySakiBB_);
            }

            // 相手の利きが届いていないところ☆
            var      optionalOpponent2 = Conv_Taikyokusya.Reverse(optionalPhase);
            Bitboard safeBB            = new Bitboard();

            safeBB.Set(ky.BB_BoardArea);
            ky.Shogiban.ToSitdown_BBKikiZenbu(optionalOpponent2, safeBB);
            m_trySakiBB_.Select(safeBB);
            Util_Test.TestCode((StringBuilder syuturyoku2) =>
            {
                Util_Information.Setumei_Bitboards(new string[] { "相手利き無い所", "トライ先" },
                                                   new Bitboard[] { safeBB, m_trySakiBB_ }, syuturyoku2);
            });
            if (m_trySakiBB_.IsEmpty())
            {
                Util_Test.AppendLine("むりだぜ☆", syuturyoku);
                Util_Test.Flush(syuturyoku);
                return(m_trySakiBB_);
            }

            Util_Test.AppendLine("トライできるぜ☆", syuturyoku);
            Util_Test.Flush(syuturyoku);

            return(m_trySakiBB_);
        }