Example #1
0
        public KyokumenPngArgsImpl(
            ISfenPosition1 ro_Kyokumen1,
            int srcMasu_orMinusOne,
            int dstMasu_orMinusOne,
            KyokumenPngArgs_FoodOrDropKoma foodKoma,
            KyokumenPngArgs_FoodOrDropKoma dropKoma,
            string outFile,
            KyokumenPngEnvironment reportEnvironment)
        {
            this.ro_Kyokumen1       = ro_Kyokumen1;
            this.srcMasu_orMinusOne = srcMasu_orMinusOne;
            this.dstMasu_orMinusOne = dstMasu_orMinusOne;
            this.foodKoma           = foodKoma;
            this.dropKoma           = dropKoma;

            //// デバッグ
            //{
            //    Debug.Assert(this.ro_Kyokumen1.Ban.Length == 10, "サイズ違反");
            //    Debug.Assert(this.ro_Kyokumen1.Ban[0].Length == 10, "サイズ違反");
            //    Debug.Assert(this.ro_Kyokumen1.Ban[1].Length == 10, "サイズ違反");
            //    Debug.Assert(this.ro_Kyokumen1.Ban[2].Length == 10, "サイズ違反");
            //    Debug.Assert(this.ro_Kyokumen1.Ban[3].Length == 10, "サイズ違反");
            //    Debug.Assert(this.ro_Kyokumen1.Ban[4].Length == 10, "サイズ違反");
            //    Debug.Assert(this.ro_Kyokumen1.Ban[5].Length == 10, "サイズ違反");
            //    Debug.Assert(this.ro_Kyokumen1.Ban[6].Length == 10, "サイズ違反");
            //    Debug.Assert(this.ro_Kyokumen1.Ban[7].Length == 10, "サイズ違反");
            //    Debug.Assert(this.ro_Kyokumen1.Ban[8].Length == 10, "サイズ違反");
            //    Debug.Assert(this.ro_Kyokumen1.Ban[9].Length == 10, "サイズ違反");
            //}

            this.outFile = outFile;
            this.env     = reportEnvironment;
        }
Example #2
0
        private static Rectangle GetMotiRectangle(KyokumenPngArgs_FoodOrDropKoma foodOrDropKoma, KyokumenPngArgs args)
        {
            int motiRow;

            switch (foodOrDropKoma)//歩香桂銀金角飛の順。
            {
            case KyokumenPngArgs_FoodOrDropKoma.FU__: motiRow = 0; break;

            case KyokumenPngArgs_FoodOrDropKoma.KYO_: motiRow = 1; break;

            case KyokumenPngArgs_FoodOrDropKoma.KEI_: motiRow = 2; break;

            case KyokumenPngArgs_FoodOrDropKoma.GIN_: motiRow = 3; break;

            case KyokumenPngArgs_FoodOrDropKoma.KIN_: motiRow = 4; break;

            case KyokumenPngArgs_FoodOrDropKoma.KAKU: motiRow = 5; break;

            case KyokumenPngArgs_FoodOrDropKoma.HI__: motiRow = 6; break;

            default: motiRow = 0; break;
            }

            int ox = 0;
            int oy = 0;

            if (1 == args.Ro_Kyokumen1.Temezumi % 2)
            {
                // プレイヤー1
                ox      = (args.Env.KmW + 2 * args.Env.SjW) + 9 * args.Env.KmW + BN_BRD_R_W;
                oy      = (9 * args.Env.KmW + BN_BRD_B_W) - 7 * args.Env.KmH;
                motiRow = 6 - motiRow;//角から歩の順に逆転させます。
            }
            else
            {
                // プレイヤー2
                ox = 0;
                oy = 0;
            }

            return(new Rectangle(ox,
                                 motiRow * args.Env.KmH + oy,
                                 args.Env.KmW,
                                 args.Env.KmH));
        }
