Доброго времени суток! У меня возникла следующая ситуация. Пару лет занимался web-разработкой на различных CMS + Js, недавно на доработку попал проект на RoR, пришлось разбираться, параллельно решил углубиться в сам язык Ruby и прочесть пару книг, но теории без практики - это плохо. Решил сначала написать пару консольных программ но показалось скучно, после чего решил сделать мини игру - сапер, и тут встала проблема с организацией архитектуры и организации взаимодействия между классами. Вот примерное описание процесса игры:
1. Есть поле: 4x4, 5x5
2. Количество мин: 1/2/3
3. Вывод поля на экран
4. Если все пустые поля открыты, перейти к 7.
4. Ход игрока: (X;Y)
5. Если клетка пустая, перейти к п.3
6. Если в клетке мина, перейти к 7.
7. Вывести результат игры - win/lose.
Понимаю, что в реализации должно быть как минимум 2 класса. Первый должен отвечать за отображение меню и обработку исключений ввода не валидных данных. Второй за логику самой игры, обхода массива поля и т.д.
Вопрос:
Как правильно организовать точку входа в программу, связать между собой вызовы методов из различных классов, и что еще нужно учесть. Может кто то сталкивался с чем то подобным, или может посоветовать статью на данную тему, буду благодарен за любую помощь. Всем заранее спасибо.
перестаньте мыслить классами и все станет куда проще. На основе вашего списка выделите объекты, которые будут фигурировать в игре. Это будет:
- Клетка поля. У нее есть прямая связь с каждой из соседей и она знает есть на ней мина или нет. Так же для упрощения мы можем запихнуть в нее состояние мины (взорволась, обезврежена, необнаружена).
- Управляющая логика тоже должна где-то находиться. Назовем эту логику - контроллер. При указании координат клетки на поле, которую мы хотим нажать, мы должны отправлять этой клетке сообщение. Эта клетка уже в случае чего попросит соседние и так пойдет цепная реакция. В итоге все обязанности будут просто отслеживаться.
- Логика отображения. То есть что-то что берет текущее состояние игрового поля и будет заниматься его отображением на экран.