/// <summary> /// 段 /// </summary> /// <param name="f"></param> /// <param name="suji"></param> /// <returns></returns> public static int FenDan_Int(FenSyurui f, string dan) { switch (f) { case FenSyurui.sfe_n: return(Conv_Kihon.AlphabetToInt(dan)); case FenSyurui.dfe_n: { int iDan; if (!int.TryParse(dan, out iDan)) { throw new Exception($"パース失敗 dan=[{ dan }]"); } return(iDan); } default: throw new Exception(string.Format("未定義 {0}", f)); } }
/// <summary> /// 筋 /// </summary> /// <param name="f"></param> /// <param name="suji"></param> /// <returns></returns> public static int FenSuji_Int(FenSyurui f, string suji) { switch (f) { case FenSyurui.sfe_n: { int iSuji; if (!int.TryParse(suji, out iSuji)) { throw new Exception($"パース失敗 suji=[{ suji }]"); } return(PureSettei.banYokoHaba + 1 - iSuji); } case FenSyurui.dfe_n: { return(Conv_Kihon.AlphabetToInt(suji)); } default: throw new Exception(string.Format("未定義 {0}", f)); } }
/// <summary> /// 改造FEN符号表記 /// </summary> /// <returns></returns> public static void AppendFenTo(FenSyurui f, Move ss, StringBuilder syuturyoku) { if (Move.Toryo == ss) { syuturyoku.Append(Itiran_FenParser.GetToryo(f)); return; } int v = (int)ss;//バリュー(ビットフィールド) // 打った駒の種類(取り出すのは難しいので関数を使う☆) MotigomaSyurui mksUtta = AbstractConvMove.GetUttaKomasyurui(ss); if (MotigomaSyurui.Yososu != mksUtta)//指定があれば { // 打でした。 // (自)筋・(自)段は書かずに、「P*」といった表記で埋めます。 SpkMotiKomasyurui.AppendFenTo(f, mksUtta, syuturyoku); syuturyoku.Append("*"); } else { //------------------------------------------------------------ // (自)筋 //------------------------------------------------------------ //Option_Application.Optionlist.USI switch (f) { case FenSyurui.sfe_n: { syuturyoku.Append(PureSettei.banYokoHaba + 1 - AbstractConvMove.GetSrcSuji_WithoutErrorCheck(v)); } break; case FenSyurui.dfe_n: { syuturyoku.Append(Conv_Kihon.ToAlphabetLarge(AbstractConvMove.GetSrcSuji_WithoutErrorCheck(v))); } break; default: throw new Exception(string.Format("未定義 {0}", f)); } //------------------------------------------------------------ // (自)段 //------------------------------------------------------------ //Option_Application.Optionlist.USI switch (f) { case FenSyurui.sfe_n: { syuturyoku.Append(Conv_Kihon.ToAlphabetSmall(AbstractConvMove.GetSrcDan_WithoutErrorCheck(v))); } break; case FenSyurui.dfe_n: { syuturyoku.Append(AbstractConvMove.GetSrcDan_WithoutErrorCheck(v).ToString()); } break; default: throw new Exception(string.Format("未定義 {0}", f)); } } //------------------------------------------------------------ // (至)筋 //------------------------------------------------------------ //Option_Application.Optionlist.USI switch (f) { case FenSyurui.sfe_n: { syuturyoku.Append(PureSettei.banYokoHaba + 1 - AbstractConvMove.GetDstSuji_WithoutErrorCheck(v)); } break; case FenSyurui.dfe_n: { syuturyoku.Append(Conv_Kihon.ToAlphabetLarge(AbstractConvMove.GetDstSuji_WithoutErrorCheck(v))); } break; default: throw new Exception(string.Format("未定義 {0}", f)); } //------------------------------------------------------------ // (至)段 //------------------------------------------------------------ //Option_Application.Optionlist.USI switch (f) { case FenSyurui.sfe_n: { syuturyoku.Append(Conv_Kihon.ToAlphabetSmall(AbstractConvMove.GetDstDan_WithoutErrorCheck(v))); } break; case FenSyurui.dfe_n: { syuturyoku.Append(AbstractConvMove.GetDstDan_WithoutErrorCheck(v).ToString()); } break; default: throw new Exception(string.Format("未定義 {0}", f)); } //------------------------------------------------------------ // 成 //------------------------------------------------------------ int natta; { // (v & m) >> s + 1。 v:バリュー、m:マスク、s:シフト natta = (v & (int)MoveMask.NATTA) >> (int)MoveShift.NATTA; } if (1 == natta) { syuturyoku.Append("+"); } }
public static void AppendSetumei(Masu ms, StringBuilder hyoji) { hyoji.Append(Conv_Kihon.ToAlphabetLarge(GenkyokuOpe.ToSuji_WithError(ms))); hyoji.Append(GenkyokuOpe.ToDan_WithError(ms).ToString()); }
/// <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 }