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

Программа для игры в покер - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 31, средняя оценка - 4.68
nefton
44 / 20 / 5
Регистрация: 28.02.2013
Сообщений: 184
28.02.2013, 13:15     Программа для игры в покер #1
Никак не могу понять суть ооп.
До прихода в с++ програмировал на С микроконтроллеры.
Там всё просто. Есть начало программы, и пишеш инструкции последовательно чтоб устройство работало так, как задумано. Используя регистры, прерывания и тп.

Сейчас же выучив немного С++ пытаюсь написать консольное приложение для игры в покер сам с собой.
Написал функцию сравнения рук в покере. Даже написал обьект "Автомат игры" для безлимитного холдема
для 2-10 чел. (переписывал много много раз)
Последняя редакция подкупает своей лаконичностью. В этом обьекте нет "представления" типа ников игроков, аватарок и тп. Нет функции рисования игры в консоле и ввода от пользователя ходов.

Вопрос как мне организовать программу чтоб было красиво (понятно) и расширяемо и тп. Вобщем как это делают нормальные програмисты?

Вот у меня есть main(). Это точка входа. (в визуал С++ я так её и не нашол когда пытался )
Далее по логике я создаю экземпляры классов какие мне надо в программе.

Что дальше? Бесконечный цикл ожидания когда пользователь нажмёт кнопку? И вызов соответствующих функций какихто классов?
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kura007
1 / 1 / 0
Регистрация: 02.12.2012
Сообщений: 17
03.03.2013, 12:51     Программа для игры в покер #41
было бы неплохо написать программу, которая играет в покер за тебя. к примеру просто ставил олл ин с руками начиная с карманки 9 9 +, и А J +)как то так)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nefton
44 / 20 / 5
Регистрация: 28.02.2013
Сообщений: 184
03.03.2013, 13:19  [ТС]     Программа для игры в покер #42
Пока что дела обстоят так.
Что смущает:
- ни одного наследования
- в классе c_Deck есть функция отрисовки
(перевод из внутр представление в текст для консольного приложения)

Когда я выкинул всю отрисовку из класса c_Deal - мне он начал нравится

Нет даже задания для приложения. В том то и дело. что сейчас мне надо приложение для обкатки класса c_Deal
Логично ли для этого просто написать в main кучу кода малоструктурированого, или же пытатся как то развивать
идею классов с пом наследования, создания новых классов (чтоб в main было потом пару строчек)
Миниатюры
Программа для игры в покер  
nefton
44 / 20 / 5
Регистрация: 28.02.2013
Сообщений: 184
03.03.2013, 13:33  [ТС]     Программа для игры в покер #43
Да и вообще нормальный ли это подход - делать кирпичики ( по сути самостоятельные классы или функции)
их обкатывать, чтоб они работали как часы и к ним больше не вовзращатся. А потом из них делать приложение какое захочется.
Или следует сначала накидать както структуру конечного приложения (а если мне их надо много разных или я сам до сих пор не уверен чего хочу)
Например сейчас мне надо просто консольное приложение для обкатки классов.
Потом мне надо будет консольный клиент-сервер для игры
Потом я захочу смотреть текстовые истории рук, с них выковыривать историю, переводить её в свой формат
как то анализировать и выдавать результаты. (при том как анализировать и выдавать бесконечно вариантов)
Потом я захочу играть с ботом
Или боты меж собою.
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
03.03.2013, 16:37     Программа для игры в покер #44

Не по теме:


Забыл сказать на Eclipse можно программировать микроконтроллеры ( с дополнительными плагинами и приложениями), писать GUI приложения, подключать различные компиляторы.



Добавлено через 10 минут

Не по теме:


Если бы вы оформили свой "спойлер" в качестве статьи в блоге, я бы вам сказал, что ссылки "пример" после ссылки "паттерн мост" не нажимаются



