Пример #1
0
        /// <summary>
        /// 巻き戻しなら、非成りに戻します。
        /// </summary>
        /// <param name="move">棋譜に記録するために「指す前/指した後」を含めた手。</param>
        /// <param name="isBack"></param>
        /// <returns></returns>
        private static PieceType Do30_MakimodosiNara_HinariNiModosu(
            IMove move,
            bool isBack)
        {
            //------------------------------------------------------------
            // 確定  :  移動先升
            //------------------------------------------------------------
            PieceType syurui2;

            {
                //----------
                // 成るかどうか
                //----------

                RO_Star koma = Util_Starlightable.AsKoma(move.Now);


                if (Util_Sky_BoolQuery.IsNattaMove(move))
                {
                    if (isBack)
                    {
                        // 正順で成ったのなら、巻戻しでは「非成」に戻します。
                        syurui2 = Util_Komasyurui14.NarazuCaseHandle(Util_Komahaiyaku184.Syurui(koma.Haiyaku));
                    }
                    else
                    {
                        syurui2 = Util_Komahaiyaku184.Syurui(koma.Haiyaku);
                    }
                }
                else
                {
                    syurui2 = Util_Komahaiyaku184.Syurui(koma.Haiyaku);
                }
            }

            return(syurui2);
        }
Пример #2
0
        /// <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());
        }