Beispiel #1
0
        /// <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));
            }
        }
Beispiel #2
0
        /// <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));
            }
        }
Beispiel #3
0
        /// <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("+");
            }
        }
Beispiel #4
0
 public static void AppendSetumei(Masu ms, StringBuilder hyoji)
 {
     hyoji.Append(Conv_Kihon.ToAlphabetLarge(GenkyokuOpe.ToSuji_WithError(ms)));
     hyoji.Append(GenkyokuOpe.ToDan_WithError(ms).ToString());
 }
Beispiel #5
0
        /// <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
        }