|
5 / 5 / 1
Регистрация: 24.09.2012
Сообщений: 178
|
|
Покер10.05.2013, 18:57. Показов 15083. Ответов 47
Метки нет (Все метки)
Хочу написать простенькую покерную программу на с++. Нужна помощь с архитектурой. Напишите, пожалуйста, какие классы стоит реализовать. Спасибо!
0
|
|
| 10.05.2013, 18:57 | |
|
Ответы с готовыми решениями:
47
Покер Покер Задача Покер |
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
||||
| 13.05.2013, 03:08 | ||||
|
Добавлено через 1 минуту 2vlad_light Дело в том, что это не имеет смысла. То что не имеет смысла не нужно и приведет к ошибкам. Так что резать на этапе компиляции.
0
|
||||
|
5 / 5 / 1
Регистрация: 24.09.2012
Сообщений: 178
|
|||||||
| 13.05.2013, 03:10 [ТС] | |||||||
|
Не по теме:
И, кстати, нужна помощь с классом Player. Я сделал ему такие переменные:
0
|
|||||||
|
Каратель
|
||
| 13.05.2013, 03:25 | ||
|
1
|
||
|
5 / 5 / 1
Регистрация: 24.09.2012
Сообщений: 178
|
|
| 13.05.2013, 03:29 [ТС] | |
|
Дело в том, что я пока не очень разбираюсь, где класс примитивный, а где -- нет. Поэтому и пишу эти штуке везде где надо и где не надо
Это больше для выработки привычки (как std:: вместо using namespace std), чем для извлечения какой-то пользы из этого.
0
|
|
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
||||||||||||||||||||||||||||||||||||
| 13.05.2013, 04:06 | ||||||||||||||||||||||||||||||||||||
|
2 vlad_light
Это по теме. Тема называется проектирование. Упростим. Как пример представьте вы разрабатываете класс Human. Человек может быть или мужчина или женщина. Это можно сделать так как предложил lemegeton.
1. Компилируеться. 2. Линкуеться, 3. Работает Но пола 42 нету. И нужно постоянно помнить кто 0, а кто 1. И это может сказаться потом часами отладки. Или так как предложил я
Что же касается Вашего вопроса по поводу Player.
И почитайте про понятия pimpl или наследование. Тогда вот эти вот переменные
1
|
||||||||||||||||||||||||||||||||||||
|
5 / 5 / 1
Регистрация: 24.09.2012
Сообщений: 178
|
||
| 13.05.2013, 04:26 [ТС] | ||
|
Не по теме: Я понял, что пола 42 не существует (я же сразу ответил, что карты 255 тоже нет). Я просто не сразу понял, к чему это было адресовано. Под переменной cards_ в классе Player я имел ввиду карты, которыми владеет игрок. Т.е. я предлагаю создать колоду в виде стека и из неё доставать (удалять) по одной карте и передавать (записывать в переменную) её игроку. Т.е. картами уже владеет игрок, а не колода. Вашу идею я понял, но мне кажется, её будет сложнее реализовать (нужно будет держать в голове, что куда указывает). Хотя по эффективности она конечно выигрывает ![]()
Не по теме: Спасибо Вам большое, но у меня уже 3:30 ночи, пойду спать. Завтра постараюсь продолжить:)
0
|
||
|
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
|||||
| 13.05.2013, 04:35 | |||||
Будет переписывать весь класс. По теме карт -- не модифицируя код класса Card, представьте с помощью него новую карту -- джокера.stima, не надо так горячиться. Ваш код вполне хорош (что-то там с итераторами какая-то ерунда, кстати), никто не отрицает. У нас, например, считается хорошей практикой использовать enum в качестве именованных констант, а как тип данных используется редко из-за негибкости подхода и для прибивания гвоздями ограниченного количества возможных вариантов данных. У вас, возможен другой опыт. Моя идея заключалась в том, чтобы хранить любой набор 52 карт в семи байтах, вычисляя саму карту походя из позиции установленного бита. That's, в общем-то, it.
0
|
|||||
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
||
| 13.05.2013, 12:59 | ||
|
Класс Deck будет отностися к Card, значит что в нем будет хранится указатель на объекты Card. Класс игрок, что он будет делать? В игрока наверно будет колода, и наверно еще свои карты, значит это, то что игрок имеет колоду. Класс ИИ это разновидность игрока Значит можно сделать ИИ : public игрок. (но я думаю это фигня там простая функция которая просто по алгоритму будет менять параметры массива розданных карт). А стол куда будет относится? Наверно игрок имеет и стол и игрок имеет и колоду, на столе допустим просто будут розданые карты. Как мы видим в верху всего у нас стоит класс карта, от нее идет производный класс колода, от колоды идет производный класс игрок, от также производный и от класса стол, Получается просто : колода : public карта; игрок : public колода, public стол. стол как бы сам по себе хранит просто данные об игре. В любом случае насколько я понял классы как то взаимодействуют, это как правило взаимодействие "имеет". Это как правило либо наследование либо агрегация через указатель. Если класс "не имеет" то есть он просто использует другой класс внутри себя, то я думаю это использование класса как структуры, хотя это однозначно то же самое что "имеет". Я просто сам пытаюсь разобраться в этих иерархиях и архитектурах классов, хотя как мне кажется нету никакой архитектуры, просто есть допустим громадная программа, которую мы можем разбить на подклассы, допустим отдельные мелкие функции взять и разбить на подклассы, законченные конечно. Это просто более удобно один класс верхушку создал, отладил все работает, мы больше к нему не возвращаемся делаем наследование создаем производный класс, либо еще новый который независимый и так от строим иерархию. Это выглядит построение снизу вверх, просто явно видно. И тоже способ очень в принципе хороший да и простенько и ясненько. Разделяй и властвуй как говорится. Хотя мб я и не прав. Но я больше думаю что всетаки прав, потому что по другому как строить я не вижу. Отето от разделение от него мне кажется программа более запутаной, чем делать все в одном классе.
0
|
||
|
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
||
| 13.05.2013, 13:32 | ||
|
0
|
||
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
|
| 13.05.2013, 13:35 | |
|
0
|
|
|
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
|
| 13.05.2013, 19:58 | |
|
1
|
|
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
||
| 13.05.2013, 20:33 | ||
|
В принципе если посудить, то смысл не меняется программка разбита на меньшие подпрограммы. От если подумать карта не есть колода но если мы будем создавать вначале карта протестим ее отладим, все мы к ней не возвращаемся, затем колода, которая производная от карта, тоже отладили ее и снова уже к ней не возвращаемся. Появление ошибок в этик кусках кода уже будет исключено. Дальше пишем программу делаем делаем игрок производным от колода и так же отлаживаем тестим, но тут нам нужно создать еще и класс стол и сделать множественное наследование с классом игрок. А дальше просто создаем объект игрок, инициализируются разом все базовые классы, обращаясь к методам игрока мы уже мы уже строим программу. Но лучше создать верхний (нижний) класс который будет интерфейсом игры например game(). От если посмотреть и прикинуть, то это получается просто постепенное построение программы используя классы, здесь просто одно смущает, что как колода может быть катрой или человек может быть картой и всего лишь, но если на это закрыть глаза, то код я думаю получиться не плохо структурированным и наверняка легко поддерживаемым. Я от даже не помню, как то смутно помню, но мне от вспоминается, даже по моему такой способ как я описал есть, и он как то называется, то ли построение снизу вверх или наоборот с верху вниз, мб я путаю но что то мне кажется есть такой способ построения иерархии классов. И если хорошо просто представить и понять как строится этим способом, это очень даже удобно, так можно незаметно громаднейшие программы строить разбитые на модули, которые можно сказать независимые друг от друга, не все конечно, но зависимость конечно будет. И удобства хотя бы просто создание глобального пространства (не нужно методы создавать с параметрами все и так друг друга знают), плюсов я думаю много. Минусы да просто что оно связано будет, да и агрегация тоже подразумевает связь, мы ж отдельно тоже не можем использовать класс без нужного объекта. Я в этом не сильно опытен и компетентен, но если просто представить как будет строится программка и как она будет работать, то получается очень удобно.
0
|
||
|
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
||||||||
| 13.05.2013, 21:53 | ||||||||
|
Какая масть у колоды? Какой ранг у колоды?! Так какой смысл колоду наследовать от карты?! Что бы все запутались? Очень большая проблема ООП -- так называемая "хрупкость" базового класса. Т.е. в большом проекте изменения в базовом классе сделать либо практически невозможно либо повлечет за собой непредсказуемое поведение системы в целом. Отсюда и правило -- предпочитайте аггрегацию наследованию.
2
|
||||||||
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
||
| 13.05.2013, 23:10 | ||
|
Можно только использовать классы отдельно если они не имеют никакой зависимости с другими классами либо имеют зависимость с вложенными классами. Получается все взаимосвязано и что то поменять уже не так просто.
0
|
||
|
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
||
| 13.05.2013, 23:16 | ||
|
Все равно, стоит сначала разобраться, когда можно использовать наследование, перед тем, как предпочитать ему аггрегацию. )
1
|
||
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
||
| 13.05.2013, 23:23 | ||
|
Мне кажется проще сделать наследование а в классе колода создать массив из объектов карт к которым можно спокойно обращаться. Хотя неудобно наверно проще создать указатель на карты и хранить в объекте колода массив карт, как бы агрегация, ну тогда лучше делать ранг и масть открытыми членами. Да и смысла похоже нету, нам же ведь нужна ни одна карта а целый массив карт который удобно хранить в указателе на массив объектов карта. Ну в принципе наследование здесь не нужно. Ну зато для колоды и игрока там уже можно сделать наследование, так как объект колода у нас будет один, поэтому без разници хоть наследование, хоть через указатель результат один и тот же будет. Добавлено через 1 минуту lemegeton, да я понял наследование нужно применять, если есть общие методы и члены для классов наследников, чтобы не писать код дважды.
0
|
||
|
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
||||||
| 13.05.2013, 23:26 | ||||||
Игрок не является колодой.Добавлено через 52 секунды
1
|
||||||
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
|
| 13.05.2013, 23:31 | |
|
меня просто задание збило для меня как бы наследование и агрегация тождественные они просто одинаково строят отношение имеет.
Добавлено через 5 минут lemegeton, Спасибо за лекбез. ООП правда запутанная тема, возможностей много, а как правильно делать кто его знает как.
0
|
|
|
Заблокирован
|
|
| 13.05.2013, 23:33 | |
|
я сейчас пытаюсь сделать игру в дурака у меня объект - набор карт(векторы) вся колода, карты на игроков и "бито". интересно с помощью какого метода лучше всего реализовывать AI? с помощью дерева - хороший ли вариант?
0
|
|
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
|
| 13.05.2013, 23:50 | |
|
ТОрчОК, Попытайся без дерева. Я так понимаю дерево это альфа-бета осечение или как там его называют?
Просто попробуй 3 правила для хода компа. От если ходит комп то обязательно с самой меньшей карты не козырь и подкидывает допустим карты максимум валет и шушваль, остальное оставляет себе, там дамы короли тузы. Просто попробуй для начала придумать небольшой набор правил я думаю аи этим инструкциям будет следовать постоянно то к концу игры у него накопится норм козырей и больших карт так что с ним играть будет интересно. Так же какой нибудь набор правил придумай небольшой для того варианта, если комп отбивается. Не обязательно дерево. Дерево это мегаацкий камп сделать, который не переиграть , а в дурака играют обычные пользователи кое как, им не интересно будет с таким компом играть, так что твой простой алгоритм будет рулить ![]() Добавлено через 4 минуты ТОрчОК, я тоже делал игру reversi и тоже нужно было AI сделать так я простейшие правила для хода компа сделал и кам тяжело выиграть, хотя можно было альфа-бета отсечение ну в нем еще нужно разобраться было, поэтому я не делал. Просто понял что альфа-бета отсечение это дерево в котором находятся все возможные ходы которые токо могут быть, комп как то их перебирает и обязательно ходит правильно, всегда выберает наиболее правильный ход заглядывая на перед, Но нафиг так делать? Обычный пользователь не профи, ему пару правил и мега ацкий AI получается.
0
|
|
| 13.05.2013, 23:50 | |
|
Задача Покер
Задача про покер Проверка на стрит(покер) Моделирование игры в покер Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek
ВВЕДЕНИЕ
Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
|
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
|