在线等!~在线给分了。

时间:2022-09-30 19:05:00
汽车与墙撞后,汽车发生改变,鼠标移动到哪儿,汽车就到哪儿,界面上有些静态物体,如果移动时,汽车与静态物体发生碰撞,那么汽车发生改变,或者静态物体发生改变。
还有一个问题,鼠标滚轴向上滚动时,汽车向右旋转10°,向下滚动时,汽车向左旋转10°。

34 个解决方案

#1


帮顶

#2


游戏?看着挺有意思,期待高手回答

#3


满有意思的,帮顶

#4


鼠标滚轴向上滚动时,汽车向右旋转10°,向下滚动时,汽车向左旋转10°。
--------------------------------------------------------------
在鼠标事件里捕获。判断鼠标的动作是滚动后,给出相应动作。

鼠标移动到哪儿,汽车就到哪儿,
---------------------------
鼠标事件里的第二个参数e.X,e.Y就是鼠标位置,把汽车移到该位置,就OK。

界面上有些静态物体,如果移动时,汽车与静态物体发生碰撞,那么汽车发生改变,或者静态物体发生改变。 
-------------------------------------------------------------------------------------
在汽车的move事件里判断边界是否与其他控件边界相交,也就是判断汽车控件里的任何一点在其他静态物体的控件里了。若相交,那么给汽车另一个状态。

#5


撞车模拟,有创意,帮顶

#6


汽车旋转不好实现啊。兄弟,可能需要用GDI画图了。比较麻烦。

#7


引用 3 楼 kbryant 的回复:
满有意思的,帮顶

#8


先用代码具体实现一下:汽车与静态物体发生碰撞,那么汽车发生改变,或者静态物体发生改变。

#9


UP

#10


引用 8 楼 carl5chao 的回复:
先用代码具体实现一下:汽车与静态物体发生碰撞,那么汽车发生改变,或者静态物体发生改变。


假设你已经使你的汽车控件在移动了(你可以用Timer实现控件的移动)。(这里用Button代替你的汽车)
你随便建个项目,放个FORM,FORM里在水平的位置放两个BUTTON,默认设置就行了。然后在BUTTON添加一个MOVE事件。
然后用下面的代码替换你的FORM1.CS里的代码。就可以了。

这代码效果是,如果button1撞到button2后就回退,没撞到就一直前进。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        bool isback = false;  //是否碰到button2的标志
        Timer timer1 = new Timer();

        public Form1()
        {
            InitializeComponent();

            timer1.Interval = 1000;
            timer1.Enabled = true;
            timer1.Tick += new EventHandler(timer1_Tick);
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (isback)
                this.button1.Left -= 10;
            else
                this.button1.Left += 10;
        }

        private void button1_Move(object sender, EventArgs e)
        {
            if (button1.Left + button1.Width > button2.Left)
            {
                isback = true;
            }
        }
    }
}

#11


友情帮顶!

#12


帮顶~~~~~

#13


 private void button1_Move(object sender, EventArgs e)
        {
            if (button1.Left + button1.Width > button2.Left)
            {
                isback = true;
            }
        }

个人认为button1.Left + button1.Width == button2.Left 就应该算是撞上了
难道需要产生形变?
如果有形变的那么按钮的大小是否也应该变?
这时候就有更复杂的东西需要考虑了 呵呵

#14


在滚轮滚动时候 btn的移动方向也有改动 
反正无聊 我来帮你实现实现 嘿嘿
关键问题是 汽车的速度?

#15


13楼要注意计算机模拟与现实的区别。你自己搞个边界相等的状态出来看看?

#16


友情帮顶

#17


说说线路问题

汽车与墙撞后,汽车发生改变,
-------------------------
和光线折射路线差不多,入射角等于折射角,有公式,你可以查查物理书


界面上有些静态物体,如果移动时,汽车与静态物体发生碰撞,那么汽车发生改变,或者静态物体发生改变。
---------------------------------------
这个两者都会改变,而且遵守动量守恒定律,速度,方向都会改变,线路角度依然类似光线折射

#18


深切关注~~~~~

#19


顶起,顺便问下,汽车是外形改变还是路径改变?

#20


帮你友情UP下吧

#21


外形改变,撞车了嘛,所以要改变

