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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.95
vlad_light
4 / 4 / 0
Регистрация: 24.09.2012
Сообщений: 178
#1

Покер - C++

10.05.2013, 18:57. Просмотров 4170. Ответов 47
Метки нет (Все метки)

Хочу написать простенькую покерную программу на с++. Нужна помощь с архитектурой. Напишите, пожалуйста, какие классы стоит реализовать. Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2013, 18:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Покер (C++):

Покер - C++
Прошу помощи. Болел - ничего не понял. Скоро экзамен, а я ничего не понимаю в С++. Дали примерные задачи, а я не понимаю как решать. Вот...

Покер - C++
Подскажите пожалуста где ошибка??????:help: компилятор выдает ошибки Ошибка 2 error LNK2005: "int __cdecl compareCards(void const...

Графический покер - C++
Доброго времени суток всем. Вот, немного запутался.... Есть игра покер...Нужно ее реализовать в упрощенном виде. Есть изображения...

Задача Покер - C++
Даны 5 целых чисел. Среди них: если одинаковы 5, то вывести "Impossible", иначе если одинаковы 4, то вывести "Four of a Kind", иначе ...

Задача Покер - C++
Даны 5 целых чисел. Среди них: если одинаковы 5, то вывести "Impossible", иначе если одинаковы 4, то вывести "Four of a Kind", иначе ...

Моделирование игры в покер - C++
Недавно начал изучать С++,использую книгу Харви М. Детела Как программировать на С++.В конце одной из глав есть упражнение,в котором нужно...

47
lemegeton
2928 / 1357 / 136
Регистрация: 29.11.2010
Сообщений: 2,725
13.05.2013, 19:58 #31
Цитата Сообщение от ninja2 Посмотреть сообщение
Тут похоже кругом агрегацию нужно применять.
Ибо одно из правил гласит -- предпочитайте аггрегацию наследованию.
1
ninja2
814 / 188 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
13.05.2013, 20:33 #32
Цитата Сообщение от lemegeton Посмотреть сообщение
Ибо одно из правил гласит -- предпочитайте аггрегацию наследованию.
Не знаю я таких правил не примоню, а от точно помню делал упражнение, там нужно было написать два способа как построить отношение классов класс имеет, первый способ это агрегация хранить объект другого класса в классе и второй это наследование.
В принципе если посудить, то смысл не меняется программка разбита на меньшие подпрограммы. От если подумать карта не есть колода но если мы будем создавать вначале карта протестим ее отладим, все мы к ней не возвращаемся, затем колода, которая производная от карта, тоже отладили ее и снова уже к ней не возвращаемся. Появление ошибок в этик кусках кода уже будет исключено. Дальше пишем программу делаем делаем игрок производным от колода и так же отлаживаем тестим, но тут нам нужно создать еще и класс стол и сделать множественное наследование с классом игрок. А дальше просто создаем объект игрок, инициализируются разом все базовые классы, обращаясь к методам игрока мы уже мы уже строим программу. Но лучше создать верхний (нижний) класс который будет интерфейсом игры например game().

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

Я от даже не помню, как то смутно помню, но мне от вспоминается, даже по моему такой способ как я описал есть, и он как то называется, то ли построение снизу вверх или наоборот с верху вниз, мб я путаю но что то мне кажется есть такой способ построения иерархии классов. И если хорошо просто представить и понять как строится этим способом, это очень даже удобно, так можно незаметно громаднейшие программы строить разбитые на модули, которые можно сказать независимые друг от друга, не все конечно, но зависимость конечно будет.
И удобства хотя бы просто создание глобального пространства (не нужно методы создавать с параметрами все и так друг друга знают), плюсов я думаю много. Минусы да просто что оно связано будет, да и агрегация тоже подразумевает связь, мы ж отдельно тоже не можем использовать класс без нужного объекта.