Добавлено через 6 минут
Да и вообще нормальный ли это подход - делать кирпичики ( по сути самостоятельные классы или функции)
их обкатывать, чтоб они работали как часы и к ним больше не вовзращатся. А потом из них делать приложение какое захочется.
Или следует сначала накидать както структуру конечного приложения (а если мне их надо много разных или я сам до сих пор не уверен чего хочу)
можно свести к вопросу, что лучше - восходящее или нисходящее проектирование.

во втором случае системные аналитики обычно выясняют кто будет пользователем системы, какова бизнес-модель предметной области, какие существуют проблемы в предметной области, пишут описание предметной области, составляют сценарии вариантов использования(это конечно больше относится к RUP).
NEbO
583 / 451 / 49
Регистрация: 22.01.2009
Сообщений: 1,173
Записей в блоге: 1
Завершенные тесты: 1
03.03.2013, 23:09     Программа для игры в покер #45
вот я тоже уже год пытаюсь написать довольно небольшое приложение. программа для создания схем вышивки бисером. на настоящий момент в паблике есть только одна, но вышивальщицам она не нравится (писал программист, у него там этот бисер можно на 20 частей поделить, работает медленно, криво, и в новых версиях все больше бесполезных возможностей), и при этом замечания вышивальщиц он игнорирует.
по сложности, наверное, примерно как ваше, если учесть, что у вас там и работа с сетью, и есть над чем над алгоритмами подумать, плагинная система и прочее и прочее. вначале выбирал, сделать его на wx или qt. долго выбирал. потом узнал про канвас джаваскиптовский, решил сделать на нем. потом позучал, как оно на практике, это прототипное наследование, плюнул, начал писать на qt (уже прошло несколько месяцев). начал проектировать, составлять uml диаграммы, составил эдак классов на 50, потом что-то решил разделить, переделать, поменять... потом еще какую то книгу по проектированию почитал, еще вспомнил, что будут применяться svg изображения, причем с шаблонами (очень много одинаковых элементов со сложной форме, но различающиеся, например, одним цветом заливки). вот думал-думал, как это сделать. придумал.
потом подумал, а может мне еще захочется прикрутить вышивку крестиком. и опять, сразу все начал продумывать -- как мне сделать, чтоб можно было разместить материал, закрасить текстурой, или еще что-то, как в конце концов вообще эти нитки описывать, чтоб выглядело более-менее реалистично? пока я решал все это, прошло уже больше полугода. там какие-то другие дела появились, еще что-то...
да, я узнал о куче разных технологий, методов, и прочего и прочего. но программа как была на нуле, так и осталась. и тут я вспомнил, как раньше было просто писать на делфи 7, когда я толком не понимал, что такое классы, наследование, полиморфизм. да, выходила хрень, которую повторно использовать было нельзя и расширить тоже проблематично. но оно работало! как-то, где-то, но все же я был удовлетворен теми возможностями, которые я хотел видеть в своей программе. она их выполняла, и я был очень этому рад.
поэтому, мой вам совет, не парьтесь. нет наследования -- и не надо. еще классики (банда четырех) советовала по возможности применять делегирование, вместо наследования. если вы считаете, что находитесь на том уровне, что программу не потянете, немного все же стоит почитать теорию. книги фаулера, особенно "экстремальное программирование" -- имхо, то что нужно сейчас вам. ну и немного по паттернам, та же книга банды четырех (Гамма, Хелм, Джонсон, Влиссидес, "Приёмы объектно-ориентированного проектирования. Паттерны проектирования"), в первой части рассматривает, как проектировать небольшой текстовый редактор. когда я читал, я вообще не представлял, как такое возможно! но если дочитать до конца, становится понятным очень многое из мира ооп.
вот. ну а как захочется вернуться непосредственно к приложению: имхо, забудьте что такое ооп! забудьте про технологии, про которые прочитали, которые понравились -- без опыта применения мне они не помогали, а только лишь мешали. может, конечно, у вас получится по-другому, но в любом случае, это всего лишь средство. а средства не должны управлять всеми тонкостями вашего приложения. вы ж не STL (или другой фреймворк) пишите, в конце концов!
имхо, первое что нужно сделать: четко определиться, что будет в первой версии приложения. думаете, зная о паттернах, вы напишите код так, что его невозможно будет изменить? значит, ооп вам только помешало в реализации. я уверен, что на си вы бы не смогли написать абсолютно нерасширяемое приложение (ну разве что специально только). и пишите уже код! по фаулеру, как в экстремальном программировании. вот вам еще один пример: http://habrahabr.ru/post/153225/ (настоящий шедевр!).
А пока не определитесь чего конкретно хотите, у вас будет получиться то же, что и у меня. многому научитесь, поймете, но так ничего толкового не напишите. и будете постоянно злиться на себя за то, что ничего не получается. А как только четко поставите себе задачу, вы поймете, где должны быть все эти "синглтоны", "мосты", "стратегии" и прочее. главное, сделайте первую версию, минимальную. увидите, как все движется, работает, пусть сначала кое-как, но все же! улыбнетесь, увидите какие-то маленькие проблемы, захотите добавить анимацию. заметите где-то какие то тормоза... вообщем, всегда будет что улучшать, но главное, что все будет получаться.
а еще, можете посмотреть функциональный подход. тот же эрланг, например (хаскель я до сих пор считаю чем-то вроде китайского языка, по-моему там одни иероглифы). там вообще нет классов, и тем не менее это никак не мешает писать сложные, и порой даже более понятные программы. загляните в код какой-нибудь небольшой, но более-менее известной java-программы, и убедитесь, что ~1000 классов по 3-4 кбайта -- это не то, что вам нужно. Зато там соблюдаются (почти?) все паттерны.
я думаю, что у вас все получится. я например, пока что тоже с ходу не вижу, где у вас должно быть тут наследование. а кирпичики -- это самое то, что нужно! с ними потом будет легко и приятно работать. удачи!)
AnyOne697
 Аватар для AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 532
