예제 #1
0
        /// <summary>
        /// 1重の入れ子の将棋盤。持ち駒の一覧に利用。
        /// </summary>
        /// <returns></returns>
        private static string Format_SingleShogiban(FeatureVector fv, Playerside pside, Kp_P2Item kp_p2Item)
        {
            StringBuilder sb = new StringBuilder();

            //----------------------------------------
            // タイトル行
            //----------------------------------------
            sb.AppendLine("\"#----------------------------------------\",");
            sb.Append("\"#");
            sb.Append(kp_p2Item.Title);
            sb.AppendLine("\",");
            sb.AppendLine("\"#----------------------------------------\",");

            //----------------------------------------
            // K が 一段~九段
            //----------------------------------------
            for (int kDan = 1; kDan < 10; kDan++)
            {
                // 行頭
                sb.Append("    ");//4文字
                //----------------------------------------
                // K が 9筋~1筋
                //----------------------------------------
                for (int kSuji = 9; kSuji > 0; kSuji--)
                {
                    //int kMasu = Util_Masu10.Handle_OkibaSujiDanToMasu(Okiba.ShogiBan, kSuji, kDan);
                    int k1;
                    Conv_FvKoumoku522.Converter_K1_to_P(pside, kDan, kSuji, out k1);

                    int p2 = kp_p2Item.P2;
                    if (Const_FeatureVectorFormat.PARAMETER_INDEX_OUTPUT)
                    {
                        sb.Append(string.Format("{0,4}_{1,4}", k1, p2));
                    }
                    else
                    {
                        // スコアの倍率を復元します。
                        float scoreF = fv.NikomaKankeiPp_ForMemory[k1, p2] / fv.Bairitu_NikomaKankeiPp;
                        int   value  = (int)Math.Round(scoreF, 0);//小数点以下を丸めます。
                        sb.Append(string.Format("{0,4}", value));
                    }

                    sb.Append(",");
                }
                // 次の段へ
                sb.AppendLine();
            }

            return(sb.ToString());
        }
예제 #2
0
        /// <summary>
        /// 2駒関係[KK]用。
        /// フィーチャーベクターの調査項目インデックス。該当なければ-1。
        /// </summary>
        /// <param name="pside">プレイヤーサイド</param>
        /// <param name="komasyurui">盤上の種類</param>
        /// <param name="masu">盤上の駒の升</param>
        /// <returns></returns>
        public static int ToKIndex_From_PsideBanjoKomasyuruiMasu(SkyConst src_Sky, Playerside pside)
        {
            // 調査項目番号(K1、K2等)
            int result;

            SyElement masu;

            {
                Finger  figK1  = Util_Sky_FingersQuery.InOkibaPsideKomasyuruiNow(src_Sky, Okiba.ShogiBan, pside, PieceType.K).ToFirst();
                RO_Star komaK1 = Util_Starlightable.AsKoma(src_Sky.StarlightIndexOf(figK1).Now);
                masu = komaK1.Masu;
            }

            if (Okiba.ShogiBan != Conv_SyElement.ToOkiba(masu))
            {
                // 盤上でなければ。
                result = -1;
                goto gt_EndMethod;
            }

            int kSuji;

            Util_MasuNum.TryMasuToSuji(masu, out kSuji);
            int kDan;

            Util_MasuNum.TryMasuToDan(masu, out kDan);


            int p1;

            Conv_FvKoumoku522.Converter_K1_to_P(Playerside.P1, kDan, kSuji, out p1);


            result = p1;

gt_EndMethod:
            ;
            return(result);
        }
예제 #3
0
        /// <summary>
        /// 2重の入れ子の将棋盤。
        /// </summary>
        /// <returns></returns>
        private static string Format_NestedShogiban(FeatureVector fv, Playerside pside, Kp_P2Item kp_p2item)
        {
            StringBuilder sb = new StringBuilder();

            //----------------------------------------
            // タイトル行
            //----------------------------------------
            sb.AppendLine("\"#----------------------------------------\",");
            sb.Append("\"#");
            sb.Append(kp_p2item.Title);
            sb.AppendLine("\",");
            sb.AppendLine("\"#----------------------------------------\",");

            //----------------------------------------
            // K が 一段~九段
            //----------------------------------------
            for (int kDan = 1; kDan < 10; kDan++)
            {
                // 列見出し行を作ります。
                sb.Append("\"#");//2文字
                string danStr = Conv_Int.ToKanSuji(kDan);
                for (int suji = 9; suji > 0; suji--)
                {
                    if (suji != 9)
                    {
                        sb.Append("    ");//4文字(列間)
                    }
                    string sujiStr = Conv_Int.ToArabiaSuji(suji);
                    sb.Append(" ");
                    sb.Append(sujiStr);
                    sb.Append(danStr);
                    sb.Append("玉        ");//15文字(3列分)
                    for (int col = 0; col < 6; col++)
                    {
                        sb.Append("     ");//5文字
                    }

                    if (Const_FeatureVectorFormat.PARAMETER_INDEX_OUTPUT)
                    {
                        sb.Append("                                             ");//調整
                    }
                }
                sb.AppendLine("\",");

                //----------------------------------------
                // P が 一段~九段
                //----------------------------------------
                for (int pDan = 1; pDan < 10; pDan++)
                {
                    // 行頭
                    sb.Append("    ");//4文字
                    //----------------------------------------
                    // K が 9筋~1筋
                    //----------------------------------------
                    for (int kSuji = 9; kSuji > 0; kSuji--)
                    {
                        if (kSuji != 9)
                        {
                            // 表の横の隙間
                            sb.Append("    ");
                        }
                        int p1;
                        Conv_FvKoumoku522.Converter_K1_to_P(pside, kDan, kSuji, out p1);
                        //int kMasu = Util_Masu10.Handle_OkibaSujiDanToMasu(Okiba.ShogiBan, kSuji, kDan);

                        //----------------------------------------
                        // P が 9筋~1筋
                        //----------------------------------------
                        for (int pSuji = 9; pSuji > 0; pSuji--)
                        {
                            int pMasu = Util_Masu10.Handle_OkibaSujiDanToMasu(Okiba.ShogiBan, pSuji, pDan);

                            if (Const_FeatureVectorFormat.PARAMETER_INDEX_OUTPUT)
                            {
                                int p2 = kp_p2item.P2 + pMasu;
                                sb.Append(string.Format("{0,4}_{1,4}", p1, p2));
                            }
                            else
                            {
                                // スコアの倍率を復元します。
                                float scoreF = fv.NikomaKankeiPp_ForMemory[p1, kp_p2item.P2 + pMasu] / fv.Bairitu_NikomaKankeiPp;
                                int   value  = (int)Math.Round(scoreF, 0);//小数点以下を丸めます。
                                sb.Append(string.Format("{0,4}", value));
                            }

                            sb.Append(",");
                        }
                    }
                    // 次の段へ
                    sb.AppendLine();
                }
                // 段の隙間
                sb.AppendLine();
            }

            return(sb.ToString());
        }
