Я пишу игру в понг, мне нужна помощь с логикой игры. Моя проблема в том, что у меня возникли проблемы при определении того, находится ли мяч за пределами карты или нет, это приводит к тому, что мяч просто выходит за пределы игровой площадки, и счет не засчитывается. В настоящее время это работает так:
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, по какой-то причине она не работает. :(
stepScore
. Мяч покидает игровое поле через верхний или нижний край? - person bheklilr   schedule 11.08.2013