コード例 #1
0
ファイル: Form1.cs プロジェクト: Hagser/csharp
        private void Form1_Load(object sender, EventArgs e)
        {
            bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
            g = Graphics.FromImage(bmp); g.FillRectangle(Brushes.Black, new Rectangle(0, 0, pictureBox1.Width, pictureBox1.Height));
            
            
            
            Timer tc = new Timer();
            tc.Interval = 500;
            bool darkstyle=false;
            int w, h = 0;
            tc.Tick += (a, b) =>
            {
                w = pictureBox1.Width;
                h = pictureBox1.Height;
                int hf = int.Parse(Math.Floor(h / 2d).ToString());
                int wf = int.Parse(Math.Floor(w / 2d).ToString());
                int s = int.Parse(Math.Floor(Math.Min(wf, hf) / 2d).ToString());

                DateTime dt = DateTime.Now;
                darkstyle = dt.Hour > 18 || dt.Hour < 5;

                g.FillRectangle(darkstyle ? Brushes.Black : Brushes.Silver, new Rectangle(0, 0, w, h));
                Pen pen = new Pen(darkstyle ? Brushes.Gray : Brushes.Gray) { Width = s / 60 };

                g.DrawEllipse(pen, new Rectangle(wf-s, hf-s, s*2, s*2));

                pen = new Pen(darkstyle ? Brushes.Silver : Brushes.Black) { Width = s / 60 };
                for (double r = 0; r < (2 * Math.PI); r = r + (Math.PI / 30))
                {

                    var mx = cosx(r, .99,s,wf);
                    var my = sinx(r, .99,s,hf);                    

                    var x = cosx(r, 1.01,s,wf);
                    var y = sinx(r, 1.01,s,hf);
                    g.DrawLine(pen, new Point(mx, my), new Point(x, y));
                    
                }
                pen = new Pen(darkstyle ? Brushes.Silver : Brushes.Black) { Width = s / 20 };
                for (double r = 0; r < (2 * Math.PI); r = r + (Math.PI / 6))
                {
                    var mx = cosx(r, .9, s, wf);
                    var my = sinx(r, .9, s, hf);

                    var x = cosx(r, 1.1, s, wf);
                    var y = sinx(r, 1.1, s, hf);
                    g.DrawLine(pen, new Point(mx, my), new Point(x, y));

                }

                var ho = dt.Hour;
                if (ho > 12)
                    ho = ho - 12;
                var mi = dt.Minute;
                var se = dt.Second;
                var mse = dt.Millisecond;

                //Draw hours arm
		        var rho = (((Math.PI / 6) * ho) - ((Math.PI / 6) * 15)) + (mi/120);		    
                var hx = cosx(rho,.7,s,wf);
		        var hy = sinx(rho,.7,s,hf);
		        pen = new Pen(darkstyle ? Brushes.DarkGreen : Brushes.Green) { Width = s / 20 };
                g.DrawLine(pen, new Point(wf, hf), new Point(hx, hy));


                //Draw minutes arm
                var rmi = (((Math.PI / 30) * mi) - ((Math.PI / 30) * 15)) + (se / 720);
                var mix = cosx(rmi, .9, s, wf);
                var miy = sinx(rmi, .9, s, hf);
                pen = new Pen(darkstyle ? Brushes.DarkBlue : Brushes.Blue) { Width = s / 40 };
                g.DrawLine(pen, new Point(wf, hf), new Point(mix, miy));


                //Draw seconds arm
                var rse = ((Math.PI / 30) * se) - ((Math.PI / 30) * 15);//+ (mse/10000);
                var sx = cosx(rse, .95, s, wf);
                var sy = sinx(rse, .95, s, hf);
                var ssx = cosx(rse, -.25,s,wf);
                var ssy = sinx(rse, -.25,s,hf);
                pen = new Pen(darkstyle ? Brushes.Gray : Brushes.Black) { Width = s / 80 };
                g.DrawLine(pen, new Point(ssx, ssy), new Point(sx, sy));


                //Draw larger gray ring
                pen = new Pen(darkstyle ? Brushes.Gray : Brushes.Black) { Width = s / 80 };
                Rectangle rect = new Rectangle(wf - (s / 15), hf - (s / 15), (s / 15) * 2, (s / 15) * 2);
                g.DrawEllipse(pen, rect);
                g.FillEllipse(darkstyle ? Brushes.Silver : Brushes.Gray, rect);

                //Draw smaller gray ring
                pen = new Pen(darkstyle ? Brushes.Gray : Brushes.Black) { Width = s / 80 };
                Rectangle rect2 = new Rectangle(wf - (s / 55), hf - (s / 55), (s / 55) * 2, (s / 55) * 2);
                g.DrawEllipse(pen, rect2);
                g.FillEllipse(Brushes.Black, rect2);
                
                pictureBox1.Image = bmp;
            };
            tc.Start();
            return;
            
            Random rnd = new Random((new Random()).Next(65000));
            for (int i = 0; i < 50; i++)
            {
                int rx = (rnd.Next(speed * -1, speed));
                int ry = (rnd.Next(speed * -1, speed));
                Color color = Color.FromArgb(rnd.Next(50, 255), rnd.Next(50, 255), rnd.Next(50, 255));
                Ball ball = new Ball()
                    {
                        x=rnd.Next(0,pictureBox1.Width),
                        y=rnd.Next(0,pictureBox1.Height),
                        brush = new SolidBrush(color),
                        mx = rx != 0 ? rx : speed,
                        my = ry != 0 ? ry : speed*-1,
                        size=rnd.Next(2,20)
                    };
                balls.Add(ball);
                ball.isx = ball.x;
                ball.isy = ball.y;
                ball.polygon = getPolyGon(ball);
                //g.FillPie(ball.brush, new Rectangle(ball.x, ball.y, ball.size, ball.size), 0, 360);
                //g.FillPolygon(ball.brush, getPolyGon(ball));
            }
            Ball ball1 = new Ball() {
                x = rnd.Next(0, pictureBox1.Width),
                y = rnd.Next(0, pictureBox1.Height),
                brush = new SolidBrush(Color.White),
                size=100
            };
            g.DrawPolygon(Pens.White, getPolyGon(ball1));
            //
            //g.DrawString(lista.Count.ToString(), DefaultFont, Brushes.Blue, new Point(m - int.Parse(Math.Floor(DefaultFont.GetHeight()).ToString()), m - int.Parse(Math.Floor(DefaultFont.GetHeight()).ToString())));

            pictureBox1.Image = bmp;
            return;

            Timer t = new Timer();
            t.Interval = 5;
            t.Tick += (a, b) => {
                g.FillRectangle(Brushes.Black, new Rectangle(0, 0, pictureBox1.Width, pictureBox1.Height));

                if (line.Count > 0)
                {
                    foreach(List<Point> points in line)
                        g.FillPolygon(Brushes.White, points.ToArray());
                }
                if (tmpline.Count > 0)
                    g.DrawPolygon(Pens.Blue, tmpline.ToArray());

                g.Flush();
                List<Ball> remove = new List<Ball>();
                foreach (Ball ball in balls)
                {
                    
                    Point[] ps = ball.polygon;
                    if (ps.Where(p => p.Y < bmp.Height && p.X < bmp.Width && p.X > 0 && p.Y > 0 && (p.X + (ball.isx - ball.x)) > 0 && (p.Y + (ball.isy - ball.y)) > 0 && (p.X + (ball.isx - ball.x)) < bmp.Width && (p.Y + (ball.isy - ball.y)) < bmp.Height)
                        .Any(p => !bmp.GetPixel(p.X + (ball.isx - ball.x), p.Y + (ball.isy - ball.y)).Equals(ball.color))
                        )
                    {
                        g.DrawString("Jupp", DefaultFont, Brushes.YellowGreen, ball.x - 20, ball.y - 20);
                        ball.mx *= -1;
                        //ball.my *= -1;
                    }
                    else
                    {
                        if (ball.x <= 0 || ball.x + (ball.size / 2) >= pictureBox1.Width)
                        {
                            Color c = ball.color;
                            ball.color = Color.FromArgb(Math.Max(c.R - 1, 0), Math.Max(c.G - 1, 0), Math.Max(c.B - 1, 0));
                            ball.mx *= -1;
                        }

                        if (ball.y <= 0 || ball.y + (ball.size / 2) >= pictureBox1.Height)
                        {
                            Color c = ball.color;
                            ball.color = Color.FromArgb(Math.Max(c.R - 1, 0), Math.Max(c.G - 1, 0), Math.Max(c.B - 1, 0));
                            ball.my *= -1;
                        }
                    }
                    ball.x += ball.mx;
                    ball.y += ball.my;

                    g.FillPie(ball.brush, new Rectangle(ball.x, ball.y, ball.size, ball.size), 0, 360);
                    //g.FillPolygon(ball.brush, getPolyGon(ball));

                    Color c2 = (ball.brush as SolidBrush).Color;
                    if (c2.B < 10 || c2.R < 10 || c2.G < 10)
                        remove.Add(ball);

                }
                foreach (Ball ball in remove)
                    balls.Remove(ball);
                remove.Clear();


                this.Text = balls.Count.ToString();
                if (balls.Count == 0)
                    t.Stop();

                pictureBox1.Image = bmp;
            };
            t.Start();
        }
コード例 #2
0
ファイル: Form1.cs プロジェクト: Hagser/csharp
        private Point[] getPolyGon(Ball ball)
        {
            Dictionary<double, Point> dict = new Dictionary<double, Point>();
            
            List<Point> lista = new List<Point>();

            int s = ball.size / 2;
            for (double v = 0; v <= (2 * Math.PI); v = v + (Math.PI / 360))
            {
                double x = Math.Floor(Math.Cos(v) * s) + ball.x+s;
                double y = Math.Floor(Math.Sin(v) * s) + ball.y + s;

                int ix = int.Parse(x.ToString());
                int iy = int.Parse(y.ToString());
                Point p = new Point(ix, iy);
                if (!lista.Contains(p))
                    lista.Add(p);

            }
            return lista.ToArray();
        }