Я в этом не сильно опытен и компетентен, но если просто представить как будет строится программка и как она будет работать, то получается очень удобно.
0
lemegeton
2928 / 1357 / 136
Регистрация: 29.11.2010
Сообщений: 2,725
13.05.2013, 21:53 #33
Цитата Сообщение от ninja2 Посмотреть сообщение
Не знаю я таких правил не примоню
Читайте больше теории. Еще больше теории. Книжки по проектированию подойдут.
Цитата Сообщение от ninja2 Посмотреть сообщение
колода, которая производная от карта
У карты какие свойства? Ранг и масть.
Какая масть у колоды? Какой ранг у колоды?!
Так какой смысл колоду наследовать от карты?! Что бы все запутались?
Цитата Сообщение от ninja2 Посмотреть сообщение
Появление ошибок в этик кусках кода уже будет исключено.
Ошибки не появляются. Они есть. Всегда. В любом коде. Земля вертится, все меняется. То, что сегодня казалось безупречным, завтра будет куском легаси кода, подлежащим немедленному рефакторингу.
Цитата Сообщение от ninja2 Посмотреть сообщение
класс стол и сделать множественное наследование с классом игрок
Осторожно, вы уже выходите за грань как добра так и зла.
Цитата Сообщение от ninja2 Посмотреть сообщение
то код я думаю получиться не плохо структурированным и наверняка легко поддерживаемым
Простите, но это будет ад и содомия.
Цитата Сообщение от ninja2 Посмотреть сообщение
даже по моему такой способ как я описал есть, и он как то называется, то ли построение снизу вверх или наоборот с верху вниз,
Индусский код это называется.

Цитата Сообщение от ninja2 Посмотреть сообщение
так можно незаметно громаднейшие программы строить разбитые на модули, которые можно сказать независимые друг от друга, не все конечно, но зависимость конечно будет
Чет я не понял. У вас ВСЕ классы будут зависеть друг от друга наследованием(!), но код при этом каким-то чудом окажется независимым?! Это странно как минимум.

Очень большая проблема ООП -- так называемая "хрупкость" базового класса. Т.е. в большом проекте изменения в базовом классе сделать либо практически невозможно либо повлечет за собой непредсказуемое поведение системы в целом. Отсюда и правило -- предпочитайте аггрегацию наследованию.
2
ninja2
814 / 188 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
13.05.2013, 23:10 #34
Цитата Сообщение от lemegeton Посмотреть сообщение
Очень большая проблема ООП -- так называемая "хрупкость" базового класса. Т.е. в большом проекте изменения в базовом классе сделать либо практически невозможно либо повлечет за собой непредсказуемое поведение системы в целом. Отсюда и правило -- предпочитайте аггрегацию наследованию.
А согласись даже при агрегации код зависим получается, потому что должно быть как минимум определение класса, который будет передаваться, а это уже зависимость. Отдельно класс тоже не получится использовать если он агрегацией связан, то есть находится в отношении имеет.

Можно только использовать классы отдельно если они не имеют никакой зависимости с другими классами либо имеют зависимость с вложенными классами.

Получается все взаимосвязано и что то поменять уже не так просто.
0
lemegeton
2928 / 1357 / 136
Регистрация: 29.11.2010
Сообщений: 2,725
13.05.2013, 23:16 #35
Цитата Сообщение от ninja2 Посмотреть сообщение
А согласись даже при агрегации код зависим получается, потому что должно быть как минимум определение класса, который будет передаваться, а это уже зависимость. Отдельно класс тоже не получится использовать если он агрегацией связан, то есть находится в отношении имеет.
Можно только использовать классы отдельно если они не имеют никакой зависимости с другими классами либо имеют зависимость с вложенными классами.
Получается все взаимосвязано и что то поменять уже не так просто.
Безусловно. Код на аггрегациях все же менее хрупкий.
Все равно, стоит сначала разобраться, когда можно использовать наследование, перед тем, как предпочитать ему аггрегацию. )
1
ninja2
814 / 188 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
13.05.2013, 23:23 #36
Цитата Сообщение от lemegeton Посмотреть сообщение
У карты какие свойства? Ранг и масть.
Какая масть у колоды? Какой ранг у колоды?!
Так какой смысл колоду наследовать от карты?! Что бы все запутались?
А если ранг и масть это закрытые члены класса, то для удобства нам нужно делать класс карта другом класса колода, чтобы можно спокойно обращатся к этим членам, это тоже не сильно удобно.
Мне кажется проще сделать наследование а в классе колода создать массив из объектов карт к которым можно спокойно обращаться. Хотя неудобно наверно проще создать указатель на карты и хранить в объекте колода массив карт, как бы агрегация, ну тогда лучше делать ранг и масть открытыми членами.
Да и смысла похоже нету, нам же ведь нужна ни одна карта а целый массив карт который удобно хранить в указателе на массив объектов карта. Ну в принципе наследование здесь не нужно.
Ну зато для колоды и игрока там уже можно сделать наследование, так как объект колода у нас будет один, поэтому без разници хоть наследование, хоть через указатель результат один и тот же будет.

