使用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取值判断 每一种又有两种碰撞可能 所以具备八种判断条件
入坑不久 后面是与小伙伴讨论出来的 可能有更简单的方法 !代码部分可能会有点小问题 总体是对的 问题完全是因为自己打字 有问题!咳咳~~~欢迎指正!