#22



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace car
{
    public partial class Form1 : Form
    {
        bool isback = false;  //是否碰到button2的标志
        Timer timer1 = new Timer();

        public Form1()
        {
            InitializeComponent();
            timer1.Disposed += new EventHandler(timer1_Disposed);
            timer1.Interval = 1000;
            timer1.Enabled = true;
            timer1.Tick += new EventHandler(timer1_Tick);
            this.MouseWheel += new MouseEventHandler(Form1_MouseWheel);
        }

        void timer1_Disposed(object sender, EventArgs e)
        {
            MessageBox.Show("win");
        }

        void Form1_MouseWheel(object sender, MouseEventArgs e)
        {
            if (e.Delta == 120)
            {
                int temp1 = up;
                up = temp1 + 2;
                int temp2 = down;
                down = temp2 + 2;
            }
            else
            {
                int temp1 = up;
                up = temp1 - 2;
                int temp2 = down;
                down = temp2 - 2;
            }

        }


        int up = 0;
        int down = 0;
        private void timer1_Tick(object sender, EventArgs e)
        {
            if (isback)
            {
                this.button1.Left -= 10;
                this.button1.Top += up;
            }
            else
            {
                this.button1.Left += 10;
                this.button1.Top += down;
            }
        }


        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            MessageBox.Show("lose!");
            return;
        }

        private void button1_Move_1(object sender, EventArgs e)
        {
            if (track())
            {
                isback = true;
                textBox1.Text = "sos";
            }
        }
        bool track()
        {
            Rectangle rec = button2.Bounds;
            Point pt = new Point(button1.Right, button1.Top);
            Point pt2 = new Point(button1.Right, button1.Top - button1.Width);
            if (rec.Contains(pt))
            {
                return true;
            }
            else if (rec.Contains(pt2))
            {
                return true;
            }
            else
            {
                return false;
            }

        }


    }
}

基本套用8楼的代码
加了两个变量
同时加了一个方法检测是否两个按钮牛有接触
使用了矩形的Contains()
通过MouseWheel 事件来控制移动的方向的偏转

#23


基本上就是这个思路吧
楼主自己设置下移动的速度
包括timer的计算速度
同时位移坐标 以及碰撞的算法

#24


引用 6 楼 whChina 的回复:
汽车旋转不好实现啊。兄弟,可能需要用GDI画图了。比较麻烦。

何必要引用GDI ?
改变控件上图片的位置就可以了撒
还有就是 10°的角度这个计算 应该是看你的控件大小以及移动的位移来确定的

#25


up

#26


学习..
帮顶..
收藏..

#27


顶。。。。。。。。。

#28


ding 

#29


hehe

#30


这个东西你自己写?....

我觉得套用某个物理模型更实际一点

#31


#32


路过,飘过,看过,顶过...

#33


不信遇不到高人

#34


有点意思

#1


帮顶

#2


游戏?看着挺有意思,期待高手回答

#3


满有意思的,帮顶

#4


鼠标滚轴向上滚动时,汽车向右旋转10°,向下滚动时,汽车向左旋转10°。
--------------------------------------------------------------
在鼠标事件里捕获。判断鼠标的动作是滚动后,给出相应动作。

鼠标移动到哪儿,汽车就到哪儿,
---------------------------
鼠标事件里的第二个参数e.X,e.Y就是鼠标位置,把汽车移到该位置,就OK。

界面上有些静态物体,如果移动时,汽车与静态物体发生碰撞,那么汽车发生改变,或者静态物体发生改变。 
-------------------------------------------------------------------------------------
在汽车的move事件里判断边界是否与其他控件边界相交,也就是判断汽车控件里的任何一点在其他静态物体的控件里了。若相交,那么给汽车另一个状态。

#5


撞车模拟,有创意,帮顶

#6


汽车旋转不好实现啊。兄弟,可能需要用GDI画图了。比较麻烦。

#7


引用 3 楼 kbryant 的回复:
满有意思的,帮顶

#8


先用代码具体实现一下:汽车与静态物体发生碰撞,那么汽车发生改变,或者静态物体发生改变。

#9


UP

#10


引用 8 楼 carl5chao 的回复:
先用代码具体实现一下:汽车与静态物体发生碰撞,那么汽车发生改变,或者静态物体发生改变。


假设你已经使你的汽车控件在移动了(你可以用Timer实现控件的移动)。(这里用Button代替你的汽车)
你随便建个项目,放个FORM,FORM里在水平的位置放两个BUTTON,默认设置就行了。然后在BUTTON添加一个MOVE事件。
然后用下面的代码替换你的FORM1.CS里的代码。就可以了。

