/// <summary> /// 棋譜に沿って、終局図まで進めるぜ☆(^~^) /// 局面は初期局面に設定し、「手目」は0に戻してあるものとするぜ☆(^~^) /// </summary> /// <param name="ky2"></param> /// <param name="hyoji"></param> public static bool Try_PlayMoves_0ToPreTeme(FenSyurui f, StringBuilder hyoji) { // 棋譜を元に、局面データを再現するぜ☆ MoveGenAccessor.ScanMoves_0ToPreTeme((int iTeme, ref bool toBreak) => { Move ss = PureMemory.mvs_ssAr[iTeme]; #if DEBUG hyoji.AppendLine(string.Format("[{0}] 指すぜ☆(^~^) ss={1}", iTeme, SpkMove.ToString_Fen(PureSettei.fenSyurui, ss) )); int a = 0; #endif if (DoMoveOpe.TryFailDoMoveAll( ss, MoveType.N00_Karappo #if DEBUG , f , (IDebugMojiretu)hyoji , false , "Try_GoToFinish" #endif )) { toBreak = true; return; } MoveGenAccessor.AddKifu(ss, MoveType.N00_Karappo, PureMemory.dmv_ks_c); #if DEBUG // 局面表示☆ Interproject.project.HyojiKyokumen(iTeme, hyoji); // 駒の居場所表示☆ Interproject.project.HyojiIbasho("Try_PlayMoves_0ToPreTeme", hyoji); #endif }); return(true); }
/// <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); // 敵の利きが利いている場所に打つぜ☆(^▽^) } }