| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Реализовать крестики-нолики |
| Автор: Alexey91 20.5.2012, 10:22 |
| Здравствуйте! Знакомлюсь с паттернами. Прочитал про бизнес-логику, что она является функциональной логикой предметной области. Или иначе говоря переносит определенную предметную область в информационную систему. В паттерне MVC есть 3 элемента Модель - она реализует бизнес-логику Представление - то, как данные выглядят на дисплее Контроллер - для обработки внешних событий. Если на примере игры, камень-ножницы-бумага. В игре участвуют 2n игроков, ход игры по типу плей-офф (если 8 игроков, играют 2 пары по 4 игрока, затем 2 пары по 2 игрока, затем определяется финалист) То в данном случае, что куда относится: Модель - сам алгоритм игры (ножницы режут бумагу, камень тупит ножницы..) Представление - выводит на экран сопроводительные сообщения ("Вы выиграли", или "Вы проиграли", или "Ничья. Давайте еще") Контроллер - управляет всем ходом игры. Ввод количества игроков, затем в цикле определяет нужны пары игроков, запускает метод модели. Или в контроллере нужно только вбить количество игроков. А уже сам процесс игры (весь плейофф между игроками) находится в модели? |
| Автор: Alexey91 20.5.2012, 15:09 |
| magesi, спасибо за ответ! Я правильно понимаю, что в модели только правила игры. В данном случае пока я только вижу одну функцию, которая определяет "кто кого" Мне вот стало интересно, а если например игра более сложная? Типа дурака. Я правильно понимаю, что в модель пойдет например следующее: козыри бьют обычные карты; обычные карты высокого ранга бьют обычные карты низкого ранга; кто остался с картами тот проиграл; у кого карт больше n, тот карты из колоды не берет. А вот сама раздача карт, кто на кого ходит реализуется в контроллере? И как отделить представление от модели, и контроллера? Если приложение консольное, то нужно просто вывод на экран делать, а если с GUI, то там уже готовые MFC например, или QWindow |
| Автор: math64 21.5.2012, 12:49 |
| В случае карточной игры, нужны модель карты, колоды, раздатчика карт, игрока, ну и модель игры. В представлении игры будут картинки карт и рубашки и т. д. Контроллер управляет игрой, обрабатывая нажатия клавиш и движение мыши. В готовых GUI обычно контроллер сливается с представлением. В Qt, например, есть QAbstractItemModel и QTableView, а класса для контроллера нет, но есть делегаты, которые в MVC не предусмотрены. Можно считать контроллером слоты, но выделять их в отдельный класс довольно хлопотно. В случае сетевой игры, модель, представление и контроллер будут физически разделены на разных машинах - представление на машинах игроков, контроллер на сервере, а модель можно разместить в базе данных. Наверно, из такой идеологии и нужно исходить, определяя границы между моделью, представлением и контроллером, даже если всё это будет находиться на одной машине. |