開発環境
- OS: Windows 10 Pro
- IDE(統合開発環境): Visual Studio Community 2017
Head First C# ―頭とからだで覚えるC#の基本 (Andrew Stellman (著)、Jennifer Greene (著)、佐藤 嘉一 (監修, 監修)、木下 哲也 (翻訳)、オライリージャパン)の10章(コントロールとグラフィックス - 見栄えをよくする)、エクササイズ(p. 458)を取り組んでみる。
コード
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; using System.Drawing; namespace _3_Beehive_Simulator__controls_ { public class Renderer { private World world; private HiveForm hiveForm; private FieldForm fieldForm; private List<Flower> deadFlowers = new List<Flower>(); private List<Bee> retiredBees = new List<Bee>(); private Bitmap hiveInside; private Bitmap hiveOutside; private Bitmap flower; Bitmap[] beeAnimationLarg = { ResizeImage(Properties.Resources.Bee_animation_1, 40, 40), ResizeImage(Properties.Resources.Bee_animation_2, 40, 40), ResizeImage(Properties.Resources.Bee_animation_3, 40, 40), ResizeImage(Properties.Resources.Bee_animation_4, 40, 40), }; Bitmap[] beeAnimationSmall = { ResizeImage(Properties.Resources.Bee_animation_1, 20, 20), ResizeImage(Properties.Resources.Bee_animation_2, 20, 20), ResizeImage(Properties.Resources.Bee_animation_3, 20, 20), ResizeImage(Properties.Resources.Bee_animation_4, 20, 20), }; private int cell = 0; private int frame = 0; public Renderer(World world, HiveForm hiveForm, FieldForm fieldForm) { this.world = world; this.hiveForm = hiveForm; this.fieldForm = fieldForm; InitializeImage(); } public static Bitmap ResizeImage(Bitmap picture, int width, int height) { Bitmap resizedPicture = new Bitmap(width, height); using (Graphics graphics = Graphics.FromImage(resizedPicture)) { graphics.DrawImage(picture, 0, 0, width, height); } return resizedPicture; } private void InitializeImage() { hiveInside = ResizeImage( Properties.Resources.Hive__inside_, hiveForm.ClientRectangle.Width, hiveForm.ClientRectangle.Height); hiveOutside = ResizeImage( Properties.Resources.Hive__outside_, 85, 100); flower = ResizeImage( Properties.Resources.Flower, 75, 75); } public void AnimateBees() { frame++; if (frame >= 6) { frame = 0; } switch (frame) { case 0: cell = 0; break; case 1: cell = 1; break; case 2: cell = 2; break; case 3: cell = 3; break; case 4: cell = 2; break; case 5: cell = 1; break; default: cell = 0; break; } hiveForm.Invalidate(); fieldForm.Invalidate(); } public void PaintHive(Graphics g) { g.FillRectangle(Brushes.SkyBlue, hiveForm.ClientRectangle); g.DrawImageUnscaled(hiveInside, 0, 0); foreach (Bee bee in world.Bees) { if (bee.InsideHive) { g.DrawImageUnscaled( beeAnimationLarg[cell], bee.Location.X, bee.Location.Y); } } } public void PaintField(Graphics g) { g.FillRectangle(Brushes.SkyBlue, 0, 0, fieldForm.ClientSize.Width, fieldForm.ClientSize.Height / 2); g.FillRectangle(Brushes.Green, 0, fieldForm.ClientSize.Height / 2, fieldForm.ClientSize.Width, fieldForm.ClientSize.Height / 2); g.FillEllipse(Brushes.Yellow, new Rectangle(50, 20, 50, 50)); using (Pen pen = new Pen(Brushes.Brown)) { g.DrawLine(pen, fieldForm.ClientSize.Width - 100, 0, fieldForm.ClientSize.Width - 100, 20); } g.DrawImageUnscaled(hiveOutside, fieldForm.ClientSize.Width - 140, 20); foreach (Flower f in world.Flowers) { g.DrawImageUnscaled(flower, f.Location.X, f.Location.Y); } foreach (Bee bee in world.Bees) { if (!bee.InsideHive) { g.DrawImageUnscaled( beeAnimationLarg[cell], bee.Location.X, bee.Location.Y); } } } } }
0 コメント:
コメントを投稿