/// <summary> /// 指定のビット以外、降ろすぜ☆(*^~^*) /// </summary> /// <param name="bb"></param> public Bitboard Select(Bitboard bb) { m_value64127_ &= bb.Value64127; m_value063_ &= bb.Value063; return(this); }
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; } } }
/// <summary> /// 指定のビットを、降ろすぜ☆(*^~^*) /// </summary> /// <param name="bb"></param> public Bitboard Sitdown(Bitboard bb) { m_value64127_ &= ~bb.Value64127; m_value063_ &= ~bb.Value063; return(this); }
///// <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; }
public void Set(Bitboard bb) { m_value64127_ = bb.Value64127; m_value063_ = bb.Value063; }
static Util_TryRule() { m_trySakiBB_ = new Bitboard(); }
/// <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_); }