Example #1
0
        /// <summary>
        /// 5枚の将棋盤。P1が「持ち香」のときなどに使用。
        /// largeColumnMaxを指定して、3枚 or 5枚の将棋盤にすることも可能。
        /// </summary>
        /// <returns></returns>
        private static string Format_3or5Shogibans(FeatureVector fv, int p1_base, PpItem_P2Banjo p2Item, int largeColumnMax)
        {
            StringBuilder sb = new StringBuilder();

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

            //----------------------------------------
            // 1段で、横に5枚の将棋盤を並べます。
            //----------------------------------------
            {
                // 列見出し行を作ります。
                sb.Append("\"#");//2文字
                for (int largeColumn = 0; largeColumn < largeColumnMax; largeColumn++)
                {
                    if (largeColumn != 0)
                    {
                        sb.Append("    ");//4文字(列間)
                    }

                    // 大グループの枚数
                    int maisu = largeColumn;
                    sb.Append(" ");
                    sb.Append(" ");                               //十の位は空っぽ。
                    sb.Append(Conv_Int.ToArabiaSuji(maisu % 10)); //一の位。
                    sb.Append("枚        ");                       //15文字(3列分)
                    for (int col = 0; col < 6; col++)
                    {
                        sb.Append("     ");//5文字
                    }
                }
                sb.AppendLine("\",");

                //----------------------------------------
                // p2 が 一段~九段
                //----------------------------------------
                for (int p2Dan = 1; p2Dan < 10; p2Dan++)
                {
                    // 行頭
                    sb.Append("    ");//4文字
                    //----------------------------------------
                    // 大グループが 0列~9列。
                    //----------------------------------------
                    for (int largeColumn = 0; largeColumn < largeColumnMax; largeColumn++)
                    {
                        if (largeColumn != 0)
                        {
                            // 表の横の隙間
                            sb.Append("    ");
                        }

                        // 大グループの枚数
                        int maisu = largeColumn;

                        //----------------------------------------
                        // p2 が 9筋~1筋
                        //----------------------------------------
                        for (int p2Suji = 9; p2Suji > 0; p2Suji--)
                        {
                            int pMasu = Util_Masu10.Handle_OkibaSujiDanToMasu(Okiba.ShogiBan, p2Suji, p2Dan);

                            int p1 = p1_base + maisu;
                            int p2 = p2Item.P2_base + pMasu;
                            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.AppendLine();
                }
                // 段の隙間
                sb.AppendLine();
            }

            return(sb.ToString());
        }
Example #2
0
        /// <summary>
        /// 19枚の将棋盤。P1が「持ち歩」のときに使用。
        /// </summary>
        /// <param name="fv"></param>
        /// <param name="p1_base_motiFu">持ち駒の位置から。</param>
        /// <param name="p2Item"></param>
        /// <returns></returns>
        private static string Format_19Shogibans(FeatureVector fv, int p1_base_motiFu, PpItem_P2Banjo p2Item)
        {
            StringBuilder sb = new StringBuilder();

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

            //----------------------------------------
            // 2段を用意します。(大グループ)
            // 上段が 0~9枚のとき。(10枚の将棋盤)
            // 下段が 10~18枚のとき。(9枚の将棋盤)
            //----------------------------------------
            for (int largeRow = 0; largeRow < 2; largeRow++)
            {
                // 列見出し行を作ります。
                sb.Append("\"#");//2文字
                for (int largeColumn = 0; largeColumn < 10; largeColumn++)
                {
                    if (largeRow == 1 && largeColumn == 9)
                    {
                        // 下段には 大10列目はありません。
                        break;
                    }

                    if (largeColumn != 0)
                    {
                        sb.Append("    ");//4文字(列間)
                    }

                    // 大テーブルの枚数
                    int    maisu = largeRow * 10 + largeColumn;
                    string maisuStr10;
                    if (maisu < 10)
                    {
                        maisuStr10 = " ";
                    }
                    else
                    {
                        maisuStr10 = "1";
                    }
                    string maisuStr01 = Conv_Int.ToArabiaSuji(maisu % 10);
                    sb.Append(" ");
                    sb.Append(maisuStr10);
                    sb.Append(maisuStr01);
                    sb.Append("枚        ");//15文字(3列分)
                    for (int col = 0; col < 6; col++)
                    {
                        sb.Append("     ");//5文字
                    }

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

                //----------------------------------------
                // p2 が 一段~九段
                //----------------------------------------
                for (int smallDan = 1; smallDan < 10; smallDan++)
                {
                    // 行頭
                    sb.Append("    ");//4文字
                    //----------------------------------------
                    // 大グループが 0列~9列。
                    //----------------------------------------
                    for (int largeColumn = 0; largeColumn < 10; largeColumn++)
                    {
                        if (largeRow == 1 && largeColumn == 9)
                        {
                            // 下段には 大10列目はありません。
                            break;
                        }

                        if (largeColumn != 0)
                        {
                            // 表の横の隙間
                            sb.Append("    ");
                        }

                        // 大グループの枚数
                        int maisu = largeRow * 10 + largeColumn;//0~18

                        //----------------------------------------
                        // p2 が 9筋~1筋
                        //----------------------------------------
                        for (int smallSuji = 9; smallSuji > 0; smallSuji--)
                        {
                            // 0~80
                            int smallMasu = Util_Masu10.Handle_OkibaSujiDanToMasu(Okiba.ShogiBan, smallSuji, smallDan);

                            int p1 = p1_base_motiFu + maisu;
                            int p2 = p2Item.P2_base + smallMasu;
                            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));  //アウトプットはok:持ち歩 vs 盤上の駒
                            }

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

            return(sb.ToString());
        }