Example #3
0
        /// <summary>
        /// 局面データと、出力ファイル名を指定することで、局面の画像ログを出力します。
        /// </summary>
        /// <param name="ro_Kyokumen1"></param>
        /// <param name="dstMasu_orMinusOne">あれば、移動先升番号。なければ -1。</param>
        /// <param name="appendFilepath"></param>
        /// <param name="outFile"></param>
        /// <param name="reportEnvironment"></param>
        /// <returns></returns>
        public static bool Write1(
            ISfenPosition1 ro_Kyokumen1,
            int srcMasu_orMinusOne,
            int dstMasu_orMinusOne,
            KyokumenPngArgs_FoodOrDropKoma foodKoma,
            string sfenMoveStrOrEmpty,
            string appendFilepath,
            string outFile,
            KyokumenPngEnvironment reportEnvironment
            )
        {
            bool successful = true;


            //----------------------------------------
            // 打った駒を調べる
            //----------------------------------------
            KyokumenPngArgs_FoodOrDropKoma dropKoma;

            {
                dropKoma = KyokumenPngArgs_FoodOrDropKoma.UNKNOWN;
                if ("" != sfenMoveStrOrEmpty)
                {
                    string moji1;
                    string moji2;
                    string moji3;
                    string moji4;
                    string moji5;
                    string rest;
                    SfenMovesTextConv.ToTokens(
                        sfenMoveStrOrEmpty,
                        out moji1,
                        out moji2,
                        out moji3,
                        out moji4,
                        out moji5,
                        out rest
                        );

                    if (moji2 == "*")
                    {
                        switch (moji1)
                        {
                        case SfenWord.P_PAWN__: dropKoma = KyokumenPngArgs_FoodOrDropKoma.FU__; break;

                        case SfenWord.L_LANCE_: dropKoma = KyokumenPngArgs_FoodOrDropKoma.KYO_; break;

                        case SfenWord.N_KNIGHT: dropKoma = KyokumenPngArgs_FoodOrDropKoma.KEI_; break;

                        case SfenWord.S_SILVER: dropKoma = KyokumenPngArgs_FoodOrDropKoma.GIN_; break;

                        case SfenWord.G_GOLD__: dropKoma = KyokumenPngArgs_FoodOrDropKoma.KIN_; break;

                        case SfenWord.B_BISHOP: dropKoma = KyokumenPngArgs_FoodOrDropKoma.KAKU; break;

                        case SfenWord.R_ROOK__: dropKoma = KyokumenPngArgs_FoodOrDropKoma.HI__; break;

                        default: break;
                        }
                    }
                    else
                    {
                        dropKoma = KyokumenPngArgs_FoodOrDropKoma.NONE;
                    }
                }
            }


            //----------------------------------------
            // ファイルに使える文字に変換
            //----------------------------------------
            appendFilepath = appendFilepath.Replace('*', '*');
            outFile        = outFile.Replace('*', '*');

            KyokumenPngArgs args = new KyokumenPngArgsImpl(
                ro_Kyokumen1,
                srcMasu_orMinusOne,
                dstMasu_orMinusOne,
                foodKoma,
                dropKoma,
                outFile,
                reportEnvironment
                );

            // 局面画像を描きだします。
            Bitmap bmp = new Bitmap(
                2 * (args.Env.KmW + 2 * args.Env.SjW) + Util_KyokumenPngPainter.BN_SUJIS * args.Env.KmW + Util_KyokumenPngPainter.BN_BRD_R_W,
                Util_KyokumenPngPainter.BN_DANS * args.Env.KmH + Util_KyokumenPngPainter.BN_BRD_B_W
                );


            Util_KyokumenPngPainter.Paint(Graphics.FromImage(bmp), args);


            //args.Env.OutFolder + args.OutFile, "bmp.Save"
            string filepath = args.Env.OutFolder + appendFilepath + args.OutFile;

            // フォルダーが無ければ、作る必要があります。
            {
                DirectoryInfo dirInfo = Directory.GetParent(filepath);
                if (!Directory.Exists(dirInfo.FullName))
                {
                    Directory.CreateDirectory(dirInfo.FullName);
                }
            }

            bmp.Save(filepath);

            return(successful);
        }