C# 使用一个timer实现转圈圈屏保

使用if语句实现一个timer转圈圈:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing.Drawing2D;  //命名空间

namespace 一个timer转圈圈1  //名字
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)  //窗体加载事件
        {
            this.BackColor = Color.Pink;  //改变窗体颜色为粉色
            this.FormBorderStyle = FormBorderStyle.None;  //设置窗体边框为空
            this.Width = 300;  //设置窗体宽度
            this.Height = 300;  //设置窗体高度
            this.Location = new Point(0, 0);  //设置窗体左上角定位
            this.Opacity = (0.8);  //设置窗体透明度
            timer1.Start();  //启动秒表
            GraphicsPath path = new GraphicsPath();  //创建一个新的类 需要定义圆形使用
            path.AddEllipse(0,0,this.Width,this.Height);  
                                   //定义窗体的形状为椭圆但定义其宽高为窗体宽高就是圆形
            this.Region = new Region(path);   //给这个类创建新的对象
        }
        int x = 3;  //创建一个x的值
        int y = 3;  //创建一个y的值
        private void timer1_Tick(object sender, EventArgs e) //每当时间间隔后发生
        { 
            this.Left += x;  //窗体的left随时间间隔后增加x距离  //1
            this.Top += y;  //窗体的top随时间间隔后增加y距离
            if (x>0&&y>0)  //使用if循环 当x和y的值都大于零则执行
            {
                if (this.Top+this.Height>=Screen.PrimaryScreen.WorkingArea.Height)
                //当x和y都大于零后 若符合窗体的top加上其窗体的高度大于等于其显示区的高度则执行此条件
                { 
                    x = 5;  //left增加5    
                    y = -5;  //top减少5
                }//而此时x>0 y<0;则往下寻找符合的if

                if (this.Left+this.Width>=Screen.PrimaryScreen.WorkingArea.Width)
                //当窗体的left加上窗体的宽度大于等于其显示区的宽度 且前一个x y都大于零则执行
                {
                    y = -5;  //left减5  
                    x = -5;  //top减5
                }
                //而此时的值都小于零 则往下寻找x<0&&y<0条件
            }


            if (x>0&&y<0) 
                //当x>0&&y<0则执行下列可能
            {
                if (this.Top<=0)  //如果窗体top小于等于0时则执行
                {
                    x = 5;  //此时left增加5  
                    y = 5;  //此时top增加5
                }
                //因为此时x y都大于零则寻找x>0&&y>0在上面  然后找到符合条件的if执行
                if (this.Left+this.Width>=Screen.PrimaryScreen.WorkingArea.Width) 
                 //当窗体的left加上窗体的宽度大于等于其显示区的宽度 则执行
                {
                    x = -5;  //此时left减少5  
                    y = -5;  //此时top减少5
                }
            }


            if (x<0&&y<0)  //如果if小于0 y小于0则往下寻找if执行
            {
                if (this.Top<=0)  //当窗体top小于等于零则执行
                {
                    x = -5;  //此时left减少5  
                    y = 5;  //此时top增加5
                }
                //这时呢x<0 y>5则寻找符合的if条件执行
               if(this.Left<=0)  //当窗体left小于等于零则执行
                 {
                   x = 5; //此时left增加5
                   y = -5; //此时top减少五  往右上方移动
                 }
                //此时x>0 y<0则寻找符合的if条件执行
             }


            if (x<0&&y>0)  //当x<0且y>0时则往下寻找if执行
            {
                if (this.Top+this.Height>=Screen.PrimaryScreen.WorkingArea.Height) 
                //当窗体的top和窗体的高度大于等于其显示区域的高度时执行
                {
                    x = -5; //此时left减少5  //6
                    y = -5;  //此时top减少5
                }
                //此时则寻找x<0&&y<0条件
                if (this.Left<=0)
                //当窗体的left小于等于零则执行
                {
                    x = 5;  //此时left增加5  //8
                    y = 5;  //此时top增加5
                }
            }
        }

    }
}

至于判断条件值每次都大于 因为小于会有点不严谨 

然后之前存在运动跑出去的问题 因为条件没有写全  每一个x与y的取值条件有两种碰撞可能  一共八种判断条件

其实理解四种x y取值判断   每一种又有两种碰撞可能  所以具备八种判断条件

入坑不久 后面是与小伙伴讨论出来的 可能有更简单的方法 !代码部分可能会有点小问题 总体是对的  问题完全是因为自己打字 有问题!咳咳~~~欢迎指正!

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值