/// <summary> /// 駒の利き /// </summary> /// <param name="bbItiran_kikiZenbu"></param> /// <param name="bbItiran_kikiKomabetu"></param> /// <param name="syuturyoku"></param> public static void HyojiKomanoKiki(Shogiban shogiban, StringBuilder syuturyoku) { Debug.Assert(shogiban.IsActiveBBKiki(), ""); // 利き全部 { syuturyoku.AppendLine("利き(全部)"); Bitboard[] bbHairetu = new Bitboard[Conv_Taikyokusya.AllOptionalPhaseList.Length]; foreach (var optionalPhase65 in Conv_Taikyokusya.AllOptionalPhaseList) { bbHairetu[OptionalPhase.IndexOf(optionalPhase65)] = shogiban.GetBBKikiZenbu(optionalPhase65); } Setumei_Bitboards(Conv_Taikyokusya.NamaeItiran, bbHairetu, syuturyoku); } // 駒別 { syuturyoku.AppendLine("利き(駒別)"); foreach (var optionalPhase74 in Conv_Taikyokusya.AllOptionalPhaseList)// 対局者1、対局者2 { // 盤上 Bitboard[] bbHairetu = new Bitboard[Conv_Komasyurui.Itiran.Length]; foreach (Komasyurui ks in Conv_Komasyurui.Itiran) { bbHairetu[(int)ks] = shogiban.GetBBKiki(Med_Koma.KomasyuruiAndTaikyokusyaToKoma(ks, optionalPhase74)); } Setumei_Bitboards(Med_Koma.GetKomasyuruiNamaeItiran(optionalPhase74), bbHairetu, syuturyoku); } } }
public static void Assert_Sabun_Kiki(string message, Kyokumen.Sindanyo kys) { // 駒の利き☆ bool safe = true; // 再計算 Recalculate Shogiban saikeisan = new Shogiban(kys); saikeisan.Tukurinaosi_1_Clear_KikiKomabetu(); saikeisan.Tukurinaosi_2_Input_KikiKomabetu(kys); foreach (var optionalPhase in Conv_Taikyokusya.AllOptionalPhaseList) // 対局者1、対局者2 { int iKm = 0; //どの駒でエラーがあったか foreach (Koma km in Conv_Koma.ItiranTai[OptionalPhase.IndexOf(optionalPhase)]) { if (!kys.EqualsKiki(km, saikeisan))//現行版と、再計算版の比較 { safe = false; break; } iKm++; } // ダイアログボックスに収まるように分けるぜ☆ if (!safe) { StringBuilder sindan1 = new StringBuilder(); //// 参考:駒の居場所 //{ // sindan1.Append(message); // sindan1.AppendLine("参考:駒の居場所"); // Util_Information.HyojiKomanoIbasho(ky.BB_KomaZenbu, ky.BB_Koma, sindan1); // sindan1.AppendLine($"Util_Tansaku.TansakuTyakusyuEdas=[{Util_Tansaku.TansakuTyakusyuEdas}]"); //} sindan1.Append(message); sindan1.Append("【エラー】"); Conv_Taikyokusya.Setumei_Name(optionalPhase, sindan1); sindan1.AppendLine(); sindan1.AppendLine($"iKm=[{iKm}]"); sindan1.AppendLine("利き:(再計算)"); Util_Information.Setumei_Bitboards(Med_Koma.GetKomasyuruiNamaeItiran(optionalPhase), saikeisan.WhereBBKiki(optionalPhase), sindan1); kys.Setumei_GenkoKiki(optionalPhase, sindan1); // 利き:(現行) var msg = sindan1.ToString(); sindan1.Clear(); Logger.Flush(msg); Debug.Assert(safe, msg); } } }
/// <summary> /// 駒の動き☆ /// </summary> /// <param name="komanoUgokikata"></param> /// <param name="syuturyoku"></param> public static void HyojiKomanoUgoki(Shogiban shogiban, int masuYososu, StringBuilder syuturyoku) { // KomanoUgokikata komanoUgokikata for (int ms = 0; ms < masuYososu; ms++) { syuturyoku.AppendLine($"ます{ms}"); foreach (var optionalPhase in Conv_Taikyokusya.AllOptionalPhaseList) { // 盤上 Bitboard[] bbHairetu = new Bitboard[Conv_Komasyurui.Itiran.Length]; foreach (Komasyurui ks in Conv_Komasyurui.Itiran) { bbHairetu[(int)ks] = shogiban.GetKomanoUgokikata(Med_Koma.KomasyuruiAndTaikyokusyaToKoma(ks, optionalPhase), (Masu)ms); } Util_Information.Setumei_Bitboards(Med_Koma.GetKomasyuruiNamaeItiran(optionalPhase), bbHairetu, syuturyoku); syuturyoku.AppendLine(); } } }