Добавлено через 1 минуту
lemegeton, да я понял наследование нужно применять, если есть общие методы и члены для классов наследников, чтобы не писать код дважды.
0
lemegeton
2928 / 1357 / 136
Регистрация: 29.11.2010
Сообщений: 2,725
13.05.2013, 23:26 #37
Цитата Сообщение от ninja2 Посмотреть сообщение
А если ранг и масть это закрытые члены класса, то для удобства нам нужно делать класс карта другом класса колода, чтобы можно спокойно обращатся к этим членам, это тоже не сильно удобно.
не надо другом. Все общение с объектами происходит через открытые методы.

Цитата Сообщение от ninja2 Посмотреть сообщение
Мне кажется проще сделать наследование
Бессмысленно. Просто ни к чему.

Цитата Сообщение от ninja2 Посмотреть сообщение
ну в принципе наследование здесь не нужно.
Абсолютно.

Цитата Сообщение от ninja2 Посмотреть сообщение
Ну зато для колоды и игрока там уже можно сделать наследование, так как объект колода у нас будет один, поэтому без разници хоть наследование, хоть через указатель результат один и тот же будет.
Тоже не нужно. Игрок не является колодой.

Добавлено через 52 секунды
Цитата Сообщение от ninja2 Посмотреть сообщение
lemegeton, да я понял наследование нужно применять, если есть общие методы и члены для классов наследников, чтобы не писать код дважды.
Наследование нужно применять, когда дочерний объект является родительским и ведет себя как родительский.
1
ninja2
814 / 188 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
13.05.2013, 23:31 #38
меня просто задание збило для меня как бы наследование и агрегация тождественные они просто одинаково строят отношение имеет.

Добавлено через 5 минут
lemegeton, Спасибо за лекбез. ООП правда запутанная тема, возможностей много, а как правильно делать кто его знает как.
0
ТОрчОК
Заблокирован
13.05.2013, 23:33 #39
я сейчас пытаюсь сделать игру в дурака у меня объект - набор карт(векторы) вся колода, карты на игроков и "бито". интересно с помощью какого метода лучше всего реализовывать AI? с помощью дерева - хороший ли вариант?
0
ninja2
814 / 188 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
13.05.2013, 23:50 #40
ТОрчОК, Попытайся без дерева. Я так понимаю дерево это альфа-бета осечение или как там его называют?
Просто попробуй 3 правила для хода компа. От если ходит комп то обязательно с самой меньшей карты не козырь и подкидывает допустим карты максимум валет и шушваль, остальное оставляет себе, там дамы короли тузы. Просто попробуй для начала придумать небольшой набор правил я думаю аи этим инструкциям будет следовать постоянно то к концу игры у него накопится норм козырей и больших карт так что с ним играть будет интересно.
Так же какой нибудь набор правил придумай небольшой для того варианта, если комп отбивается. Не обязательно дерево. Дерево это мегаацкий камп сделать, который не переиграть , а в дурака играют обычные пользователи кое как, им не интересно будет с таким компом играть, так что твой простой алгоритм будет рулить

Добавлено через 4 минуты
ТОрчОК, я тоже делал игру reversi и тоже нужно было AI сделать так я простейшие правила для хода компа сделал и кам тяжело выиграть, хотя можно было альфа-бета отсечение ну в нем еще нужно разобраться было, поэтому я не делал. Просто понял что альфа-бета отсечение это дерево в котором находятся все возможные ходы которые токо могут быть, комп как то их перебирает и обязательно ходит правильно, всегда выберает наиболее правильный ход заглядывая на перед, Но нафиг так делать? Обычный пользователь не профи, ему пару правил и мега ацкий AI получается.
0
ТОрчОК
Заблокирован
13.05.2013, 23:50 #41
я тоже самое почти придумал седня
1)исправить массивы на векторы
2)вытянуть козырь
3)наименьшая козырная карта у игроков

??4)преобразование размерностей из string в int

5)у кого наименьшая тот ходит
6)выбор между бито и сходить картой той же размерности
7)алгоритм игры бота:
1)бот ходит сначала наименьшей картой
2)если игрок берет карту и нет карты той же размерности, то след. ход бот ходит картой той же масти
иначе если нет той же масти ходит наименьшей др. масти
3)если у бота есть карта той же размерности и карта не козырная то ходит
иначе если козырная то ходит картой меньше "Д"

