将球困在棋盘上(乒乓球比赛)

时间:2016-04-15 04:43:22

标签: c# winforms

这场比赛还没有完成,我已经创造了球击中棋盘的部分,但是在比赛中存在问题,那就是球在板上。为了更好地理解和理解我已经在下面附上了一张图片,请仔细观察并了解你对这个错误的看法。

   public partial class PingPong : Form
{
    public PingPong()
    {
        InitializeComponent();
        timer1.Enabled = true;
        timer1.Interval = 30;
    }


    int mx = 5;
    int my = 5;
    private void timer1_Tick(object sender, EventArgs e)
    {

        if (ball.Bounds.IntersectsWith(boardCenter.Bounds))
        {
            mx = mx * -1;
            my = my * 1;
        }
        else if (ball.Location.Y >= this.ClientSize.Height - ball.Height)
        {
            mx = mx * 1;
            my = my * -1;
        }
        else if (ball.Location.Y <= 0)
        {
            mx = mx * 1;
            my = my * -1;
        }

        else if (ball.Location.X >= this.ClientSize.Width - ball.Width)
        {
            mx = mx * -1;
            my = my * 1;
        }


        ball.Location = new Point(ball.Location.X + mx, ball.Location.Y + my);

    }

    private void PingPong_KeyDown(object sender, KeyEventArgs e)
    {

        if (e.KeyCode == Keys.Up)
        {
            board.Location = new Point(board.Location.X, board.Location.Y - 4);

        }
        else if (e.KeyCode == Keys.Down)
        {
            board.Location = new Point(board.Location.X, board.Location.Y + 4);
        }

    }

}

enter image description here

1 个答案:

答案 0 :(得分:0)

在我看来(根据您提供的视频)您的逻辑实际上是正确的,问题似乎是球从后面击中了板,因此在窗口的左侧之间快速计算碰撞和董事会的背面。

您应修改代码,以便在与电路板相同的X位置计算与窗口左侧的碰撞。例如,如果棋盘X的位置从屏幕的左侧固定在20,那么球与球的左侧之间的碰撞就会达到20,这样球就永远无法到达后面。董事会。 (同样的原则适用于屏幕右侧和第二块板。)