Sal*_*ara 4 c# if-statement winforms
我正在为uni工作,我必须使用C#Win Forms在Visual Studio 2010中创建一个Breakout游戏.目前,我正专注于只有一块砖被摧毁,所以我在扩展它之前先让机械装置停下来.
澄清我当前的程序:我使用图片框作为Graphics对象和计时器来创建动画效果.球可以在每个帧上跳过1到10个像素 - 这是为球创建随机起始矢量的一部分.
这可以正常工作,直到检查球是否"击中"我绘制的砖块.我所拥有的是一个if语句,用于检查球是否位于图片框中与砖块轮廓相对应的任何坐标上.我知道逻辑很好,因为它在某些时候有效.但是,由于球的位置"跳跃"的变化,我需要在if语句中添加+/- 5像素的缓冲区.
这就是出现问题的地方,因为我的if声明(两个,真的)真的很复杂,因为它是:
// Checks if ball hits left side or top of brick
if (((x >= brickX) && (x <= (brickX + 50)) && (y == brickY)) ||
((y >= brickY) && (y <= (brickY + 20)) && (x == brickX)))
{
brickHit = true;
}
// Check if ball hits right side or bottom of brick
else if ((((x >= brickX) && (x <= brickX + 50)) && (y == (brickY + 20))) ||
(((y >= brickY) && (y <= brickY + 20)) && (x == brickX + 50)))
{
brickHit = true;
}
Run Code Online (Sandbox Code Playgroud)
为了澄清:x和y是球的坐标,brickX和brickY是矩形砖左上角的坐标(宽50像素,高10像素).
有没有办法简化上面的if语句?如果我可以让它们变得更简单,我知道在'缓冲区'中添加它会更容易(只需要在砖块轮廓两侧各有5个像素,以允许球的位置变化).
如果需要进一步澄清,请问 - 我正在上午5:12写这个问题所以我知道我可能有点不清楚.
有一种方法你可以简化这个(我可能会误解你的规范),但是你可以在砖块的边界之外做一个Rectangle并检查你的x,y点的Contains.
Rectangle rec = new Rectangle(brickX, brickY, 50, 20);
rec.Offset(-5, -5);
rec.Inflate(10, 10);
if (rec.Contains(new Point(x,y))
{
brickHit = true;
}
Run Code Online (Sandbox Code Playgroud)