|
1 / 1 / 0
Регистрация: 08.07.2016
Сообщений: 40
|
||||||
Перекод кода игры Покер с С++ на C#08.07.2016, 18:39. Показов 11808. Ответов 47
Метки нет (Все метки)
Я разрабатываю (громко сказано) свою карточную игру покер. В интернете нашёл код этой игры на С++ для консоли. Помогите пожалуйста перевести его на C#. С уважением. Код поделён на два поста, так как слишком большой.
Часть 1.
1
|
||||||
| 08.07.2016, 18:39 | |
|
Ответы с готовыми решениями:
47
Моделирование игры в покер
ИИ для игры в покер |
|
140 / 72 / 26
Регистрация: 29.06.2015
Сообщений: 186
|
|||
| 23.07.2016, 20:27 | |||
|
Первый цикл до 4, второй до 13.
1
|
|||
|
0 / 0 / 2
Регистрация: 17.07.2016
Сообщений: 28
|
|
| 23.07.2016, 20:31 | |
|
0
|
|
|
140 / 72 / 26
Регистрация: 29.06.2015
Сообщений: 186
|
|
| 23.07.2016, 20:32 | |
|
1
|
|
|
0 / 0 / 2
Регистрация: 17.07.2016
Сообщений: 28
|
||||||
| 23.07.2016, 20:39 | ||||||
|
Только теперь я вообще запутался. У меня не класс Deck вообще не работает. Или работает, только я не знаю, как это проверить. Как вывести все значения на консоль?
Добавлено через 2 минуты Я не понимаю, как вы присваиваете значения в цикле класса Deck, если в конце просто указываете new Card;. Когда у автора там стоят значения переменных цикла i и j. Добавлено через 3 минуты У меня вот это так выглядит пока. Ошибок нет.
0
|
||||||
|
140 / 72 / 26
Регистрация: 29.06.2015
Сообщений: 186
|
||||||||||||||
| 23.07.2016, 20:45 | ||||||||||||||
Добавлено через 1 минуту Чтоб вывести на екран создайте метод, который выводит данные и вызовите его в Main.
1
|
||||||||||||||
|
0 / 0 / 2
Регистрация: 17.07.2016
Сообщений: 28
|
|
| 23.07.2016, 21:00 | |
|
В общем у меня ничего не получилось. Пойду учиться дальше.
0
|
|
|
140 / 72 / 26
Регистрация: 29.06.2015
Сообщений: 186
|
||||||||||||
| 23.07.2016, 21:04 | ||||||||||||
В Main:
1
|
||||||||||||
|
0 / 0 / 2
Регистрация: 17.07.2016
Сообщений: 28
|
|
| 23.07.2016, 21:06 | |
|
Спасибо конечно, но у меня проблемы на базовом уровне. Я банально не знаю, как сделать метод. Я лучше пойду почитаю ещё
0
|
|
|
140 / 72 / 26
Регистрация: 29.06.2015
Сообщений: 186
|
|
| 23.07.2016, 21:07 | |
|
Deck - это большая коробка с картами.
Card - это отдельная карта. У каждой карты есть поля Rank и Suit. Когда мы проходимся по массиве карт в конструкторе - мы сначала говорим что в этом месте у меня будет карта (выделяем память), а потом что то в нее записываем.
1
|
|
|
0 / 0 / 2
Регистрация: 17.07.2016
Сообщений: 28
|
|
| 23.07.2016, 21:10 | |
|
irises, да я уже попробовал Ваш код. Он сработал. Дальше по плану перемешивание колоды и задать значение цифрам Suit и Rank буквы, где это необходимо, но, думаю, я с этим справлюсь.
0
|
|
|
140 / 72 / 26
Регистрация: 29.06.2015
Сообщений: 186
|
||||||||||||
| 23.07.2016, 21:11 | ||||||||||||
|
Тоесть нужно создать обьект класса:
1
|
||||||||||||
|
0 / 0 / 2
Регистрация: 17.07.2016
Сообщений: 28
|
|||||||||||||||||||||||||||||||||||||||||
| 24.07.2016, 17:52 | |||||||||||||||||||||||||||||||||||||||||
|
В общем я сейчас ухожу по делам своим. Оставлю тут всё, что я смог сделать. Может быть, кто-нибудь, да поможет
![]() Класс Program Кликните здесь для просмотра всего текста
Класс Card Кликните здесь для просмотра всего текста
Класс Deck Кликните здесь для просмотра всего текста
Класс Player Кликните здесь для просмотра всего текста
Класс PokerGame Кликните здесь для просмотра всего текста
Добавлено через 5 часов 24 минуты Так значит. Общими усилиями я сделал колоду карт и смог её всю вывести на консоль. Как мне теперь её перемешать и также вывести на консоль?
В main добавляем:
Вроде бы мне кажется всё нормально, но не могу вывести на консоль перемешанный массив. Я запутался. Кликните здесь для просмотра всего текста
Добавлено через 11 минут Да, я уже читаю Игра "Покер": как сгенерировать неповторяющиеся случайные числа Добавлено через 3 минуты Но, если честно, то мне нужно больше для самообучения, чем для прогресса создания игры. Поэтому жду ваших отзывов о том, что у меня в коде не так. Добавлено через 13 минут https://blogs.msdn.microsoft.c... 05/08/o-x/ А как установить XNA на VS2015? Добавлено через 14 минут Нашёл на GitHub пару готовых покер проектов. Отличное подспорье для обучения ![]() https://github.com/NikolayIT/TexasHoldemGameEngine https://github.com/ccqi/TexasHoldem
0
|
|||||||||||||||||||||||||||||||||||||||||
|
140 / 72 / 26
Регистрация: 29.06.2015
Сообщений: 186
|
|||||||||||||||||||
| 24.07.2016, 23:32 | |||||||||||||||||||
Единственное чтоб поменяла - это генерирование числа, мне кажется лучше сразу генерировать число с определенного промежутка:
Вместо етого:
1
|
|||||||||||||||||||
|
0 / 0 / 2
Регистрация: 17.07.2016
Сообщений: 28
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 25.07.2016, 10:41 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Ура! Заработало! Я смог сделать чтобы колода перемешивалась! Спасибо irises!
В мейн:
Кликните здесь для просмотра всего текста
Добавлено через 2 минуты В оригинале на С++ в самом начале стоит вот это:
Добавлено через 4 минуты И ещё. Перед циклом перемешивания я создал переменную int b. Если я её удалю и создам непосредственно в цикле, то это как-нибудь хуже или лучше? Что изменилось? Добавлено через 28 минут И я не понимаю, как переменные ranks и suits заменяют значения Rank и Suit. То есть буквы цифрами. Добавлено через 43 минуты Как я понял, то один и тот же индекс в cards - это число от 0 до 51? А ranks и suits для выявления ранка и масти?
Можно ли как-нибудь сделать так, чтобы, например cards[0], обозначал и ранк и масть сразу, только при указании одного индекса, а не так как у меня сейчас? Добавлено через 27 минут Чувствую, что где-то ошибка в перемешивании колоды, но не знаю где. Добавлено через 2 минуты В общем такая закономерность наблюдается, что первые 5-7 чисел идут с буквой d, а букв c, практически никогда не бывает. Добавлено через 7 минут Попробовал вот так. Вроде бы нормально стало.
Я пошёл дальше и создал класс CompareHands Кликните здесь для просмотра всего текста
Теперь нужно заполнить все методы. Я даже не знаю с чего начать. Единственное, что могу сказать, что они все расположены по силе. От старшего к младшему. Начну с самого старшего RoyalFlush. Это значит, когда на БОРДЕ и у ИГРОКА есть комбинация из пяти карт одной масти по убыванию Ac,Kc,Qc,Jc,10c. И только в таком порядке. По сути это тот же самый StraightFlush, но я его специально выделил, так как RoyalFlush сильнее. Ещё момент, что нужна комбинация из пяти карт, когда в момент вскрытия будет семь карт. Нужно как-то вычислить пять подходящих, для RoyalFlush, карт. Если нет, то переходим к комбинации слабее и так далее до самой младшей. А сравнить силу руки между игроками можно сложив вместе пять, уже готовых карты, которые показывают общую руку для тот или иного игрока, значений ранков, и сравнить результаты между игроками. У кого число больше, тот и выиграл. Например у обоих игроков два флеша, но у одного игрока сумма ранков больше, чем у другого, значит он победил. Добавлено через 2 минуты Честно говоря, я не совсем понял структуру кода сравнений рук в оригинальном коде. Поэтому спрашиваю тут, как это всё можно организовать. Добавлено через 9 минут Ещё я создал класс Player. Мне нужно как-то добавить в PlayerHand значения из колоды карт [0] и [1].
В общем вот весь код, чтобы было представление. Program: Кликните здесь для просмотра всего текста
Card: Кликните здесь для просмотра всего текста
Player: Кликните здесь для просмотра всего текста
Deck: Кликните здесь для просмотра всего текста
CompareHands: Кликните здесь для просмотра всего текста
0
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
140 / 72 / 26
Регистрация: 29.06.2015
Сообщений: 186
|
|||||||||||||
| 25.07.2016, 12:00 | |||||||||||||
Чтоб это сделать в C# нужно класс Card унаследовать от интерфейса IComparable и переопределить метод CompareTo. Тогда чтоб отсортировать массив карт на руках можно воспользоватся статическим методом Array.Sort(cardsOnTheHands), где cardsOnTheHands - массив карт на руках.
1
|
|||||||||||||
|
0 / 0 / 2
Регистрация: 17.07.2016
Сообщений: 28
|
|||||||||||||||||||||||||||||||
| 25.07.2016, 14:53 | |||||||||||||||||||||||||||||||
|
irises, спасибо. Я не совсем понял, как сделать лучше создание колоды, она, как по мне, и так хороша. Я попробую сделать самостоятельно выявление старшей карты у обоих игроков. Когда сделаю покажу сюда.
Добавлено через 15 минут У меня возникли небольшие трудности. Попробую описать алгоритм на словах. 1. Создаём переменные Player1Hand и Player2Hand, в которые входят значения массива с индексами, для игрока 1 индексы 0, 1, 46, 47, 48, 49, 50, а для игрока 2 - 2, 3, 46, 47, 48, 49, 50. 2. Теперь сортируем массивы по старшинству (Rank) для каждого из игроков. 3. Выбираем пять первых индексов, в которых содержатся пять первых старших чисел из семи, и складываем их. 4. Суммы для каждого из игроков сравниваем между собой. У кого сумма больше, тот победил. А если равны, то ничья. Результаты записываем в переменные и выводим на консоль. Игрок 1 (Победы): , Игрок 1 (Поражения): , Игрок 1 (Ничьи): Добавлено через 11 минут Вот что у меня не так?
Мне нужно сделать массив из уже готовых значений. Добавлено через 2 минуты Так тоже не работает ![]()
Вот, вроде, получилось:
Но при WriteLine не выводит значения массива, а пишет, что это String. Добавлено через 14 минут Есть тут кто-нибудь кроме irises, а то я начну создавать новые темы с моими вопросами и их будет очень много Просто хочу уложиться в рамки этой темы. Тут всё равно про покер всё. А я как раз пытаюсь перекодировать и учиться одновременно.Добавлено через 52 минуты Кажется разобрался ![]()
Я захотел сделать счётчик побед и поражений, но у меня он не идёт, а сбрасывается каждый раз. Не понимаю почему.
В главном методе не получается так сделать, так как все переменные находятся в другом классе и могут использоваться только там. Просто счётчик раздач работает, потому что я переменную а вынес за пределы цикла. А тут сдаюсь.
0
|
|||||||||||||||||||||||||||||||
|
140 / 72 / 26
Регистрация: 29.06.2015
Сообщений: 186
|
||||
| 25.07.2016, 18:14 | ||||
|
Вы создаете массив карт и потом делаете равнозначные массивы ranks и suits (Вы предполагаете что у первая карта точно будет "2с"), но потом Вы перемешиваете карты, а массиви ranks и suits так и стоят на месте, их Вы не трогаете. Чтоб это решить можно: 1. когда мешаете карты сразу и мешать массиви ranks и suits 2. доработать класс Card Почему плохой первый способ - нужно все время сделать одновременно за тремя массивами: cards, ranks, suits Почему второй способ лучше: + все данные о карте всегда будут с ней + намного проще работать лишь за одним массивом + сделает код более понятным. Добавлено через 4 минуты
1
|
||||
|
0 / 0 / 2
Регистрация: 17.07.2016
Сообщений: 28
|
|
| 25.07.2016, 18:50 | |
|
Я запутался и так
Я даже не знаю, если вы за меня всё сделаете, пойму ли я?
0
|
|
|
140 / 72 / 26
Регистрация: 29.06.2015
Сообщений: 186
|
||||||||||||
| 25.07.2016, 21:28 | ||||||||||||
|
Нужно создать класс Card, который будет выглядеть вот так:
Если перемешиваем карты, то сразу вся информация о карте держится в ней. Это очень удобно. Даже супер удобно (как хорошо что придумали ООП).
1
|
||||||||||||
|
0 / 0 / 2
Регистрация: 17.07.2016
Сообщений: 28
|
||||||
| 26.07.2016, 08:08 | ||||||
0
|
||||||
| 26.07.2016, 08:08 | |
|
Обсуждение карточной игры покер
Клиент-сервер для игры покер Программа-бот для игры в покер. Советы по оптимизация реализации игры в покер Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|
|
Создание формы заимствованного документа
Maks 03.08.2026
Задача:
Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также
табличная часть со следующими реквизитами:
- Расчетный счет покупателя. . .
|
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача:
В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
|
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов.
Логика кажется понятной:
1. Находим ключевые слова.
2. Добавляем их на. . .
|
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302
Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
|