我想用这段代码实现,一个点在一条直线上来回运动。
现在的情况是,点只走一遍就不走了,这是为什么呀。
------------------------------------------------
哪位高手,有更好的思路或者代码,粘出来吧,谢谢了。 
====================================================        //起始坐标
        int a = 10;
        int b = 10;
        //终止坐标
        int c = 140;
        int d = 140;        private void timer1_Tick(object sender, EventArgs e)
        {
            Graphics gp = CreateGraphics();
            if (a > 140 || b > 140)
            {
                if (c > 10 || d > 10) {
                    c -= 1;
                    d -= 1;
                    gp.DrawEllipse(Pens.Red, c, d, 1, 1);
                    gp.DrawEllipse(Pens.Blue, c+1, d+1, 1, 1);
                }
            }
            else {                a += 1;
                b += 1;
                gp.DrawEllipse(Pens.Blue, a, b, 1, 1);            }

解决方案 »

  1.   

    来回走一遍之后,a=141,b=141,c=10,d=10没有运行条件了。
      

  2.   

     //起始坐标
            int a = 10;
            int b = 10;
            //终止坐标
            int c = 140;
            int d = 140;        private void timer1_Tick(object sender, EventArgs e)
            {
                Graphics gp = CreateGraphics();
                if (a > 140 || b > 140)
                {
                    if (c > 10 || d > 10) {
                        c -= 1;
                        d -= 1;
                        gp.DrawEllipse(Pens.Red, c, d, 1, 1);
                        gp.DrawEllipse(Pens.Blue, c+1, d+1, 1, 1);
                    }
                }
                else {                a += 1;
                    b += 1;
                    gp.DrawEllipse(Pens.Blue, a, b, 1, 1);            }
    if(c<11||d<11)
    {
    int a = 10;
            int b = 10;
            //终止坐标
            int c = 140;
            int d = 140;
    }
      

  3.   

    if(c<11||d<11)
    {
    int a = 10;
            int b = 10;
            //终止坐标
            int c = 140;
            int d = 140;
    }
    这个加在 timer1_Tick()结尾括号里。我的代码貌似最后少了个}
      

  4.   

    start = 1
    到达c/d 点, start =0
    if(start = 1)
    {
      向c/d 移动
      if(到达结束点)
        start = 0;
    }
    else
    {
     向a/b 移动
      if(到达起点)
        start = 1;
    }
      

  5.   

    代码写的很混乱,逻辑很有问题首先,我认为,应该有两个Point变量存放起始点和终止点;然后有一个Point变量存放需要移动的点的坐标;移动前首先要计算两个点的连线的方程,而不是简单的把x,y坐标都+1,对于斜率为1的直线是没问题,其他斜率呢?然后给你个思路:1.首先确定移动初始点;
    2.确定你的增量(即确定以x坐标还是y坐标为基准,每次的增量是多少);
    3.计算直线方程;
    4.添加一个方向变量(bool即可)
    5.根据方向变量确定终点坐标判断是否到达,同时判断增量的正负;
    6.根据直线方程与增量计算出当前点坐标;画点;
      

  6.   

    LZ参考下这个代码private Point pt1=new Point(10,10); //起点坐标
            private Point pt2 = new Point(140, 140); //终点坐标        private int n = 0; //运动点离起点的距离
            private bool bDirect = true;//true为从起点向终点运行,false从终点向起点运行
            Point pt = new Point(0,0); //当前点
            private void timer1_Tick(object sender, EventArgs e)
            {
                int m =(int) Math.Pow(Math.Pow((pt2.X - pt1.X), 2) + Math.Pow((pt2.Y - pt1.Y), 2), 0.5);//总距离
                if (n == m)
                    bDirect = false;
                if (n == 0)
                    bDirect = true;            if (bDirect)
                    n++;
                else
                    n--;            
                Pen p1=new Pen(Color.Black);
                Pen p2=new Pen(Color.Red);
                Graphics g = this.CreateGraphics();
                            if (pt.X != 0 && pt.Y != 0)  //清除上次的运动点
                {
                    g.DrawEllipse(new Pen(this.BackColor) , pt.X - 2, pt.Y - 2, 4, 4); //清除上次的运动点
                }            g.DrawLine(p1, pt1, pt2);//画起点到终点的线
                pt.X = ((pt2.X - pt1.X) * n) / m + pt1.X;
                pt.Y = ((pt2.Y - pt1.Y)) * n / m + pt1.Y;            g.DrawEllipse(p2, pt.X - 2, pt.Y - 2, 4, 4); //画运动的点
                g.Dispose();
            }        private void button1_Click(object sender, EventArgs e)
            {
                timer1.Enabled = true;
            }