C#中简单的乒乓球游戏

时间:2013-12-24 19:52:37

标签: c# if-statement motion

Ping Pong

嗨,我正在制作一款名为“乒乓球”的游戏。我为球的运动做了一个算法。现在,我希望每当球接触或与球员碰撞时(如上图所示),它应该反弹,就像它碰到边缘时弹跳一样。有什么建议??

对于参考。这是我的代码到现在的片段......

private void Ball()
        {
            int x = 1, y = 1, dx = 8, dy = 8;
            System.Drawing.Point p;

            while (true)
            {
                p = player.Location;

                /*
                           here's where two or more if statements are required
                */

                if (x < 1)
                    dx = dx + 6;

                if (x >= 800 - ball1.Width)
                    dx = dx - 6;

                if (y < 0)
                    dy = dy + 6;

                if (y > 450 - ball1.Height)
                    dy = dy - 6;

                if (x == -3 && y == -2)
                    dy = dy - 6;

                x = x + dx;
                y = y + dy;

                ball1.Invoke
                (
                    (MethodInvoker) delegate {   ball1.Location = new System.Drawing.Point(x,y);   }
                );

                Thread.Sleep(50);
            } 

1 个答案:

答案 0 :(得分:0)

你不仅需要玩家的位置,还需要它的界限。那你有几个选择。最简单的就是检查

if (x - ball1.Width > player.Left && x - ball1.Width < player.Right &&
    y - ball1.Height > player.Top && y - ball1.Height < player.Bottom)

如果是,则发生碰撞,并且必须反弹。

请注意,在这个简化的计算中,您实际上将球视为矩形而不是圆形。不过,你已经开始使用绑定检测了,所以我打赌你不会介意。

话虽如此,我建议你在评论中提出@ drew_w的建议。这将变得丑陋并且很难维持得非常快。找到面向对象的解决方案。 (如果没有别的,将getBoundingBox放在所有可绘制对象上,这样就可以制作一个检查碰撞的引擎。)