/// <summary> /// 駒別の居場所 /// </summary> /// <param name="hyoji"></param> static void AppendKomaBetuIbashoTo(IbashoBan.YomiIbashoBan yomiIbashoBan, StringBuilder hyoji) { hyoji.AppendLine("駒別の居場所"); foreach (Taikyokusya tai in Conv_Taikyokusya.itiran)// 対局者1、対局者2 { // 駒別 foreach (Piece km_tai in Conv_Koma.itiranTai[(int)tai]) { hyoji.Append(SpkBanWaku.CutHeaderBanWidthZenkaku(Conv_Koma.GetName(km_tai))); } hyoji.AppendLine(); // 盤 YomiBitboard[] bbHairetu = new YomiBitboard[Conv_Komasyurui.itiran.Length]; int i = 0; foreach (Komasyurui ks in Conv_Komasyurui.itiran) { bbHairetu[i] = yomiIbashoBan.GetKoma(Med_Koma.KomasyuruiAndTaikyokusyaToKoma(ks, tai)); i++; } SpkBan_MultiColumn.Setumei_Bitboard(null, bbHairetu, " 〇 ", " ", hyoji); } }
/// <summary> /// ビットボードを横に並べるぜ☆(^▽^) /// </summary> /// <param name="headers">見出しを使わない場合はヌル</param> /// <param name="yomiBbHairetu"></param> /// <param name="hyoji"></param> public static void Setumei_Bitboard(string[] headers, YomiBitboard[] yomiBbHairetu, string yes, string no, StringBuilder hyoji) { Debug.Assert(0 < yomiBbHairetu.Length && null != yomiBbHairetu[0], ""); // 見出し if (null != headers) { SpkBanWaku.Setumei_Headers(headers, hyoji); } // 盤上 SpkBanWaku.AppendLine_TopBar(yomiBbHairetu.Length, PureSettei.banYokoHaba, hyoji); for (int dan = 0; dan < PureSettei.banTateHaba; dan++) { SpkBanWaku.AppendLine_MultiTableRecord_Cell4Hankakus4( (int iTable, Masu ms) => { return(yomiBbHairetu[iTable].IsOn(ms) ? yes : no); // " 〇 " : " "; }, yomiBbHairetu, dan, hyoji); if (dan + 1 < PureSettei.banTateHaba) { SpkBanWaku.AppendLine_MiddleBar(yomiBbHairetu.Length, PureSettei.banYokoHaba, hyoji); } } SpkBanWaku.AppendLine_BottomBar(yomiBbHairetu.Length, PureSettei.banYokoHaba, hyoji); }
/// <summary> /// ビットボードをコンソールへ出力するぜ☆(^▽^) /// </summary> /// <returns></returns> public static void Setumei_Bitboard(string[] headers, Bitboard[] bbHairetu, StringBuilder hyoji) { // 見出し if (null != headers) { SpkBanWaku.Setumei_Headers(headers, hyoji); } SpkBanWaku.AppendLine_TopBar(bbHairetu.Length, PureSettei.banYokoHaba, hyoji); for (int dan = 0; dan < PureSettei.banTateHaba; dan++) { SpkBanWaku.AppendLine_MultiTableRecord_Cell4Hankakus4( (int iTable, Masu ms) => { return(bbHairetu[iTable].IsOn(ms) ? " 〇 " : " "); }, bbHairetu, dan, hyoji); if (dan + 1 < PureSettei.banTateHaba) { SpkBanWaku.AppendLine_MiddleBar(bbHairetu.Length, PureSettei.banYokoHaba, hyoji); } } SpkBanWaku.AppendLine_BottomBar(bbHairetu.Length, PureSettei.banYokoHaba, hyoji); }
/// <summary> /// 駒の利き数☆(^~^) /// 対局者別と、駒別 /// </summary> /// <returns></returns> public static void HyojiKomanoKikiSu(KikiBan.YomiKikiBan yomiKikiBan, StringBuilder hyoji) { hyoji.AppendLine("重ね利き数全部"); hyoji.AppendLine(string.Format("差分更新トータル ▲{0} △{1}", yomiKikiBan.CountKikisuTotalZenbu(Taikyokusya.T1), yomiKikiBan.CountKikisuTotalZenbu(Taikyokusya.T2))); // 対局者別 全部 { // 見出し SpkBanWaku.Setumei_Headers(Conv_Taikyokusya.namaeItiran, hyoji); SpkBanWaku.AppendLine_TopBar(Conv_Taikyokusya.itiran.Length, PureSettei.banYokoHaba, hyoji); // ┌──┬──┬──┐みたいな線☆ for (int dan = 0; dan < PureSettei.banTateHaba; dan++) { // データ表示 SpkBanWaku.AppendLine_Record_Cell4Hankakus1( (Taikyokusya tai, Masu ms) => { int kikisuZenbu = yomiKikiBan.CountKikisuZenbu(tai, ms); return(0 < kikisuZenbu ? string.Format(" {0,2} ", kikisuZenbu) : " "); }, dan, hyoji ); if (dan + 1 < PureSettei.banTateHaba) { SpkBanWaku.AppendLine_MiddleBar(Conv_Taikyokusya.itiran.Length, PureSettei.banYokoHaba, hyoji); // ├──┼──┼──┤みたいな線☆ } } SpkBanWaku.AppendLine_BottomBar(Conv_Taikyokusya.itiran.Length, PureSettei.banYokoHaba, hyoji); // └──┴──┴──┘みたいな線☆ } // 駒別 foreach (Taikyokusya tai in Conv_Taikyokusya.itiran) // 対局者1、対局者2 { foreach (Piece km_tai in Conv_Koma.itiranTai[(int)tai]) { hyoji.Append(SpkBanWaku.CutHeaderBanWidthZenkaku(Conv_Koma.GetName(km_tai))); } hyoji.AppendLine(); SpkBanWaku.AppendLine_TopBar(Conv_Komasyurui.itiran.Length, PureSettei.banYokoHaba, hyoji); for (int dan = 0; dan < PureSettei.banTateHaba; dan++) { SpkBanWaku.AppendLine_Record_Cell4Hankakus3( (Taikyokusya tai1, Komasyurui ks, Masu ms) => { int kikisuKomabetu = yomiKikiBan.CountKikisuKomabetu(Med_Koma.KomasyuruiAndTaikyokusyaToKoma(ks, tai1), ms); return(0 < kikisuKomabetu ? string.Format(" {0,2} ", kikisuKomabetu) : " "); }, tai, dan, hyoji); if (dan + 1 < PureSettei.banTateHaba) { SpkBanWaku.AppendLine_MiddleBar(Conv_Komasyurui.itiran.Length, PureSettei.banYokoHaba, hyoji); } } SpkBanWaku.AppendLine_BottomBar(Conv_Komasyurui.itiran.Length, PureSettei.banYokoHaba, hyoji); } }
/// <summary> /// お邪魔ボードを横に並べるぜ☆(^▽^) /// 見出し有り /// </summary> /// <returns></returns> public static void Setumei_MasuHyo( string[] headers, Masu[][] masuHyoHairetu, bool yokoTateHanten, StringBuilder hyoji) { Debug.Assert(0 < masuHyoHairetu.Length, ""); int banYokoHaba_tmp; int banTateHaba_tmp; if (yokoTateHanten) { banYokoHaba_tmp = PureSettei.banTateHaba; banTateHaba_tmp = PureSettei.banYokoHaba; } else { banYokoHaba_tmp = PureSettei.banYokoHaba; banTateHaba_tmp = PureSettei.banTateHaba; } // 見出し SpkBanWaku.Setumei_Headers(headers, hyoji); // 盤上 SpkBanWaku.AppendLine_TopBar(masuHyoHairetu.Length, banYokoHaba_tmp, hyoji); for (int dan = 0; dan < banTateHaba_tmp; dan++) { SpkBanWaku.AppendLine_MultiTableRecord_Cell4Hankakus5( (Masu[] masuHyo, Masu ms) => { return(string.Format(" {0,2} ", masuHyo[(int)ms])); }, masuHyoHairetu, dan, banYokoHaba_tmp, hyoji); if (dan + 1 < banTateHaba_tmp) { SpkBanWaku.AppendLine_MiddleBar(masuHyoHairetu.Length, banYokoHaba_tmp, hyoji); } } SpkBanWaku.AppendLine_BottomBar(masuHyoHairetu.Length, banYokoHaba_tmp, hyoji); }
/// <summary> /// 汎用 /// </summary> /// <returns></returns> static void Setumei_Hanyo( DLGT_dataBu dlgt_dataBu, int banYokoHaba_tmp, int banTateHaba_tmp, int teme, StringBuilder hyoji ) { #region 盤の上の方 // 2行目 { // 何手目 hyoji.Append(string.Format("図は{0,3}手まで ", teme)); // 手番 SpkTaikyokusya.AppendSetumeiName(PureMemory.GetTebanByTeme(teme), hyoji); hyoji.Append("の番"); hyoji.AppendLine(); } // 3行目 後手の持ち駒 { // 後手の持ち駒の数 foreach (MotigomaSyurui mks in Conv_MotigomaSyurui.itiran) { Motigoma mk = Med_Koma.MotiKomasyuruiAndTaikyokusyaToMotiKoma(mks, Taikyokusya.T2); if (PureMemory.gky_ky.yomiKy.yomiMotigomaItiran.HasMotigoma(mk)) { hyoji.Append(Conv_MotigomaSyurui.GetHyojiName(mks)); hyoji.Append(PureMemory.gky_ky.yomiKy.yomiMotigomaItiran.Count(mk).ToString()); } } hyoji.AppendLine(); } // 4行目 { // A B C D とか hyoji.Append(" "); SpkBanWaku.AppendLine_SujiFugo(banYokoHaba_tmp, hyoji); } // 5行目 { hyoji.Append(" "); SpkBanWaku.AppendLine_TopBar(1, PureSettei.banYokoHaba, hyoji); // ┌──┬──┬──┐ } #endregion // 5行目~13行目 // 盤上 for (int dan = 0; dan < PureSettei.banTateHaba; dan++) { // 6,8,10,12行目 hyoji.Append(Conv_Kihon.ToZenkakuInteger(dan + 1)); SpkBanWaku.AppendLine_Record_Cell4Hankakus2( (Masu ms) => { return(dlgt_dataBu(dan, ms)); }, dan, banYokoHaba_tmp, hyoji); if (dan + 1 < PureSettei.banTateHaba) { // 7,9,11行目 hyoji.Append(" "); SpkBanWaku.AppendLine_MiddleBar(1, PureSettei.banYokoHaba, hyoji);//├──┼──┼──┤ } } #region 盤の下の方 // 13行目 { hyoji.Append(" "); SpkBanWaku.AppendLine_BottomBar(1, PureSettei.banYokoHaba, hyoji);//└──┴──┴──┘ } // 先手の持ち駒の数 { foreach (MotigomaSyurui mks in Conv_MotigomaSyurui.itiran) { Motigoma mk = Med_Koma.MotiKomasyuruiAndTaikyokusyaToMotiKoma(mks, Taikyokusya.T1); if (PureMemory.gky_ky.yomiKy.yomiMotigomaItiran.HasMotigoma(mk)) { hyoji.Append(Conv_MotigomaSyurui.GetHyojiName(mks)); hyoji.Append(PureMemory.gky_ky.yomiKy.yomiMotigomaItiran.Count(mk).ToString()); } } hyoji.AppendLine(); } #endregion }