1 / 1 / 1
Регистрация: 28.07.2013
Сообщений: 41
|
||||||
1 | ||||||
Ошибки в покерной игре: 'players' was not declared in this scope24.05.2015, 18:37. Показов 1722. Ответов 26
Метки нет (Все метки)
Добрый день.
Наверно вы меня уже тихонько ненавидите, но я все же снова напишу сюда Я новичок - самоучка, и от этого у меня много пробелов в знаниях. Решил попробовать написать покерную игру, но получаю ошибку за ошибкой. В данный момент не могу понять, почему компилятор ругается, подскажите пожалуйста. Мой код: Кликните здесь для просмотра всего текста
Вот вывод компилятора: Кликните здесь для просмотра всего текста
Код
hello_world.cpp: In member function 'void Hand::dealToPlayers(short int)': hello_world.cpp:181:40: error: 'players' was not declared in this scope for(vector<Player> :: iterator it = players.begin(); it < players.end(); it++) ^ hello_world.cpp:183:44: error: 'deck' was not declared in this scope (*it).setCardToPlayersHand(deck.front()); ^ Почему он не хочет дружить - ума не приложу... Буду благодарен любым замечаниям! P.S Если у кого то будет время бегло пробежаться по коду - буду премного благодарен замечаниям по общей архитектуре приложения, некорректности код и т. п.. Заранее благодарю!!!
0
|
24.05.2015, 18:37 | |
Ответы с готовыми решениями:
26
'arr' was not declared in this scope 'sum' was not declared in this scope такие вот ошибки.( Ошибки:х1,х2 was not declared in this scope Найти причины и способы исправления ошибки 'clrscr' was not declared in this scope (Dev C++) Найти причины возникновения ошибки "stoi was not declared in this scope" |
45 / 21 / 6
Регистрация: 28.02.2013
Сообщений: 194
|
|||||||||||
25.05.2015, 08:46 | 21 | ||||||||||
hand_evaluator.h
Кликните здесь для просмотра всего текста
hand_evaluator.cpp Кликните здесь для просмотра всего текста
Дальше в развитии идёт фсмка (finite state machine) покера. Которая инкапсулирует в себя все покерные правила (включая неполный райз, множественые боковые банки (side pots) и деление фишек чётко с правилами до цента. Её я планирую выложить в паблик чуть позже. Так вот всё это - полная ерунда в сравнении с тем этапом когда playerу понадобится член ballance
0
|
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
|
||||||
25.05.2015, 13:10 | 22 | |||||
nefton, Если вы любите быструю езду, это не означает что нельзя использовать классы.
С++ для это и был создан чтобы получить максимальную производительность не переходя на прорву мэджикнамберов и не расширяемость.
0
|
45 / 21 / 6
Регистрация: 28.02.2013
Сообщений: 194
|
|||||||||||
25.05.2015, 15:40 | 23 | ||||||||||
аналогично А вот и пошли магические номера. Парадигма enum class подразумевает отказ от номеров (даже порядковых) надо:
Замечу привязка к битовой карте (которая должна быть гдето описанна по русски отдельно) - осталась и все магические номера соответственно Это настолько выше моего понимания что я даже представить не могу что это. А теперь самое интересное чем теоретики отличаются от практиков ))) Hand - рука - вы вообще представляете что это и как с этим работать? она состоит из 5ти карт (но выбирается из 7ми) и самое главное её отношение с другими руками. она их либо "бьёт" либо не бьёт либо они одинаковые где перегрузка операторов >,<,>=,<=,==,!= ??? и главное на что интересно будет похож этот код???? ) Стрит в покере это не просто стрит. стрит 789TJ бьёт 6789T А ещё бывает стрит A2345, А вот стрита KA234 не бывает Да и вообще функция изстрит - просто вспомогательная. Реально надо только 1 функция перевода 7 карт в руку (4х байтное число) которое можно >,<,>=,<=,==,!= И самое главное. Вы действительно думаете что карта в виде класса удобнее? Неужели есть в жизни хоть 1 ситуация где функции string CardToString(card_t card) мало???? Мало того. Мне вообще за годы покер писательства ниразу не приходилось заглядывать внутрь этих файлов.
0
|
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
|
||||||
25.05.2015, 16:58 | 24 | |||||
Я просто скопипастил ваше сжатие.
Я не занимался картами столько лет, точнее я вообще ими не занимался и о покере ничего не знаю Я позволю сделать это компилятору вместо меня Битовая карта конечно осталась, это правда отличная идея сжимать данные, если ими остаётся возможность пользоваться. И собственно я написал лишь компайл тайм сжатие любой руки и не более. ( и я сжал в long, ибо не вкурил быстро ваш вариант) И хотел показать что всё можно инкапсулировать и получить хорушую производительность на вашу фразу:
Сообщение от nefton
Это просто не ООПшный подход, поэтому мне не нравится . Памяти тут экономится несказанно мало, процессор нужно смотреть насколько часто нужно вам строковое представление, предполагаю что вообще никогда , поэтому как-то неважен этот момент, но не тру ООП (если у меня добавить такую штуку, то тоже сжатие изменится) Я играю в покер только пьяным, так что не знаю точно всего этого, сорри Я лишь хотел показать что от ничего не говорящих конструкций:
И я в примере немного загнался, в голове прочно сидел массив карт, поэтому появились constexpr, можно даже легче и без них сжать.
0
|
45 / 21 / 6
Регистрация: 28.02.2013
Сообщений: 194
|
|
25.05.2015, 17:46 | 25 |
Перестаньте писать классы
И рука (7 карт) компонуются в число не для экономии памяти или чегото там, а для того чтоб сравнить руки у 5ти человек к примеру кто победил. Кроме моего подсчёта силы руки есть ещё с десяток вариантов, написанных независимо в разное время в разных частях света. И все они битовые Ну есть конечно не битовые - только все что мне встречались - с ошибками. Тоесть не считают правильно все руки Если бы использование классов реально привело б к хоть какойто удобочитаемости.... но это не тот случай. Тут не будет понятнее с классами. А вот скорость тут очень надо. В самом примитивном калькуляторе эта функция вызывается 100 000 раз при каждом подсчёте вероятностей.
0
|
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
|
|
25.05.2015, 18:34 | 26 |
Иногда когда пишу на яве, я тоже хочу такое сказать )), но в большей степени я за "пишите классы, да не скромничайте", имхо, которое таки доказано немалыми проектами, но имхо, я не хочу холивара
Я понимаю что это для производительности, поэтому и сохранил вашу идею, которая после компиляция превратится в вашу реализацию. И удобочитаемость, это для вас удобно, вы много разных реализаций повидали и понимаете всю математику, а я только вашу, и мне она заходит тяжко. Это как еслиб я вместо инлайна умножение матриц в 3д явно писал))) (конечно неравноценный пример, но всё же). Я не предлагаю переписать вам ваш проект, я за-то чтобы кто будет это читать понимали что есть такая возможность, не только для динамических рук, но и сравнение со статическими руками(разными комбинациями из правил игры)
0
|
1 / 1 / 1
Регистрация: 28.07.2013
Сообщений: 41
|
|
28.05.2015, 16:28 [ТС] | 27 |
Всем спасибо, кто откликнулся, но вы меня напугали я же новичек...
Спасибо за коды, интересно, поучительно, но не все понятно. А так же хотелось бы уточнить: чем плохи классы? Роберт Лафоре учил создавать и не стесняться.
0
|
28.05.2015, 16:28 | |
28.05.2015, 16:28 | |
Помогаю со студенческими работами здесь
27
При запуске в code::blocks появляются ошибки "<название> was not declared in this scope" Список с дробями: Variable or field 'input' declared void 'pd' was not declared in this scope Ошибки "... was not declared in this scope" '...' was not declared in this scope Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |