Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Реализовать крестики-нолики


Автор: Alexey91 20.5.2012, 10:22
Здравствуйте!

Знакомлюсь с паттернами.
Прочитал про бизнес-логику, что она является функциональной логикой предметной области.
Или иначе говоря переносит определенную предметную область в информационную систему.

В паттерне MVC есть 3 элемента

Модель - она реализует бизнес-логику
Представление - то, как данные выглядят на дисплее
Контроллер - для обработки внешних событий.

Если на примере игры, камень-ножницы-бумага.
В игре участвуют 2n игроков, ход игры по типу плей-офф (если 8 игроков, играют 2 пары по 4 игрока, затем 2 пары по 2 игрока, затем определяется финалист)

То в данном случае, что куда относится:
Модель - сам алгоритм игры (ножницы режут бумагу, камень тупит ножницы..)
Представление - выводит на экран сопроводительные сообщения ("Вы выиграли", или "Вы проиграли", или "Ничья. Давайте еще")
Контроллер - управляет всем ходом игры. Ввод количества игроков, затем в цикле определяет нужны пары игроков, запускает метод модели.

Или в контроллере нужно только вбить количество игроков. А уже сам процесс игры (весь плейофф между игроками) находится в модели?

Автор: magesi 20.5.2012, 13:30
Цитата(Alexey91 @  20.5.2012,  10:22 Найти цитируемый пост)
А уже сам процесс игры (весь плейофф между игроками) находится в модели?

Модель базовую обработки алгоритма: "камень-ножница-бумага", я бы сделал в модели, а в контроллере реализовал разбиение на потоки для плейоффа.
Т.е. все базовое такое даже в логике игры, я бы реализовал в модели, а уж управление само этой же логикой одной между многими игроками - реализовал бы в контроллере.

Цитата(Alexey91 @  20.5.2012,  10:22 Найти цитируемый пост)
Или в контроллере нужно только вбить количество игроков.

А это бы, я бы вообще хранил в отдельной статич. структуре/классе и назвал бы Header, как для статистики, чтобы если что обращаться можно было из всех частей MVC.


Автор: Alexey91 20.5.2012, 15:09
magesi, спасибо за ответ!

Я правильно понимаю, что в модели только правила игры. 
В данном случае пока я только вижу одну функцию, которая определяет "кто кого" 

Мне вот стало интересно, а если например игра более сложная? Типа дурака. Я правильно понимаю, что в модель пойдет например следующее: козыри бьют обычные карты; обычные карты высокого ранга бьют обычные карты низкого ранга; кто остался с картами тот проиграл; у кого карт больше n, тот карты из колоды не берет.

А вот сама раздача карт, кто на кого ходит реализуется в контроллере?

И как отделить представление от модели, и контроллера? Если приложение консольное, то нужно просто вывод на экран делать, а если с GUI, то там уже готовые MFC например, или QWindow

Автор: math64 21.5.2012, 12:49
В случае карточной игры, нужны модель карты, колоды, раздатчика карт, игрока, ну и модель игры.
В представлении игры будут картинки карт и рубашки и т. д.
Контроллер управляет игрой, обрабатывая нажатия клавиш и движение мыши.
В готовых GUI обычно контроллер сливается с представлением. В Qt, например, есть QAbstractItemModel и QTableView, а класса для контроллера нет, но есть делегаты, которые в MVC не предусмотрены. Можно считать контроллером слоты, но выделять их в отдельный класс довольно хлопотно.
В случае сетевой игры, модель, представление и контроллер будут физически разделены на разных машинах - представление на машинах игроков, контроллер на сервере, а модель можно разместить в базе данных. Наверно, из такой идеологии и нужно исходить, определяя границы между моделью, представлением и контроллером, даже если всё это будет находиться на одной машине.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)