04.03.2013, 06:46     Программа для игры в покер #46
Цитата Сообщение от NEbO Посмотреть сообщение
Поскольку буков многа, а я скромный по натуре, думаю, всем будет лучше, если я все это дело засуну под спойлер.
БукАФ очень много =( Боюсь, что большая часть не дочитает до конца, например я. Алсо в K&R стиле нет ничего плохого, наоборот это единственно-верный стиль написания скобок! (хотя с отступами там не всё верно - мониторы стали пошире)
Цитата Сообщение от nefton Посмотреть сообщение
ни одного наследования
Пора бы уже успокоиться. Наследование требуется, когда есть схожие сущности.
Например, есть класс
C++
1
2
3
4
5
6
7
class GameState {
   /*...*/
public:
   virtual void update ();
   virtual void draw ();
   /*...*/
};
У него есть два виртуальных метода: update () и draw (). Но какие возможны состояния, например, в рпг? Допустим, рпг тактическая с претензией на реалистичность. У нас возможны состояния брифинга (допустим, это обычный текстовый брифинг), состояния похода (карта с большим масштабом), состояния тактической планировки (карта с небольшим масштабом) и непосредственно бой (карта с минимальным масштабом). Каждый режим сильно отличается друг от друга и содержит сильно различные методы. Но у них есть общие методы update и draw, которые мы в любом случае будем вызывать поочерёдно. Что можно сделать? Да очень просто - объявляем указатель на currentState типа GameState и в цикле их вызываем. Чтобы частота кадров была примерно одинакова было бы не плохо после update и draw ждать ровно столько, сколько нужно. То есть нам потребуется как-то хранить пройденное время... Но это всё - мелочи:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/*includes*/
 
/*using namespaces*/
 
int main ( int argc, char **argv ) {
    GameState *currentState = new MenuGameState ();
    /*...*/
    while ( true ) {
        Date date = Date ( Date::now );
        currentState->update ();
        currentState->draw ();
        Sleep ( date + 1000 / 60 - Date ( Date::now ) );
    }
 
    /*...*/
}
MenuGameState наследован от GameState. То есть он также содержит методы update и draw. Но так как они виртуальные, программа по таблице проверит всех наследников GameState при обращении к функциям на наличие перегруженных update и draw... Как то так.
Вот Вам и наследование. Но это опасная штука. Следует применять её только тогда, когда действительно нет другого выбора.

Цитата Сообщение от NEbO Посмотреть сообщение
по сложности, наверное, примерно как ваше, если учесть, что у вас там и работа с сетью, и есть над чем над алгоритмами подумать, плагинная система и прочее и прочее. вначале выбирал, сделать его на wx или qt. долго выбирал. потом узнал про канвас джаваскиптовский, решил сделать на нем. потом позучал, как оно на практике, это прототипное наследование, плюнул, начал писать на qt (уже прошло несколько месяцев). начал проектировать, составлять uml диаграммы, составил эдак классов на 50, потом что-то решил разделить, переделать, поменять... потом еще какую то книгу по проектированию почитал, еще вспомнил, что будут применяться svg изображения, причем с шаблонами (очень много одинаковых элементов со сложной форме, но различающиеся, например, одним цветом заливки). вот думал-думал, как это сделать. придумал.
Чуууувак! Пожалуйста, используй прописные буквы. Мы не в аське, читать очень сложно. Алсо, в ECMAScript НЕТ классов!
Вообще, разрабатывать на javascript сказка - прототипы сложных систем пишутся за пару дней. Но вот внедрение новых возможностей растягивается на неделю-две. Настолько сложно разобраться в этой динамической системе, которую ТЫ сделал два дня назад, что проще просто взять и переписать заного. При том, что примерно так и выходит. Пытаешься использовать ООП - javascript резко теряет свою былую мощь, да и становиться этаким уродцем, что скучаешь по Lua и Си. Пытаешься применять вроде бы успешные паттерны - получается что-то между: проще работать по планам, но js перестаёт подкупать своей простотой и мощью.
ИМХО, javascript сто раз динамический язык, он удобен для быстрых и кривоватых прототипов, чтобы прояснить, что мы собственно делаем, но для настоящих проектов он слабо подходит. TypeScript и Dart вроде бы что-то помогают, но перфоманс ни к чёрту и приходится изучать особенности компиляторов в js и редактировать собственно скомпилированный код.

Вообще, дело говоришь, тысяча классов - не то что нужно. В первую очередь надо проникнуться принципами KISS и DRY. Эти два супер-паттерна упростят жизнь настолько, насколько это возможно. Первый не позволит строить сложные системы, в которых потом чёрт ногу сломит, а второй заставит использовать ООП там, где это надо. По поводу ООП пару советов, хотя и капитанских:
Кликните здесь для просмотра всего текста
+ Не стоит плодить сущностей, которых нет в области применения ПО и без которых вполне можно обойтись [KISS];
+ Используй инкапсуляцию везде, где это возможно. Инкапсулируй вообще всё. По началу это будет доходить до глупостей, но потом, когда будет набита рука и появиться опыт, можно будет довольно быстро определять возможные потребности в будущем. Вместе с наследованием, можно творить чудеса [DRY].
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.03.2013, 10:47     Программа для игры в покер
Еще ссылки по теме:

Теория игр на примере С3 из ЕГЭ по информатике. Программа, которая выдает стратегии для игры C++
C++ Программа поверх игры

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

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
04.03.2013, 10:47     Программа для игры в покер #47
Ребят, от темы не отходим пожалуйста. Вопрос в теме по С++. А про JavaScript/Java/Erlang etc пожалуйста говорим где-нибудь в другом месте. Еще одно сообщение не по теме и начну тереть.
Yandex
Объявления
04.03.2013, 10:47     Программа для игры в покер
Ответ Создать тему
Опции темы

Текущее время: 08:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru