欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C#中气泡碰撞案例的实现

程序员文章站 2024-03-16 18:15:28
...

案例:气泡碰撞案例

一、制作气泡以前的准备工作

 private void Form1_Load(object sender, EventArgs e)
        {
            this.FormBorderStyle = FormBorderStyle.None;//先把窗体设置为无边框的样式
            this.Width = 200;//设置窗体的宽度为200
            this.Height = 200;//设置窗体的高度为200
            //以上两个可以用this.Size = new Size(200, 200);来表示
            this.Text = "气泡碰撞案例";//设置窗体的关联文本
            this.Opacity = 0.7;//设置窗体的不透明度为0.7相反就是窗体的透明度为0.3
            this.BackColor = Color.Blue;//设置窗体的颜色
            this.Location = new Point(0, 0);//设置窗体的初始位置既设置窗体离左端和顶端的距离
            //以下两个等同于上面这个代码
            //left表示设置或获取空间左边缘与容器左边缘之间的距离
            //top表示设置或获取空间上边缘与容器上边缘之间的距离
            //this.Left = 0;
            //this.Top = 0;

(1),把窗体的边框去掉,改为无边框样式

(2),去掉边框以后,设置窗体的宽和高

(3),设置窗体的关联文本和窗体的不透明度

(4),设置窗体的颜色还有窗体离左端和顶端的距离

二、接下来就是怎么画圆

 //怎么画圆
            //第二步;既然第一步需要那么就创造一个GraphicsPath值,就是实例化一个对象为path
            GraphicsPath path = new GraphicsPath();//其中的GraphicsPath本来没有,既然我们要用的话,那就必须引入这个类,才可以去访问这个类中的类成员
            //第三步;path是一个对象那么对象必然有属性,而这一步就是设置她的属性
            path.AddEllipse(0, 0, 200, 200);
            //第一步;设置或者获取与空间有关的窗口区域
            //region需要一个指定的GraphicsPath值,
            this.Region = new Region(path);

(画圆三部曲)

三、气泡设计好以后,最后就是气泡与容器壁的碰撞

(而我们都知道气泡与容器壁的碰撞是不确定的所以我们要考虑的全一点)

 timer1.Start();//打开计时器timer1
        }
        int x = 5;//int整形直接赋值x=5
        int y = 4;//同上y=4
        //x正数向右移动,负数向左移动
        //y正数向下移动,负数向上移动
        private void timer1_Tick(object sender, EventArgs e)
        {
            this.Left += x;//气泡在横向上每隔一段时间向左或者右移动x距离
            this.Top += y;//气泡在纵向上每隔一段时间向上或者下移动x距离
            if (this.Top + this.Height>= Screen.PrimaryScreen.Bounds.Height)//if语句后面没有分号不能加分号
                //上面这个是判断窗体上边缘加上窗体的高是否大于桌边(容器)的高
            {
                if (x > 0 && y > 0)
                {
                    x = 5;
                    y = -4;
                }
                if (x < 0 && y > 0)
                {
                    x = -5;
                    y = -4;
                }
            }
            if (this.Left + this.Width >= Screen.PrimaryScreen.Bounds.Width)
            //上面这个是判断窗体左边缘加上窗体的宽度是否大于桌边(容器)的宽度
            {
                if (x > 0 && y > 0)
                {
                    x = -5;
                    y = 4;
                }
                if (x > 0 && y < 0)
                {
                    x = -5;
                    y = -4;
                }
            }
            if (this.Left<= 0)
            //上面这个是判断窗体的左边缘是否接触到了容器壁
            {
                if (x < 0 && y < 0)
                {
                    x = 5;
                    y = -4;
                }
                if (x < 0 && y > 0)
                {
                    x = 5;
                    y = 4;
                }
            }
            if (this.Top<= 0)
            //上面这个是判断窗体的上边缘是否接触到了容器壁
            {
                if (x < 0 && y < 0)
                {
                    x = -5;
                    y = 4;
                }
                if (x > 0 && y < 0)
                {
                    x = 5;
                    y = 4;
                    //最后由于是个循环的,所以不需要停止计时器
                }
            }