예제 #4
0
        /// <summary>
        /// テキストを作ります。
        /// </summary>
        /// <param name="fv"></param>
        /// <returns></returns>
        public static string Format_KK(FeatureVector fv)
        {
            StringBuilder sb = new StringBuilder();

            //
            // コメント
            //
            sb.AppendLine("\"#紹介文\",");
            sb.AppendLine("\"#\",");
            sb.AppendLine("\"#ボナンザ6.0アレンジ式きふわらべ2駒関係\",");
            sb.AppendLine("\"#\",");
            sb.AppendLine("\"#----------------------------------------\",");
            sb.AppendLine("\"#KK表☆\",");
            sb.AppendLine("\"#----------------------------------------\",");
            sb.AppendLine("\"#\",");
            sb.AppendLine("\"#常に先手は正の数、後手は負の数の絶対値が大きい方が有利。0は互角。\",");

            //
            // 仕様バージョン
            //
            sb.AppendLine();
            sb.AppendLine("\"Version\",1.0,");
            sb.AppendLine();
            //----------------------------------------
            // プレイヤー1のK が 一段~九段
            //----------------------------------------
            for (int k1dan = 1; k1dan < 10; k1dan++)
            {
                // コメント行を作ります。
                sb.Append("\"#KK");//4文字
                string danStr = Conv_Int.ToKanSuji(k1dan);
                for (int suji = 9; suji > 0; suji--)
                {
                    string sujiStr = Conv_Int.ToArabiaSuji(suji);
                    sb.Append(" ");
                    sb.Append(sujiStr);
                    sb.Append(danStr);
                    sb.Append("1P玉 vs2P玉   ");//15文字
                    for (int col = 0; col < 5; col++)
                    {
                        sb.Append("     "); //5文字
                    }
                    sb.Append("     ");     //5文字

                    if (Const_FeatureVectorFormat.PARAMETER_INDEX_OUTPUT)
                    {
                        sb.Append("                                             ");//調整
                    }
                }
                sb.AppendLine("\",");

                //----------------------------------------
                // プレイヤー2のK が 一段~九段
                //----------------------------------------
                for (int k2dan = 1; k2dan < 10; k2dan++)
                {
                    // 行頭
                    sb.Append("    ");//4文字
                    //----------------------------------------
                    // プレイヤー1のK が 9筋~1筋
                    //----------------------------------------
                    for (int k1suji = 9; k1suji > 0; k1suji--)
                    {
                        int p1;
                        int p2;

                        //----------------------------------------
                        // プレイヤー2のK が 9筋~1筋
                        //----------------------------------------
                        for (int k2suji = 9; k2suji > 0; k2suji--)
                        {
                            int k2masu = Util_Masu10.Handle_OkibaSujiDanToMasu(Okiba.ShogiBan, k2suji, k2dan);

                            Conv_FvKoumoku522.Converter_KK_to_PP(k1dan, k2dan, k1suji, k2suji, out p1, out p2);

                            if (Const_FeatureVectorFormat.PARAMETER_INDEX_OUTPUT)
                            {
                                sb.Append(string.Format("{0,4}_{1,4}", p1, p2));
                            }
                            else
                            {
                                // スコアの倍率を復元します。
                                float scoreF = fv.NikomaKankeiPp_ForMemory[p1, p2] / fv.Bairitu_NikomaKankeiPp;
                                int   value  = (int)Math.Round(scoreF, 0);//小数点以下を丸めます。
                                sb.Append(string.Format("{0,4}", value));
                            }

                            sb.Append(",");
                        }

                        // 表の横の隙間
                        sb.Append("    ");
                    }
                    // 次の段へ
                    sb.AppendLine();
                }
                // 段の隙間
                sb.AppendLine();
            }

            return(sb.ToString());
        }