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; }
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)); }
/// <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); }