/// <summary> /// ************************************************************************************************************************ /// 棋譜用の符号テキスト(*1)を作ります。 /// ************************************************************************************************************************ /// /// *1…「▲5五銀上」など。 /// /// “同”表記に「置き換えない」バージョンです。 /// /// </summary> /// <param name="move"></param> /// <param name="previousKomaP"></param> /// <returns></returns> public static string ToString_NoUseDou( JsaFugoImpl jsaFugo, RO_Starbeam move ) { StringBuilder sb = new StringBuilder(); RO_Star koma = Util_Starlightable.AsKoma(move.Now); sb.Append(Conv_Playerside.ToSankaku(koma.Pside)); //------------------------------ // “同”に変換せず、“筋・段”をそのまま出します。 //------------------------------ int suji; int dan; Util_MasuNum.TryMasuToSuji(koma.Masu, out suji); Util_MasuNum.TryMasuToDan(koma.Masu, out dan); sb.Append(Conv_Int.ToArabiaSuji(suji)); sb.Append(Conv_Int.ToKanSuji(dan)); //------------------------------ // “歩”とか。“全”ではなく“成銀” <符号用> //------------------------------ sb.Append(Util_Komasyurui14.Fugo[(int)jsaFugo.Syurui]); //------------------------------ // “右”とか //------------------------------ sb.Append(Conv_MigiHidari.ToStr(jsaFugo.MigiHidari)); //------------------------------ // “寄”とか //------------------------------ sb.Append(Conv_AgaruHiku.ToStr(jsaFugo.AgaruHiku)); //------------------------------ // “成”とか //------------------------------ sb.Append(Conv_NariNarazu.Nari_ToStr(jsaFugo.Nari)); //------------------------------ // “打”とか //------------------------------ sb.Append(Conv_DaHyoji.ToBool(jsaFugo.DaHyoji)); return(sb.ToString()); }
//------------------------------------------------------------ #endregion /// <summary> /// 「2八」といった表記にして返します。 /// /// Conv_SyElement使用。 /// </summary> /// <param name="masu"></param> /// <returns></returns> public static string ToSujiKanji(SyElement masu) { StringBuilder sb = new StringBuilder(); int suji; int dan; Util_MasuNum.TryMasuToSuji(masu, out suji); Util_MasuNum.TryMasuToDan(masu, out dan); sb.Append(Conv_Int.ToArabiaSuji(suji)); sb.Append(Conv_Int.ToKanSuji(dan)); return(sb.ToString()); }
/// <summary> /// ************************************************************************************************************************ /// SFEN符号表記。 /// ************************************************************************************************************************ /// </summary> /// <returns></returns> public static string ToMoveStrSfen( IMove move, [CallerMemberName] string memberName = "", [CallerFilePath] string sourceFilePath = "", [CallerLineNumber] int sourceLineNumber = 0 ) { StringBuilder sb = new StringBuilder(); try { if (Util_Sky258A.RootMove == move) { sb.Append(ConvMoveStrSfen.KIFU_TREE_LOG_ROOT_FOLDER); goto gt_EndMethod; } RO_Star srcKoma = Util_Starlightable.AsKoma(move.LongTimeAgo); RO_Star dstKoma = Util_Starlightable.AsKoma(move.Now); //int srcDan; //if (!Util_MasuNum.TryMasuToDan(srcKoma.Masu, out srcDan)) //{ // throw new Exception("指定の元マス[$"{Util_Masu10.AsMasuNumber(srcKoma.Masu)}]は、段に変換できません。 : {memberName}.{sourceFilePath}.{sourceLineNumber}"); //} //int dan; //if (!Util_MasuNum.TryMasuToDan(dstKoma.Masu, out dan)) //{ // throw new Exception($"指定の先マス[{Util_Masu10.AsMasuNumber(dstKoma.Masu)}]は、段に変換できません。 : {memberName}.{sourceFilePath}.{sourceLineNumber}"); //} if (Util_Sky_BoolQuery.IsDaAction(move)) { // 打でした。 //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // (自)筋・(自)段は書かずに、「P*」といった表記で埋めます。 sb.Append(Util_Komasyurui14.SfenDa[(int)Util_Komahaiyaku184.Syurui(srcKoma.Haiyaku)]); sb.Append("*"); } else { //------------------------------------------------------------ // (自)筋 //------------------------------------------------------------ string strSrcSuji; int srcSuji; if (Util_MasuNum.TryMasuToSuji(srcKoma.Masu, out srcSuji)) { strSrcSuji = srcSuji.ToString(); } else { strSrcSuji = "N筋";//エラー表現 } sb.Append(strSrcSuji); //------------------------------------------------------------ // (自)段 //------------------------------------------------------------ string strSrcDan2; int srcDan2; if (Util_MasuNum.TryMasuToDan(srcKoma.Masu, out srcDan2)) { strSrcDan2 = Conv_Int.ToAlphabet(srcDan2); } else { strSrcDan2 = "N段";//エラー表現 } sb.Append(strSrcDan2); } //------------------------------------------------------------ // (至)筋 //------------------------------------------------------------ string strSuji; int suji2; if (Util_MasuNum.TryMasuToSuji(dstKoma.Masu, out suji2)) { strSuji = suji2.ToString(); } else { strSuji = "N筋";//エラー表現 } sb.Append(strSuji); //------------------------------------------------------------ // (至)段 //------------------------------------------------------------ string strDan; int dan2; if (Util_MasuNum.TryMasuToDan(dstKoma.Masu, out dan2)) { strDan = Conv_Int.ToAlphabet(dan2); } else { strDan = "N段";//エラー表現 } sb.Append(strDan); //------------------------------------------------------------ // 成 //------------------------------------------------------------ if (Util_Sky_BoolQuery.IsNattaMove(move)) { sb.Append("+"); } } catch (Exception e) { sb.Append(e.Message);//FIXME: } gt_EndMethod: ; return(sb.ToString()); }
/// <summary> /// ************************************************************************************************************************ /// 棋譜用の符号テキスト(*1)を作ります。 /// ************************************************************************************************************************ /// /// *1…「▲5五銀上」など。 /// /// </summary> /// <param name="douExpr">“同”表記に置き換えるなら真。</param> /// <param name="previousKomaP"></param> /// <returns></returns> public static string ToString_UseDou( JsaFugoImpl jsaFugo, Node <IMove, KyokumenWrapper> siteiNode ) { StringBuilder sb = new StringBuilder(); IMove curMove = siteiNode.Key; RO_Star curSrcKoma = Util_Starlightable.AsKoma(curMove.LongTimeAgo); RO_Star curDstKoma = Util_Starlightable.AsKoma(curMove.Now); sb.Append(Conv_Playerside.ToSankaku(curDstKoma.Pside)); //------------------------------ // “同”で表記できるところは、“同”で表記します。それ以外は“筋・段”で表記します。 //------------------------------ if (!siteiNode.IsRoot()) { IMove preMove = siteiNode.GetParentNode().Key; if (null != preMove) { //RO_Star_Koma preSrcKoma = Util_Starlightable.AsKoma(preMove.LongTimeAgo); RO_Star preDstKoma = Util_Starlightable.AsKoma(preMove.Now); if (Conv_SyElement.ToMasuNumber(preDstKoma.Masu) == Conv_SyElement.ToMasuNumber(curDstKoma.Masu)) { // “同” sb.Append("同"); goto gt_Next1; } } } { // “筋・段” int suji; int dan; Util_MasuNum.TryMasuToSuji(curDstKoma.Masu, out suji); Util_MasuNum.TryMasuToDan(curDstKoma.Masu, out dan); sb.Append(Conv_Int.ToArabiaSuji(suji)); sb.Append(Conv_Int.ToKanSuji(dan)); } gt_Next1: ; //------------------------------ // “歩”とか。“全”ではなく“成銀” <符号用> //------------------------------ sb.Append(Util_Komasyurui14.Fugo[(int)jsaFugo.Syurui]); //------------------------------ // “右”とか //------------------------------ sb.Append(Conv_MigiHidari.ToStr(jsaFugo.MigiHidari)); //------------------------------ // “寄”とか //------------------------------ sb.Append(Conv_AgaruHiku.ToStr(jsaFugo.AgaruHiku)); //------------------------------ // “成”とか //------------------------------ sb.Append(Conv_NariNarazu.Nari_ToStr(jsaFugo.Nari)); //------------------------------ // “打”とか //------------------------------ sb.Append(Conv_DaHyoji.ToBool(jsaFugo.DaHyoji)); return(sb.ToString()); }
/// <summary> /// デバッグ用文字列を作ります。 /// </summary> /// <param name="masus"></param> /// <param name="memo"></param> /// <returns></returns> public static string Log_Masus(SySet <SyElement> masus, string memo) { StringBuilder sb = new StringBuilder(); int errorCount = 0; // フォルスクリア bool[] ban81 = new bool[81]; // フラグ立て foreach (New_Basho basho in masus.Elements) { if (Okiba.ShogiBan == Conv_SyElement.ToOkiba(Masu_Honshogi.Masus_All[basho.MasuNumber])) { ban81[basho.MasuNumber] = true; } } sb.AppendLine("...(^▽^)さて、局面は☆?"); if (null != memo && "" != memo.Trim()) { sb.AppendLine(memo); } sb.AppendLine(" 9 8 7 6 5 4 3 2 1"); sb.AppendLine("┏━┯━┯━┯━┯━┯━┯━┯━┯━┓"); for (int dan = 1; dan <= 9; dan++) { sb.Append("┃"); for (int suji = 9; suji >= 1; suji--)// 筋は左右逆☆ { SyElement masu = Util_Masu10.OkibaSujiDanToMasu(Okiba.ShogiBan, suji, dan); if (Okiba.ShogiBan == Conv_SyElement.ToOkiba(masu)) { if (ban81[Conv_SyElement.ToMasuNumber(masu)]) { sb.Append("●"); } else { sb.Append(" "); } } else { errorCount++; sb.Append(" "); } if (suji == 1)//1筋が最後だぜ☆ { sb.Append("┃"); sb.AppendLine(Conv_Int.ToKanSuji(dan)); } else { sb.Append("│"); } } if (dan == 9) { sb.AppendLine("┗━┷━┷━┷━┷━┷━┷━┷━┷━┛"); } else { sb.AppendLine("┠─┼─┼─┼─┼─┼─┼─┼─┼─┨"); } } // 後手駒台 sb.Append("エラー数:"); sb.AppendLine(errorCount.ToString()); sb.AppendLine("...(^▽^)ドウダッタカナ~☆"); return(sb.ToString()); }