LINUX.ORG.RU

Правильно ли я выбрал паттерн

 


0

1

Хочу воспользоваться паттерном состояние. У меня есть стартовый экран в игре(написано как играть, рекорд очков), есть сама игра, есть состояние gameOver из которого можно снова начать играть.

Но я все это сделал без паттернов. И возникает проблема в методе gameOver - в этом методе я удаляю все объекты, и вызываю метод newGame в котором создаю их заново. Проблема в том что в этот момент игра падала(так как происходило обращение к объектам которые я удалил), и мне пришлось метод gameOver вынести в самый конец цикла обновлений.

Чтоб избежать такой ситуации в будущем я хочу 1) применить паттерн состояние. 2) сделать метод changeState(State newState), в котором делать какие-то действия не сразу, а когда завершится кадр. То есть я в любом месте пишу changeState(State.GameOver); А в конце кадра. applyStateChange()

★★★

Примени паттерн Конечный Автомат.

hateyoufeel ★★★★★ ()

нифига не понятно, что у тебя за проблемы. Должно быть

game = new Game

override = function(){game = new Game}

внутри new Game инициализация объектов. А старые объекты загребутся GC

newquestion ()

Паттерн тут никаким боком, у тебя тупо ошибка - используются ресурсы там где они использоваться не должны, решается переписыванием без таких вещей но с нормальной архитектурой, или втыканием флагов

Deleted ()
Ответ на: комментарий от newquestion

game = new Game

Та нет, это функция такая. newGame. В которой я начинаю все заново. То есть главный объект бежит через препятствия. Проиграл. Вызываю gameOver, в нем показываю UI, есть кнопка начать заново. По кнопке вызывается метод newGame(), который старые препятствия удаляет, а новые создает. Но это сейчас так, а в изначальном варианте у меня в gameOver сразу вызывался newGame.

abs ★★★ ()

Тут видимо всего два состояния: игра активна и игра неактивна (ну может еще состояние ошибки), не стоит переусложнять, частая ошибка - попытка применить шаблоны, там где они не нужны.
Я бы не рекомендовал.

elijah_sd ()

Просто паттерн состояние не поможет, надо применить паттерн фабрика состояний, а менять состояние через медиатор. Ну и для предотсвращения обращения к удалённым объектам юзается абстрактный фасад, это стандартная практика.

Да, надеюсь объект игра у тебя синглтон? Если нет, то неудивительно, что падает.

anonymous ()

Но я все это сделал без паттернов

Проблема в том что в этот момент игра падала

вообще независящие друг от друга сущности. Просто кривые руки и недостаток опыта. Так бывает и вроде как ты уже нашёл решение, но зачем-то кинулся в муть..В этой мути единственный паттерн «делай вдоль» может помоч

MKuznetsov ★★★★★ ()
Ответ на: комментарий от elijah_sd

игра активна и игра неактивна

Ну так сейчас у меня для этого boolean pause. Проблема в том что может быть старт игры(показывается описание как играть) или геймовер. И в том и в том случае pause = false, этого нехватает.

abs ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.