![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Alexey91 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 195 Регистрация: 18.9.2008 Репутация: нет Всего: нет |
Здравствуйте!
Знакомлюсь с паттернами. Прочитал про бизнес-логику, что она является функциональной логикой предметной области. Или иначе говоря переносит определенную предметную область в информационную систему. В паттерне MVC есть 3 элемента Модель - она реализует бизнес-логику Представление - то, как данные выглядят на дисплее Контроллер - для обработки внешних событий. Если на примере игры, камень-ножницы-бумага. В игре участвуют 2n игроков, ход игры по типу плей-офф (если 8 игроков, играют 2 пары по 4 игрока, затем 2 пары по 2 игрока, затем определяется финалист) То в данном случае, что куда относится: Модель - сам алгоритм игры (ножницы режут бумагу, камень тупит ножницы..) Представление - выводит на экран сопроводительные сообщения ("Вы выиграли", или "Вы проиграли", или "Ничья. Давайте еще") Контроллер - управляет всем ходом игры. Ввод количества игроков, затем в цикле определяет нужны пары игроков, запускает метод модели. Или в контроллере нужно только вбить количество игроков. А уже сам процесс игры (весь плейофф между игроками) находится в модели? |
|||
|
||||
magesi |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 20.5.2012 Репутация: -4 Всего: -4 |
Модель базовую обработки алгоритма: "камень-ножница-бумага", я бы сделал в модели, а в контроллере реализовал разбиение на потоки для плейоффа. Т.е. все базовое такое даже в логике игры, я бы реализовал в модели, а уж управление само этой же логикой одной между многими игроками - реализовал бы в контроллере. А это бы, я бы вообще хранил в отдельной статич. структуре/классе и назвал бы Header, как для статистики, чтобы если что обращаться можно было из всех частей MVC. Это сообщение отредактировал(а) magesi - 20.5.2012, 13:46 |
|||
|
||||
Alexey91 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 195 Регистрация: 18.9.2008 Репутация: нет Всего: нет |
magesi, спасибо за ответ!
Я правильно понимаю, что в модели только правила игры. В данном случае пока я только вижу одну функцию, которая определяет "кто кого" Мне вот стало интересно, а если например игра более сложная? Типа дурака. Я правильно понимаю, что в модель пойдет например следующее: козыри бьют обычные карты; обычные карты высокого ранга бьют обычные карты низкого ранга; кто остался с картами тот проиграл; у кого карт больше n, тот карты из колоды не берет. А вот сама раздача карт, кто на кого ходит реализуется в контроллере? И как отделить представление от модели, и контроллера? Если приложение консольное, то нужно просто вывод на экран делать, а если с GUI, то там уже готовые MFC например, или QWindow Это сообщение отредактировал(а) Alexey91 - 20.5.2012, 15:10 |
|||
|
||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
В случае карточной игры, нужны модель карты, колоды, раздатчика карт, игрока, ну и модель игры.
В представлении игры будут картинки карт и рубашки и т. д. Контроллер управляет игрой, обрабатывая нажатия клавиш и движение мыши. В готовых GUI обычно контроллер сливается с представлением. В Qt, например, есть QAbstractItemModel и QTableView, а класса для контроллера нет, но есть делегаты, которые в MVC не предусмотрены. Можно считать контроллером слоты, но выделять их в отдельный класс довольно хлопотно. В случае сетевой игры, модель, представление и контроллер будут физически разделены на разных машинах - представление на машинах игроков, контроллер на сервере, а модель можно разместить в базе данных. Наверно, из такой идеологии и нужно исходить, определяя границы между моделью, представлением и контроллером, даже если всё это будет находиться на одной машине. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |