/// <summary> /// 指し手生成の開始時に呼び出されるぜ☆(^~^) /// </summary> /// <param name="gky"></param> public static void Tukurinaosi() { // らいおんの場所(らいおんは0~1匹という前提) foreach (Taikyokusya tai in Conv_Taikyokusya.itiran) { Masu ms_tmp; if (PureMemory.gky_ky.yomiKy.yomiShogiban.yomiIbashoBan.GetNTZ(Med_Koma.ToRaion(tai), out ms_tmp)) { PureMemory.hot_ms_raionAr[(int)tai] = ms_tmp;// ここに、らいおんのマスを覚えておくぜ☆(^~^) // <編集> // ライオンの利き=8近傍 BitboardsOmatome.KomanoUgokikataYk00.ToSet_Merge( Med_Koma.ToRaion(tai), PureMemory.hot_ms_raionAr[(int)tai], PureMemory.hot_bb_raion8KinboAr[(int)tai]// ここに、らいおんの8近傍を覚えておくぜ☆(^~^) ); } else { // らいおんがいない場合 PureMemory.hot_ms_raionAr[(int)tai] = Conv_Masu.masu_error; PureMemory.hot_bb_raion8KinboAr[(int)tai].Clear(); } } // 手番側が、王手回避が必要かどうか調べたいぜ☆(^~^) Tukurinaosi_1(PureMemory.kifu_teban, PureMemory.kifu_aiteban, false); // 相手番側が、王手回避が必要かどうか調べたいぜ☆(^~^) Tukurinaosi_1(PureMemory.kifu_aiteban, PureMemory.kifu_teban, true);//手番を ひっくり返す }
/// <summary> /// 一手詰めの局面かどうか調べるぜ☆(^▽^) /// /// 自分が一手詰めを掛けられるから、この指し手は作らないでおこう、といった使い方がされるぜ☆(^▽^) /// /// FIXME: 持ち駒の打ちにも使えないか☆(^~^)? /// </summary> /// <param name="fukasa"></param> /// <param name="ky2"></param> /// <param name="ms_src">持ち駒の場合、エラー値</param> /// <param name="mks">持ち駒の場合、持駒の種類</param> /// <param name="ms_t1"></param> /// <param name="tebanHioute"></param> /// <returns></returns> public static bool CheckBegin_Ittedume_MotiKoma() { if (!PureSettei.ittedumeTukau) { return(false); } if (!Conv_Motigoma.IsOk(PureMemory.ssss_mot_mg)) { throw new Exception("持ち駒じゃないじゃないか☆(^▽^)www"); } // A B C // ┌──┬──┬──┐ //1│ │▽ら│ │ // ├──┼──┼──┤ //2│▲き│ │▲き│ // ├──┼──┼──┤ //3│ │▲に│▲ら│ // ├──┼──┼──┤ //4│▲ぞ│▲ひ│▲ぞ│ // └──┴──┴──┘ // 盤上の駒を動かすのか、駒台の駒を打つのかによって、利き の形が異なるぜ☆(^~^) Bitboard bb_kiki_t1 = BitboardsOmatome.KomanoUgokikataYk00.Clone_Merge(Med_Koma.MotiKomaToKoma(PureMemory.ssss_mot_mg), PureMemory.ssss_ugoki_ms_dst); if (!PureMemory.gky_ky.shogiban.yomiIbashoBan_yoko.IsIntersect(Med_Koma.ToRaion(PureMemory.kifu_aiteban), // 相手らいおんの場所☆ bb_kiki_t1)) // 相手らいおん が、動かした駒の、利きの中に居ないんだったら、一手詰め にはならないぜ☆(^~^) { // FIXME: ステイルメイトは考えてないぜ☆(>_<) return(false); } Piece km_t1 = Med_Koma.MotiKomaToKoma(PureMemory.ssss_mot_mg);//t0も同じ // FIXME: ↓駒移動後の、利きを取る必要がある Bitboard bb_kikiNewJibun = new Bitboard(); { // 打による、重ね利きの数を差分更新するぜ☆(^▽^) //, ky.BB_KikiZenbu // 移動先の駒の利きを増やすぜ☆(^▽^) PureMemory.gky_ky.shogiban.kikiBan.OkuKiki(km_t1, PureMemory.ssss_ugoki_ms_dst); // こっちの利きを作り直し bb_kikiNewJibun = PureMemory.gky_ky.shogiban.kikiBan.RefBB_FromKikisuZenbuPositiveNumber(Med_Koma.MotiKomaToTaikyokusya(PureMemory.ssss_mot_mg)); // 打による、重ね利きの数の差分更新を元に戻すぜ☆(^▽^) // 移動先の駒の利きを減らすぜ☆(^▽^) PureMemory.gky_ky.shogiban.kikiBan.TorinozokuKiki(km_t1, PureMemory.ssss_ugoki_ms_dst); } // 相手らいおんが逃げようとしていて。 Bitboard bb1 = PureMemory.hot_bb_raion8KinboAr[PureMemory.kifu_nAiteban].Clone(); // 相手らいおんの8近傍 PureMemory.gky_ky.shogiban.ibashoBan_yk00.yomiIbashoBan.ToSitdown_KomaZenbu(PureMemory.kifu_aiteban, bb1); // 相手の駒がない升 return (bb1.Sitdown(bb_kikiNewJibun) // こっちの利きがない升 .IsEmpty()); // 相手らいおん が逃げれる升がない場合、詰み☆ }
/// <summary> /// 一手詰めの局面かどうか調べるぜ☆(^▽^) /// /// 盤上の駒を動かすのか、駒台の駒を打つのかによって、利き の形が異なるぜ☆(^~^) /// /// 自分が一手詰めを掛けられるから、この指し手は作らないでおこう、といった使い方がされるぜ☆(^▽^) /// /// FIXME: 成りを考慮してない /// </summary> /// <param name="ky2"></param> /// <param name="ms_t0">移動元。持ち駒の場合、エラー値</param> /// <param name="ms_t1">移動先</param> /// <param name="tebanHioute"></param> /// <returns></returns> public static bool CheckBegin_Tume1_BanjoKoma() { Debug.Assert(Conv_Masu.IsBanjo(PureMemory.ssss_ugoki_ms_dst), "升エラー"); if (!PureSettei.ittedumeTukau) { return(false); } // 動かす駒 Komasyurui ks_t0; if (!PureMemory.gky_ky.yomiKy.yomiShogiban.yomiIbashoBan.ExistsKoma(PureMemory.kifu_teban, PureMemory.ssss_ugoki_ms_src, out ks_t0)) { // エラー。盤上の駒ではないのかも☆(^~^) throw new Exception(Interproject.project.Owata("TryFail_Ittedume_BanjoKoma gky.ky.shogiban.ibashoBan.ExistsBBKoma(1)", PureMemory.tnsk_hyoji)); } Piece km_t0 = Med_Koma.KomasyuruiAndTaikyokusyaToKoma(ks_t0, PureMemory.kifu_teban); Piece km_t1 = km_t0; // FIXME: 成りを考慮していないぜ☆(>_<) // A B C // ┌──┬──┬──┐ //1│ │▽ら│ │ // ├──┼──┼──┤ //2│▲き│ │▲き│ // ├──┼──┼──┤ //3│ │▲に│▲ら│ // ├──┼──┼──┤ //4│▲ぞ│▲ひ│▲ぞ│ // └──┴──┴──┘ // 動かしたばかりの駒を 取り返されるようでは、一手詰めは成功しないぜ☆(^~^)(ステイルメイト除く) if (1 < PureMemory.gky_ky.shogiban.kikiBan.yomiKikiBan.CountKikisuZenbu(PureMemory.kifu_aiteban, PureMemory.ssss_ugoki_ms_dst)) { // 移動先升は、相手らいおん の利きも 1つ あるはず。 // 移動先升に 相手の利きが2つあれば、駒を取り返される☆ return(false); } if (!PureMemory.gky_ky.shogiban.yomiIbashoBan_yoko.IsIntersect(Med_Koma.ToRaion(PureMemory.kifu_aiteban), // 相手のらいおん BitboardsOmatome.KomanoUgokikataYk00.Clone_Merge(km_t0, PureMemory.ssss_ugoki_ms_dst) // 移動先での駒の利き )) // 相手らいおん が、移動先での駒の利きの中に居ないんだったら、一手詰め にはならないぜ☆(^~^) { // FIXME: ステイルメイトは考えてないぜ☆(>_<) return(false); } Bitboard bb_idogoKikiNew = new Bitboard();// 移動後の、利き { // 盤上の重ね利きの数を差分更新するぜ☆(^▽^) // 移動元の駒の利きを消すぜ☆(^▽^) PureMemory.gky_ky.shogiban.kikiBan.TorinozokuKiki(km_t0, PureMemory.ssss_ugoki_ms_src); // 現局面より 利き が減っているのが正しい // 移動先の駒の利きを増やすぜ☆(^▽^) PureMemory.gky_ky.shogiban.kikiBan.OkuKiki(km_t1, PureMemory.ssss_ugoki_ms_dst); // ここで、現行の利きは変更されているぜ☆(^~^)駒は移動していないので、再計算の駒配置は 現行の利きと異なるぜ☆(^~^) // 移動後の利きを作り直し bb_idogoKikiNew = PureMemory.gky_ky.shogiban.kikiBan.RefBB_FromKikisuZenbuPositiveNumber(PureMemory.kifu_teban); // 盤上の重ね利きの数の差分更新を元に戻すぜ☆(^▽^) { // 移動先の駒の利きを減らすぜ☆(^▽^) PureMemory.gky_ky.shogiban.kikiBan.TorinozokuKiki(km_t1, PureMemory.ssss_ugoki_ms_dst); // 駒の利きを減らしているぜ☆(^~^) 駒は減っていないので、再計算すると結果が異なるぜ☆(^~^) // 移動元の駒の利きを増やすぜ☆(^▽^) PureMemory.gky_ky.shogiban.kikiBan.OkuKiki(km_t0, PureMemory.ssss_ugoki_ms_src); } } Bitboard bb1 = PureMemory.hot_bb_raion8KinboAr[PureMemory.kifu_nAiteban].Clone(); // 相手らいおん が逃げれる、相手らいおんの周りの空白 PureMemory.gky_ky.shogiban.ibashoBan_yk00.yomiIbashoBan.ToSitdown_KomaZenbu(PureMemory.kifu_aiteban, bb1); // 相手の駒がない升 return (bb1.Sitdown(bb_idogoKikiNew) // こっちの利きがない升 .IsEmpty()); // がない場合、詰み☆ ; }
/// <summary> /// /// </summary> public static void DoMovePickerBegin(MoveType flag) { MoveGenAccessor.Clear_SsssUtikiri(); // 空っぽにしておくぜ☆ 何か入れないと投了だぜ☆(^▽^)www MoveGenAccessor.ClearMoveList(); PureMemory.ssss_isSyobuNasi = GenkyokuOpe.IsSyobuNasi(); PureMemory.ssss_bbBase_idosaki01_checker.Clear(); PureMemory.ssss_bbBase_idosaki02_raionCatch.Clear(); PureMemory.ssss_bbBase_idosaki03_nigeroTe.Clear(); PureMemory.ssss_bbBase_idosaki04_try.Clear(); PureMemory.ssss_bbBase_idosaki05_komaWoToruTe.Clear(); PureMemory.ssss_bbBase_idosaki06_himodukiOteZasi.Clear(); PureMemory.ssss_bbBase_idosaki07_suteOteZasi.Clear(); PureMemory.ssss_bbBase_idosaki08_suteOteDa.Clear(); PureMemory.ssss_bbBase_idosaki09_himodukiOteDa.Clear(); PureMemory.ssss_bbBase_idosaki10_himodukiKanmanDa.Clear(); PureMemory.ssss_bbBase_idosaki11_himodukiKanmanZasi.Clear(); PureMemory.ssss_bbBase_idosaki12_bottiKanmanZasi.Clear(); PureMemory.ssss_bbBase_idosaki13_bottiKanmanDa.Clear(); PureMemory.ssss_bbBase_idosaki14_suteKanmanZasi.Clear(); PureMemory.ssss_bbBase_idosaki15_suteKanmanDa.Clear(); PureMemory.ssss_bbVar_idosaki_narazu.Clear(); PureMemory.ssss_bbVar_idosaki_nari.Clear(); PureMemory.ssssTmp_bbVar_ibasho.Clear(); // 変数名短縮 Kyokumen.YomiKy yomiKy = PureMemory.gky_ky.yomiKy; IbashoBan.YomiIbashoBan yomiIbashoBan = PureMemory.gky_ky.yomiKy.yomiShogiban.yomiIbashoBan; KikiBan.YomiKikiBan yomiKikiBan = PureMemory.gky_ky.yomiKy.yomiShogiban.yomiKikiBan; //──────────────────────────────────────── // 被王手 //──────────────────────────────────────── Util_Hioute.Tukurinaosi(); //──────────────────────────────────────── // 移動先 //──────────────────────────────────────── if ( flag.HasFlag(MoveType.N13_HippakuKaeriutiTe) || flag.HasFlag(MoveType.N14_YoyuKaeriutiTe) ) { // 移動先は、王手をかけてきている駒☆(^~^) PureMemory.ssss_bbBase_idosaki01_checker.Set(PureMemory.hot_bb_checkerAr[PureMemory.kifu_nTeban]); } if (flag.HasFlag(MoveType.N12_RaionCatch) || flag.HasFlag(MoveType.N17_RaionCatchChosa)) { // 相手らいおん を取る手のみ生成するぜ☆(^▽^) yomiIbashoBan.ToSet_Koma(Med_Koma.ToRaion(PureMemory.kifu_aiteban), PureMemory.ssss_bbBase_idosaki02_raionCatch); } if (flag.HasFlag(MoveType.N15_NigeroTe)) { // 移動先 PureMemory.ssss_bbBase_idosaki03_nigeroTe.Set(BitboardsOmatome.bb_boardArea); PureMemory.ssss_bbBase_idosaki03_nigeroTe.Siborikomi(PureMemory.hot_bb_nigeroAr[PureMemory.kifu_nTeban]); PureMemory.ssss_bbBase_idosaki03_nigeroTe.Sitdown(PureMemory.hot_bb_checkerAr[PureMemory.kifu_nTeban]); // (逼迫/余裕)返討手は除外するぜ☆(^▽^) yomiIbashoBan.ToSitdown_Koma(Med_Koma.ToRaion(PureMemory.kifu_aiteban), PureMemory.ssss_bbBase_idosaki03_nigeroTe); // 利きのうち、らいおんを取る手 は、除外するぜ☆(^▽^) PureMemory.ssss_bbBase_idosaki03_nigeroTe.Sitdown(PureMemory.hot_bb_checkerAr[PureMemory.kifu_nTeban]); // 返討手 は除外するぜ☆(^▽^) } if (flag.HasFlag(MoveType.N16_Try)) { // トライは どうぶつしょうぎ用 だぜ☆(^~^) if (PureSettei.gameRule == GameRule.DobutuShogi) { PureMemory.ssss_bbBase_idosaki04_try.Set(BitboardsOmatome.bb_boardArea); yomiIbashoBan.ToSitdown_KomaZenbu(PureMemory.kifu_teban, PureMemory.ssss_bbBase_idosaki04_try); // 味方の駒があるところには移動できないぜ☆(^▽^) yomiIbashoBan.ToSitdown_Koma(Med_Koma.ToRaion(PureMemory.kifu_aiteban), PureMemory.ssss_bbBase_idosaki04_try); // 利きのうち、らいおん を取る手は、除外するぜ☆(^▽^) PureMemory.ssss_bbBase_idosaki04_try.Sitdown(PureMemory.hot_bb_checkerAr[PureMemory.kifu_nTeban]); // 返討手 は除外するぜ☆(^▽^) } } if (flag.HasFlag(MoveType.N01_KomaWoToruTe)) { // 移動先 yomiIbashoBan.ToSet_KomaZenbu(PureMemory.kifu_aiteban, PureMemory.ssss_bbBase_idosaki05_komaWoToruTe); // 相手の駒があるところだけ☆(^▽^) yomiIbashoBan.ToSitdown_Koma(Med_Koma.ToRaion(PureMemory.kifu_aiteban), PureMemory.ssss_bbBase_idosaki05_komaWoToruTe); // らいおんキャッチ は除外するぜ☆(^▽^) PureMemory.ssss_bbBase_idosaki05_komaWoToruTe.Sitdown(PureMemory.hot_bb_checkerAr[PureMemory.kifu_nTeban]); // 返討手 は除外するぜ☆(^▽^) } if (flag.HasFlag(MoveType.N10_HimozukiOteZasi)) { // 移動先 PureMemory.ssss_bbBase_idosaki06_himodukiOteZasi.Set(BitboardsOmatome.bb_boardArea); yomiIbashoBan.ToSitdown_KomaZenbu(PureMemory.kifu_teban, PureMemory.ssss_bbBase_idosaki06_himodukiOteZasi); // 味方の駒があるところには移動できないぜ☆(^▽^) yomiIbashoBan.ToSitdown_KomaZenbu(PureMemory.kifu_aiteban, PureMemory.ssss_bbBase_idosaki06_himodukiOteZasi); // 相手の駒がある升 は除外するぜ☆(^▽^) PureMemory.ssss_bbBase_idosaki06_himodukiOteZasi.Sitdown(PureMemory.hot_bb_checkerAr[PureMemory.kifu_nTeban]); // 返討手 は除外するぜ☆(^▽^) } if (flag.HasFlag(MoveType.N06_SuteOteZasi)) { // 移動先 PureMemory.ssss_bbBase_idosaki07_suteOteZasi.Set(BitboardsOmatome.bb_boardArea); yomiIbashoBan.ToSitdown_KomaZenbu(PureMemory.kifu_teban, PureMemory.ssss_bbBase_idosaki07_suteOteZasi); // 味方の駒がある升 は除外☆(^▽^) yomiIbashoBan.ToSitdown_KomaZenbu(PureMemory.kifu_aiteban, PureMemory.ssss_bbBase_idosaki07_suteOteZasi); // 相手の駒がある升 は除外☆(^▽^) PureMemory.ssss_bbBase_idosaki07_suteOteZasi.Sitdown(PureMemory.hot_bb_checkerAr[PureMemory.kifu_nTeban]); // 返討手 は除外☆(^▽^) } if (flag.HasFlag(MoveType.N07_SuteOteDa)) { // 持ち駒 PureMemory.ssss_bbBase_idosaki08_suteOteDa.Set(BitboardsOmatome.bb_boardArea); yomiIbashoBan.ToSitdown_KomaZenbu(Taikyokusya.T1, PureMemory.ssss_bbBase_idosaki08_suteOteDa);// 持ち駒の打てる場所 = 駒が無いところ☆ yomiIbashoBan.ToSitdown_KomaZenbu(Taikyokusya.T2, PureMemory.ssss_bbBase_idosaki08_suteOteDa); } if (flag.HasFlag(MoveType.N11_HimodukiOteDa)) { // 持ち駒 PureMemory.ssss_bbBase_idosaki09_himodukiOteDa.Set(BitboardsOmatome.bb_boardArea); yomiIbashoBan.ToSitdown_KomaZenbu(Taikyokusya.T1, PureMemory.ssss_bbBase_idosaki09_himodukiOteDa); // 持ち駒の打てる場所 = 駒が無いところ☆ yomiIbashoBan.ToSitdown_KomaZenbu(Taikyokusya.T2, PureMemory.ssss_bbBase_idosaki09_himodukiOteDa); PureMemory.gky_ky.yomiKy.yomiShogiban.yomiKikiBan.ToSelect_BBKikiZenbu(PureMemory.kifu_teban, PureMemory.ssss_bbBase_idosaki09_himodukiOteDa); // 紐を付ける☆ } if (flag.HasFlag(MoveType.N08_HimotukiKanmanSasi)) { // 盤面全体 PureMemory.ssss_bbBase_idosaki11_himodukiKanmanZasi.Set(BitboardsOmatome.bb_boardArea); // - 味方の駒がある升 ※味方の駒があるところには移動できないぜ☆(^▽^) yomiIbashoBan.ToSitdown_KomaZenbu(PureMemory.kifu_teban, PureMemory.ssss_bbBase_idosaki11_himodukiKanmanZasi); // - 相手の駒がある升 ※除外するぜ☆(^▽^) yomiIbashoBan.ToSitdown_KomaZenbu(PureMemory.kifu_aiteban, PureMemory.ssss_bbBase_idosaki11_himodukiKanmanZasi); // - 利きのうち、らいおんを取る手 ※除外するぜ☆(^▽^) yomiIbashoBan.ToSitdown_Koma(Med_Koma.ToRaion(PureMemory.kifu_aiteban), PureMemory.ssss_bbBase_idosaki11_himodukiKanmanZasi); } if (flag.HasFlag(MoveType.N02_BottiKanmanSasi)) { // 移動先 PureMemory.ssss_bbBase_idosaki12_bottiKanmanZasi.Set(BitboardsOmatome.bb_boardArea); yomiIbashoBan.ToSitdown_KomaZenbu(PureMemory.kifu_teban, PureMemory.ssss_bbBase_idosaki12_bottiKanmanZasi); // 味方の駒があるところには移動できないぜ☆(^▽^) yomiIbashoBan.ToSitdown_KomaZenbu(PureMemory.kifu_aiteban, PureMemory.ssss_bbBase_idosaki12_bottiKanmanZasi); // 相手の駒がある升 は除外するぜ☆(^▽^) yomiIbashoBan.ToSitdown_Koma(Med_Koma.ToRaion(PureMemory.kifu_aiteban), PureMemory.ssss_bbBase_idosaki12_bottiKanmanZasi); // 利きのうち、らいおんを取る手 は、除外するぜ☆(^▽^) PureMemory.ssss_bbBase_idosaki12_bottiKanmanZasi.Sitdown(PureMemory.hot_bb_checkerAr[PureMemory.kifu_nTeban]); // 返討手 は除外するぜ☆(^▽^) } if (flag.HasFlag(MoveType.N03_BottiKanmanDa)) { // 持ち駒 PureMemory.ssss_bbBase_idosaki13_bottiKanmanDa.Set(BitboardsOmatome.bb_boardArea); yomiIbashoBan.ToSitdown_KomaZenbu(Taikyokusya.T1, PureMemory.ssss_bbBase_idosaki13_bottiKanmanDa); // 自駒が無いところ☆ yomiIbashoBan.ToSitdown_KomaZenbu(Taikyokusya.T2, PureMemory.ssss_bbBase_idosaki13_bottiKanmanDa); // 相手駒が無いところ☆ yomiKikiBan.ToSitdown_BBKikiZenbu(PureMemory.kifu_teban, PureMemory.ssss_bbBase_idosaki13_bottiKanmanDa); // 味方の利きが利いていない場所☆(^▽^) yomiKikiBan.ToSitdown_BBKikiZenbu(PureMemory.kifu_aiteban, PureMemory.ssss_bbBase_idosaki13_bottiKanmanDa); // 敵の利きが利いていない場所☆(^▽^) } if (flag.HasFlag(MoveType.N04_SuteKanmanSasi)) { PureMemory.ssss_bbBase_idosaki14_suteKanmanZasi.Set(BitboardsOmatome.bb_boardArea); yomiIbashoBan.ToSitdown_KomaZenbu(PureMemory.kifu_teban, PureMemory.ssss_bbBase_idosaki14_suteKanmanZasi); // 味方の駒があるところには移動できないぜ☆(^▽^) yomiIbashoBan.ToSitdown_KomaZenbu(PureMemory.kifu_aiteban, PureMemory.ssss_bbBase_idosaki14_suteKanmanZasi); // 相手の駒がある升 は除外するぜ☆(^▽^) yomiIbashoBan.ToSitdown_Koma(Med_Koma.ToRaion(PureMemory.kifu_aiteban), PureMemory.ssss_bbBase_idosaki14_suteKanmanZasi); // 利きのうち、らいおん を取る手は、除外するぜ☆(^▽^) PureMemory.ssss_bbBase_idosaki14_suteKanmanZasi.Sitdown(PureMemory.hot_bb_checkerAr[PureMemory.kifu_nTeban]); // 返討手 は除外するぜ☆(^▽^) } if (flag.HasFlag(MoveType.N05_SuteKanmanDa)) { PureMemory.ssss_bbBase_idosaki15_suteKanmanDa.Set(BitboardsOmatome.bb_boardArea); yomiIbashoBan.ToSitdown_KomaZenbu(Taikyokusya.T1, PureMemory.ssss_bbBase_idosaki15_suteKanmanDa); // 味方の駒がない升 yomiIbashoBan.ToSitdown_KomaZenbu(Taikyokusya.T2, PureMemory.ssss_bbBase_idosaki15_suteKanmanDa); // 相手の駒がない升// 2016-12-22 捨てだからと言って、紐を付けないとは限らない☆ yomiKikiBan.ToSelect_BBKikiZenbu(PureMemory.kifu_aiteban, PureMemory.ssss_bbBase_idosaki15_suteKanmanDa); // 敵の利きが利いている場所に打つぜ☆(^▽^) } }