这代码效果是,如果button1撞到button2后就回退,没撞到就一直前进。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        bool isback = false;  //是否碰到button2的标志
        Timer timer1 = new Timer();

        public Form1()
        {
            InitializeComponent();

            timer1.Interval = 1000;
            timer1.Enabled = true;
            timer1.Tick += new EventHandler(timer1_Tick);
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (isback)
                this.button1.Left -= 10;
            else
                this.button1.Left += 10;
        }

        private void button1_Move(object sender, EventArgs e)
        {
            if (button1.Left + button1.Width > button2.Left)
            {
                isback = true;
            }
        }
    }
}

#11


友情帮顶!

#12


帮顶~~~~~

#13


 private void button1_Move(object sender, EventArgs e)
        {
            if (button1.Left + button1.Width > button2.Left)
            {
                isback = true;
            }
        }

个人认为button1.Left + button1.Width == button2.Left 就应该算是撞上了
难道需要产生形变?
如果有形变的那么按钮的大小是否也应该变?
这时候就有更复杂的东西需要考虑了 呵呵

#14


在滚轮滚动时候 btn的移动方向也有改动 
反正无聊 我来帮你实现实现 嘿嘿
关键问题是 汽车的速度?

#15


13楼要注意计算机模拟与现实的区别。你自己搞个边界相等的状态出来看看?

#16


友情帮顶

#17


说说线路问题

汽车与墙撞后,汽车发生改变,
-------------------------
和光线折射路线差不多,入射角等于折射角,有公式,你可以查查物理书


界面上有些静态物体,如果移动时,汽车与静态物体发生碰撞,那么汽车发生改变,或者静态物体发生改变。
---------------------------------------
这个两者都会改变,而且遵守动量守恒定律,速度,方向都会改变,线路角度依然类似光线折射

#18


深切关注~~~~~

#19


顶起,顺便问下,汽车是外形改变还是路径改变?

#20


帮你友情UP下吧

#21


外形改变,撞车了嘛,所以要改变

#22



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace car
{
    public partial class Form1 : Form
    {
        bool isback = false;  //是否碰到button2的标志
        Timer timer1 = new Timer();

        public Form1()
        {
            InitializeComponent();
            timer1.Disposed += new EventHandler(timer1_Disposed);
            timer1.Interval = 1000;
            timer1.Enabled = true;
            timer1.Tick += new EventHandler(timer1_Tick);
            this.MouseWheel += new MouseEventHandler(Form1_MouseWheel);
        }

        void timer1_Disposed(object sender, EventArgs e)
        {
            MessageBox.Show("win");
        }

        void Form1_MouseWheel(object sender, MouseEventArgs e)
        {
            if (e.Delta == 120)
            {
                int temp1 = up;
                up = temp1 + 2;
                int temp2 = down;
                down = temp2 + 2;
            }
            else
            {
                int temp1 = up;
                up = temp1 - 2;
                int temp2 = down;
                down = temp2 - 2;
            }

        }


        int up = 0;
        int down = 0;
        private void timer1_Tick(object sender, EventArgs e)
        {
            if (isback)
            {
                this.button1.Left -= 10;
                this.button1.Top += up;
            }
            else
            {
                this.button1.Left += 10;
                this.button1.Top += down;
            }
        }


        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            MessageBox.Show("lose!");
            return;
        }

        private void button1_Move_1(object sender, EventArgs e)
        {
            if (track())
            {
                isback = true;
                textBox1.Text = "sos";
            }
        }
        bool track()
        {
            Rectangle rec = button2.Bounds;
            Point pt = new Point(button1.Right, button1.Top);
            Point pt2 = new Point(button1.Right, button1.Top - button1.Width);
            if (rec.Contains(pt))
            {
                return true;
            }
            else if (rec.Contains(pt2))
            {
                return true;
            }
            else
            {
                return false;
            }

        }


    }
}

基本套用8楼的代码
加了两个变量
同时加了一个方法检测是否两个按钮牛有接触
使用了矩形的Contains()
通过MouseWheel 事件来控制移动的方向的偏转

#23


基本上就是这个思路吧
楼主自己设置下移动的速度
包括timer的计算速度
同时位移坐标 以及碰撞的算法

#24


引用 6 楼 whChina 的回复:
汽车旋转不好实现啊。兄弟,可能需要用GDI画图了。比较麻烦。

何必要引用GDI ?
改变控件上图片的位置就可以了撒
还有就是 10°的角度这个计算 应该是看你的控件大小以及移动的位移来确定的

#25


up

#26


学习..
帮顶..
收藏..

#27


顶。。。。。。。。。

#28


ding 

#29


hehe

#30


这个东西你自己写?....

我觉得套用某个物理模型更实际一点

#31


#32


路过,飘过,看过,顶过...

#33


不信遇不到高人

#34


有点意思