45 / 21 / 6
Регистрация: 28.02.2013
Сообщений: 194
|
|
1 | |
Программа для игры в покер28.02.2013, 13:15. Показов 10628. Ответов 46
Метки нет (Все метки)
Никак не могу понять суть ооп.
До прихода в с++ програмировал на С микроконтроллеры. Там всё просто. Есть начало программы, и пишеш инструкции последовательно чтоб устройство работало так, как задумано. Используя регистры, прерывания и тп. Сейчас же выучив немного С++ пытаюсь написать консольное приложение для игры в покер сам с собой. Написал функцию сравнения рук в покере. Даже написал обьект "Автомат игры" для безлимитного холдема для 2-10 чел. (переписывал много много раз) Последняя редакция подкупает своей лаконичностью. В этом обьекте нет "представления" типа ников игроков, аватарок и тп. Нет функции рисования игры в консоле и ввода от пользователя ходов. Вопрос как мне организовать программу чтоб было красиво (понятно) и расширяемо и тп. Вобщем как это делают нормальные програмисты? Вот у меня есть main(). Это точка входа. (в визуал С++ я так её и не нашол когда пытался ) Далее по логике я создаю экземпляры классов какие мне надо в программе. Что дальше? Бесконечный цикл ожидания когда пользователь нажмёт кнопку? И вызов соответствующих функций какихто классов?
0
|
28.02.2013, 13:15 | |
Ответы с готовыми решениями:
46
Программа-бот для игры в покер. Моделирование игры в покер ИИ для игры в покер Клиент-сервер для игры покер |
28.02.2013, 13:31 | 2 |
тут тоже
только goto не используй как в своём асме. И к регистрам и прерываниям никто тебе доступа не даст, когда параллельно с тобой запущено ещё несполько приложений и сама операционка Windows. Ну в принципе да, а что? Методы классов - те же функциии. Вообще всё зависит, например, оконное у тебя приложение или консольное.
0
|
45 / 21 / 6
Регистрация: 28.02.2013
Сообщений: 194
|
|
28.02.2013, 13:48 [ТС] | 3 |
Я дорос до програмирования на С там goto нету (практически)
Пишу консольное приложение. Но я хотел бы писать так, чтоб код был читаемым. И к примеру если завтра я захочу написать это же приложение не консольно - то чтоб мне надо было переделать только 1 маленький фрагмент, а не весь код. Или я захочу изменить логику игры (скажем турнир сделать или игру на деньги просто или игру ботов между собой) И чтоб при этом надо было менять минимум кода, и чтоб всё было последовательно и "лаконично" Пытаясь решить проблему "в лоб" постоянно сталкиваюсь с одной и той же проблемой. Код растёт, читаемость (даже для автора) падает и настаёт момент когда уже ничё не понятно вообще что происходит и что должно происходить. Уверен есть какието стандартные концепции програмирования.
0
|
28.02.2013, 21:28 | 4 |
Я тоже. В принципе одной из задач использования ООП является в том числе избавление от таких вот жалоб, но у меня, например, это не всегда выходит. Иногда, наоборот, злоупотребление ООП и попытка построить свою собственную супергибкую архитектуру только ухудшают читаемость, если руки кривые.
Читай про паттерны. А вообще, даже из программирования контроллеров на чистом Си, ты должен был усвоить, что код нужно разбивать на функции, а функции и их прототипы распихивать в отдельные *.с и *.h файлы. Иногда даже этого достаточно, чтоб упростить большую программу. Ты когда программировал контроллеры пользовался этим???
0
|
4 / 4 / 0
Регистрация: 23.02.2013
Сообщений: 151
|
|
28.02.2013, 21:43 | 5 |
ринципе одной из задач использования ООП является в том числе избавление от таких вот жалоб,
хорошая шутка...
0
|
Антикодер
1804 / 869 / 48
Регистрация: 15.09.2012
Сообщений: 3,081
|
||||||
28.02.2013, 22:05 | 6 | |||||
я лично Дейтела время от времени смотрю(при прочтении первых же глав, вы не будете совершать самые идиотские ошибки в архитектуре). Помоему суть ООП в том, чтобы описывать устройство реального мира в коде. Чтобы понять как должна работать программа, нужно понять как ведут себя объекты в реальном мире.
У Дейтела есть задачка "Написать программку на C++ которая выводит звездочками это
Не по теме: тоже начинал с микроконтроллеров.
0
|
28.02.2013, 22:23 | 7 |
Я тоже раньше так думал. Потом посмотрел, что пишут Явисты(хоть сам на Яве и не пишу). С реальными устройствами там мало что общего. Интерфейсы ради интерфейсов...
В С++ это ощущается в меньшей степени, но тоже. Особенно с распространением паттернов.
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
||||||
28.02.2013, 22:44 | 8 | |||||
И я не сразу понял. Да и понял ли? Для меня ООП- возможность конструировать собственные типы данных с операциями, которые к этим типам применяются.
Я бы так сказал: колея это только моя, выбирайтесь своей колеёй. Читай Дейтела там. Ещё кого. Брайана Оверленда прочти обязательно. Если в Си шаришь начинай там сразу со второй части, где он и объясняет ООП Про ввод данных могу научить. Здесь как раз всё просто для меня по крайней мере. Пишу весь функционал на C++ с допустимостью ввода данных через файл. Ну например твой программа принимает значения: количество игроков и прочую муть. Ты сделай так, чтобы эти данный программа могла считывать с какого-нибудь файла. Например так:
Если в дальнейшем захочешь графику лепить- ну посложнее придётся. А вообще действительно раз о Дейтеле так отзываются, может стоить прочесть? Я вот например берусь за проект- вроде понятна архитектура, а потом по 10 раз переделываю. Надо тоже прочесть как-то.
0
|
45 / 21 / 6
Регистрация: 28.02.2013
Сообщений: 194
|
|
01.03.2013, 17:07 [ТС] | 10 |
Разумеется. Всё по отдельным файлам (но файлов уже 10шт и скоро вырастит это дело в разы) Надо будет их группировать по папкам (если такое возможно)
Функции и данные максимально сгрупированы по классам. И нет повторяющегося кода нигде. Если б мой Visual C++ не позволял сворачивать функции - то я б пол дня только искал чтото. Незнаю как посчитать кол-во строк кода, Но его много И взял себе за правило очень хорошо и русским языком коментировать свои мысли при написании кода (по крайней мере того что пишу основательно). При этом кстати вылазит много ошибок логических, да и понимание того что пишу усваивается лутше. Для себя уяснил 2 вещи. 1. Моя конечная задача - это не работающая программа (как я думал раньше). Ведь та программа которую счас пишу мне вообще не надо. Я ведь её и пишу то для отладки "кирпичиков". А потом я буду писать другую/е программы из тех кирпичиков что отлажу. Так вот моя конечная цель - облегчить себе жизнь в будующем, чтоб у меня было достаточно простых, понятных, отлаженых кирпичиков для написания легко и быстро будующих программ по покеру (чтоб я там ни придумал) 2. Нельзя смешивать по возможности (в одном классе/файле/функции) те части которые предполагается когдато менять и те части которые отлажены, работают и их менять при апгрейдах программы или написании подобных программ не предполагается.
0
|
Антикодер
1804 / 869 / 48
Регистрация: 15.09.2012
Сообщений: 3,081
|
|
01.03.2013, 18:18 | 11 |
При разработке архитектуры приложения, нужно учитывать не только программирование.
Кроме паттернов, которые здесь упоминали нужно учиться анализировать предметную область(для этого существует системный анализ и требования к ПО), методологии программирования(RUP, XP и др), структуру БД, многопоточность и т д. Сейчас в мире для графического представления архитектуры используют UML (так как у русских нету альтернативы на этот счет). Ну и поскольку вы не ответили на вопрос по задаче на всякий случай расскажу вам свою идею. На картинке 4 объекта, а вовсе не 9 строчек, как может показаться. То есть как минимум у нас будет 4 класса для каждого типа фигур и как следствие один класс который обобщает все 4 фигуры - класс Figures. Это пример ситуации когда может пригодиться наследование. В общем для гибкости приложения у меня получилось 17 классов. Конечно сразу написать хорошую архитектуру не получится, для любого(долгоживущего) приложения требуется периодический рефакторинг(побочный процесс для ООП)
0
|
45 / 21 / 6
Регистрация: 28.02.2013
Сообщений: 194
|
|||||||||||
01.03.2013, 19:30 [ТС] | 12 | ||||||||||
Ок, в украине счас 16-24. пошол рисовать оте картинки классами. чуть позже выложу что получилось.
Добавлено через 53 минуты 17-17
17 классов... имхо это явно перебор. Всё думаю зависит от целей зачем мы пишем. О! тоесть получается невозможно ответить на вопрос "какой подход к написанию оптимален в данной ситуации" без подробного описания ситуации. И не просто приложения, а всей жизни приложения начиная от нашей задумки и заканчивая И при выборе того КАК мы будем програмировать мы учитываем только чтоб нам (или другому) было максимально просто и быстро сделать свою работу (не только сдачу проекта, но и последующего сопровождения, апгрейда). Вот например с этими картинками. если задача нарисовать - то однозначно 9 строчек если потом предвидится както работать с этими или подобными фигурками - то надо усложнять Вобщем я понял ответ на свой вопрос в первом сообщении. Мне надо нарисовать на бумажке не приложение, его части, классы и тп. А то, что я или кто другой потом захочет с этим сделать. Варианты развития событий. И уже отсюда отталкиваться.
0
|
24 / 24 / 5
Регистрация: 21.11.2012
Сообщений: 106
|
|
01.03.2013, 19:50 | 13 |
freemind - хорошая программка, годная для проектирования, ну это чтоб вам бумагу не изводить)
0
|
Антикодер
1804 / 869 / 48
Регистрация: 15.09.2012
Сообщений: 3,081
|
||||||||||||||||
01.03.2013, 22:43 | 14 | |||||||||||||||
ну, а теперь представьте ситуацию, что прибежал начальник и сказал, что вместо звездочек должны быть "$", а вместо пробелов ".". Вместо фигур должны быть изображены масти карт, и все они могут отображаться в произвольном порядке по 4-6 шт.. И ещё надо чтоб все фигуры могли быть разного масштаба, например такой ромбик(бубни)
То есть сам код хороший, кроссплатформерный, просто хотел пожелать не увлекаться особо нестандартными библиотеками студии. смущает строчка
0
|
XRuZzz
|
01.03.2013, 23:30
Программа для игры в покер
#20
|
Не по теме: ну надеюсь ТС меня поймёт :scratch:
0
|
01.03.2013, 23:30 | |
Определение ранга комбинации рук для игры Покер Как купить премиум набор для игры в покер Массив карт для игры в покер используя Struct Какой движок выбрать для написания игры в покер Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |