Я работаю над заданием для университета, где мне нужно создать игру Breakout в Visual Studio 2010 с использованием C# Win Forms. На данный момент я концентрируюсь на том, чтобы разрушить только один кирпич, поэтому у меня есть механика, прежде чем расширять ее.
Чтобы уточнить мою текущую программу: я использую поле изображения в качестве графического объекта и таймер для создания эффекта анимации. Мяч может пропускать в каждом кадре от 1 до 10 пикселей — это часть создания случайного начального вектора для мяча.
Это прекрасно работает до тех пор, пока не нужно проверить, «попал» ли мяч в кирпич, который я нарисовал. У меня есть оператор if, который проверяет, находится ли мяч в любой из координат на поле изображения, которое соответствует контуру кирпича. Я знаю, что с логикой все в порядке, потому что иногда она работает. Однако из-за различий в «прыжках» положения мяча мне нужно добавить буферную область +/- 5 пикселей к моему оператору if.
Вот здесь и возникает проблема, потому что мое 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;
}
Для пояснения: x и y — координаты шара, а кирпич X и кирпич Y — координаты верхнего левого угла прямоугольного кирпича (который имеет ширину 50 пикселей и высоту 10 пикселей).
Есть ли способ упростить приведенные выше операторы if? Если я смогу сделать их проще, я знаю, что будет намного проще добавить в "буфер" (который должен быть только 5 пикселей с каждой стороны контура кирпича», чтобы мяч мог менять положение).
Если нужны дополнительные разъяснения, спрашивайте — я пишу этот вопрос в 5:12 утра, поэтому знаю, что могу быть немного неясным.