Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Архитектура программы карточной игры - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Бинарная запись в конец файла JPG и считывание http://www.cyberforum.ru/cpp-beginners/thread1101758.html
Здравствуйте, задача поставлена такая: Написать 2 функции. Первая функция записывает бинарные данные в конец файлу к примеру .jpg. Вторая что бы считать файл с конца. Мой наработанный материал... ...
C++ Вильям Вингейт (William Wingate) заведует службой анализа рынка пиццы Вильям Вингейт (William Wingate) заведует службой анализа рынка пиццы. О каждой пицце он записывает следующую информацию: • наименование компании — производителя пиццы, которое может состоять ... http://www.cyberforum.ru/cpp-beginners/thread1101755.html
Как скопировать объект с удаленным копирующим конструктором? C++
Здравствуйте. Я использую SFML и делаю биндинги к Lua на основе luabind. Суть такова: в скрипте lua делается инстанс класса sf::Window. Над ним делаются некоторые манипуляции. Потом мне необходимо из...
C++ Вывести последовательность слов задом наперед
Задание: Дана строка, группу букв, разделенных пробелами (одним или больше) будем считать словами. Вывести последовательность слов задом наперед (последнее слово становится на место первого и тд)....
C++ Квадратный корень из из типа int http://www.cyberforum.ru/cpp-beginners/thread1101737.html
учусь программировать на с++ по Бьерну. Загнала в тупик простенькая задачка. Почему с++ считает квадратный корень из из типа int (причём правильно, хотя Бьерн говорит корень не может быть вычислен...
C++ Проверить истинность высказывания: «Ферзь за один ход может перейти с одного поля на другое» Даны координаты двух различных полей шахматной доски x1, y1, x2, y2 (целые числа, лежащие в диапазоне 1–8). Проверить истинность высказывания: «Ферзь за один ход может перейти с одного поля на... подробнее

Показать сообщение отдельно
eoLithic
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 32

Архитектура программы карточной игры - C++

21.02.2014, 01:06. Просмотров 316. Ответов 0
Метки (Все метки)

Здравствуйте.

Во время создания карточной игры, я столкнулся с небольшой проблемой в архитектуре, которую не могу разрешить:
Есть классы Dealer, Human, Bot. Все наследуют от абстрактного класса Gamer. В игре наступает момент, когда игроку необходимо принять решение: взять дополнительную карту или нет?
Я решил добавить в Gamer чисто виртуальный метод willTakeAnotherCard() который возвращает булево значение.
Если с ботами и дилером, которые управляются программно, можно просто перегрузить willTakeAnotherCard(), то с Human ситуация становится немного сложнее.
Разумеется можно просто перегрузить willTakeAnotherCard() в Human как-то вот так:
C++
1
2
3
4
5
6
7
8
9
10
bool Human::willTakeAnotherCard()
{
    cout<<"Will you take another card?";
    char choice;
    cin>>choice;
    if ( choice = 'y' )
        return true;
    else
        return false;
}
Но дело в том, что я пытаюсь придерживаться MVC, а MVC не поощряет ввод данных прямиком в модели.
Но очень хочется оставить пользовательский ввод прямиком в модели, поскольку это дает мне одно большое удобство: я могу запихнуть объекты Human, Dealer, Bot в один массив и вызывать у них willTakeAnotherCard() через указатель на класс Gamer. Да здравствует полиморфизм!
Но, опять таки, это не по MVC. А нам очень нужен MVC.
Поэтому я пошел слегка корявым путем: получаем выбор игрока через представление, и через контроллер даем игроку карту(или не даем, зависит от выбора). Но при этом в Human валяется перегруженный метод willTakeAnotherCard() с пустым телом. Вот так вот.

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

Заранее, спасибо вам.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru