Exemplo n.º 1
0
 public static void Setumei(Masu ms, Kyokumen ky, StringBuilder syuturyoku)
 {
     syuturyoku.Append(Conv_Kihon.ToAlphabetLarge(ky.ToSuji_WithError(ms)));
     syuturyoku.Append(ky.ToDan_WithError(ms).ToString());
 }
Exemplo n.º 2
0
        /// <summary>
        /// 改造FEN符号表記
        /// </summary>
        /// <returns></returns>
        public static void AppendFenTo(bool isSfen, Move ss, StringBuilder syuturyoku)
        {
            if (Move.Toryo == ss)
            {
                syuturyoku.Append(Itiran_FenParser.GetToryo(isSfen)); return;
            }

            int v = (int)ss;//バリュー(ビットフィールド)

            // 打った駒の種類(取り出すのは難しいので関数を使う☆)
            MotiKomasyurui mksUtta = GetUttaKomasyurui(ss);

            if (MotiKomasyurui.Yososu != mksUtta)//指定があれば
            {
                // 打でした。

                // (自)筋・(自)段は書かずに、「P*」といった表記で埋めます。
                Conv_MotiKomasyurui.AppendFenTo(isSfen, mksUtta, syuturyoku);
                syuturyoku.Append("*");
            }
            else
            {
                //------------------------------------------------------------
                // (自)筋
                //------------------------------------------------------------
                if (Option_Application.Optionlist.USI)
                {
                    syuturyoku.Append(Option_Application.Optionlist.BanYokoHaba + 1 - GetSrcSuji_WithoutErrorCheck(v));
                }
                else
                {
                    syuturyoku.Append(Conv_Kihon.ToAlphabetLarge(GetSrcSuji_WithoutErrorCheck(v)));
                }

                //------------------------------------------------------------
                // (自)段
                //------------------------------------------------------------
                if (Option_Application.Optionlist.USI)
                {
                    syuturyoku.Append(Conv_Kihon.ToAlphabetSmall(GetSrcDan_WithoutErrorCheck(v)));
                }
                else
                {
                    syuturyoku.Append(GetSrcDan_WithoutErrorCheck(v).ToString());
                }
            }

            //------------------------------------------------------------
            // (至)筋
            //------------------------------------------------------------
            if (Option_Application.Optionlist.USI)
            {
                syuturyoku.Append(Option_Application.Optionlist.BanYokoHaba + 1 - GetDstSuji_WithoutErrorCheck(v));
            }
            else
            {
                syuturyoku.Append(Conv_Kihon.ToAlphabetLarge(GetDstSuji_WithoutErrorCheck(v)));
            }

            //------------------------------------------------------------
            // (至)段
            //------------------------------------------------------------
            if (Option_Application.Optionlist.USI)
            {
                syuturyoku.Append(Conv_Kihon.ToAlphabetSmall(GetDstDan_WithoutErrorCheck(v)));
            }
            else
            {
                syuturyoku.Append(GetDstDan_WithoutErrorCheck(v).ToString());
            }

            //------------------------------------------------------------
            // 成
            //------------------------------------------------------------
            int natta;

            {
                // (v & m) >> s + 1。 v:バリュー、m:マスク、s:シフト
                natta = (v & (int)MoveMask.Natta) >> (int)MoveShift.Natta;
            }
            if (1 == natta)
            {
                syuturyoku.Append("+");
            }
        }