Игра в понг, определить, находится ли мяч за пределами игровой площадки

Я пишу игру в понг, мне нужна помощь с логикой игры. Моя проблема в том, что у меня возникли проблемы при определении того, находится ли мяч за пределами карты или нет, это приводит к тому, что мяч просто выходит за пределы игровой площадки, и счет не засчитывается. В настоящее время это работает так:

stepScore :: State -> State
stepScore s
  | s^.ball.pos.x <= 15 = resetGame $ score.right +~ 1 $ s
  | s^.ball.pos.x >= 585 = resetGame $ score.left +~ 1 $ s
  | otherwise = s

Причина констант в том, что размеры игры 600x400, а шар имеет ширину 15 пикселей и позиция находится в его ядре. resetGame работает так:

resetGame :: State -> State
resetGame s = ball.pos.y .~ 200 $ ball.pos.x .~ 300 $ state .~ Pause $ s

Но почему-то это не работает. Мяч по-прежнему выходит за пределы карты, и игра в основном сломана.

Итак, мой вопрос заключается в следующем; как я могу написать это, чтобы оно работало, в основном, чтобы игра сбрасывалась и счет давался каждому игроку, как и предполагалось, когда мяч находится за пределами поля? Полный исходный код находится здесь http://lpaste.net/91745, где указанный выше код определен в строке 107 для 114 и используется в строке 118.

Буду признателен за помощь, спасибо.

РЕДАКТИРОВАТЬ: я пробовал разные константы в stepScore, и проблема в stepScore, по какой-то причине она не работает. :(


person klrr    schedule 11.08.2013    source источник
comment
Я не так много использовал FRP, но похоже, что вы забываете также проверять свои границы по оси y в stepScore. Мяч покидает игровое поле через верхний или нижний край?   -  person bheklilr    schedule 11.08.2013
comment
@bheklilr Только через левую и правую стороны, верхний и нижний края проверяются на столкновение, и в соответствии с этим изменяется направление шаров.   -  person klrr    schedule 11.08.2013


Ответы (1)


Слепота кода... Я забыл перевести stepScore в состояние "Play".

person klrr    schedule 11.08.2013