но все же так как у меня плохо с деревьями, то надо именно их и использовать
0
ninja2
814 / 188 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
14.05.2013, 00:05 #42
Цитата Сообщение от ТОрчОК Посмотреть сообщение
но все же так как у меня плохо с деревьями, то надо именно их и использовать
Я думаю не надо. Оформи в виде функций и все. Дерево это ж структура данных, как ты его будешь использовать? Что ты туда будешь помещать? От в настольных играх допустим шахматы там можно на перед до конца игры все возможные варианты исхода игры просчитать. А в дурака как просчитать? Ты ж ведь только знаешь 6 своих карт. Делай просто набор правил и даже не пытайся делать что то с деревом это морочно время я так думаю в пустую потратишь зря.

Добавлено через 4 минуты
Я б не заморачивался все игры созданы давно, конечно привлекает этот АИ мегамощьный, такой которого фиг обыграешь.
Ну конечно если интересно попробуй может получится. Альфа - бета отсечение называется наверно он и в картах применяется я не знаю просто чуток за него читал.
0
vlad_light
4 / 4 / 0
Регистрация: 24.09.2012
Сообщений: 178
14.05.2013, 01:00  [ТС] #43

Не по теме:

Уважаемый, ninja2!
При всём уважении к Вам, хочу попросить Вас больше никогда не писать в темах которые я создаю. У Вас ведь есть уникальная возможность создать свои собственные темы и задавать там вопросы. Спасибо за понимание!


Подскажите, (не считая метода startNewGame () ) всё ок?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include "Deck.h"
#include "Player.h"
 
#include <list>
 
class Table
{
public:
    Table ();
    Table (const Table& table);
    Table (const int nPlayers);
    Table (const int nPlayers, const int nChips);
    Table (const int nPlayers, const int nChips, const int sb, const int bb);
 
    ~Table ();
 
    Table operator= (const Table& table);
 
    void setPlayer (const int position, const Player& player);
    void removePlayer (const int position);
 
    void setButton (const int button);
    int getButton () const;
    void moveButton ();
 
    void setBlinds (const int smallBlind, const int bigBlind);
    int getSmallBlind () const;
    int getBigBlind () const;
 
    void startNewGame ();
 
    void view () const;
 
 
private:
    std::vector<Player> players_; // indices means position
    Deck deck_;
    int button_; // current button position
    int smallBlind_; // sb value
    int bigBlind_; // bb value
    int pot_;
    std::vector<Card> board_;
};
0
lemegeton
2928 / 1357 / 136
Регистрация: 29.11.2010
Сообщений: 2,725
14.05.2013, 01:13 #44
Расскажите, пожалуйста, что делает ваш класс? Для чего он нужен?

Не по теме:

Есть такой забавный признак -- если в описании назначения сущности есть союз "и", надо декомпозировать дальше.

0
ninja2
14.05.2013, 11:07     Покер
  #45

Не по теме:

Цитата Сообщение от vlad_light Посмотреть сообщение
Не по теме:
Уважаемый, ninja2!
При всём уважении к Вам, хочу попросить Вас больше никогда не писать в темах которые я создаю. У Вас ведь есть уникальная возможность создать свои собственные темы и задавать там вопросы. Спасибо за понимание!
Да нет дружище тебе как новичку помогать нада, а кто как не я научит новичка?

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.05.2013, 11:07
Привет! Вот еще темы с ответами:

Проверка на стрит(покер) - C++
В одном из заданий из книги Дейтелов необходимо определить, имеется ли на руках у игрока стрит(пять карт последовательных номиналов). Но...

Кому интересно. Покер - C++
Вообщем, давно ничего не кодил и на днях накатал немного говно кода на тему Покера. Кому будет интересно, посмотрите и предложите если...

Программа для игры в покер - C++
Никак не могу понять суть ооп. До прихода в с++ програмировал на С микроконтроллеры. Там всё просто. Есть начало программы, и пишеш...

Покер - даны 5 целых чисел. Определить в них комбинации повторяющихся элементов - C++
есть массив. надо определить в нем комбинации повторяющихся элементов: for(int i=0; i&lt;5;i++) { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
45
14.05.2013, 11:07
Ответ Создать тему
Опции темы

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