Я работаю над заданием для универа, где мне нужно создать 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 - координаты шара, а brickX и brickY - координатыверхний левый угол прямоугольного кирпича (ширина 50 пикселей, высота 10 пикселей).
Можно ли как-то упростить вышеприведенные операторы if? Если я смогу сделать их прощеЯ знаю, что будет гораздо проще добавить в «буфер» (который должен быть только 5 пикселей по обе стороны от контура кирпича », чтобы учесть изменение положения шара).
Если требуется дальнейшее уточнение, пожалуйста, спросите - я пишу этот вопрос в 5:12 утра, так что я знаю, что я могу быть немного неясным.