PDA

Показать полную графическую версию : Алгоритм подсчета покерной руки


Страниц : 1 [2]

Vadikan
04-05-2005, 04:08
покажет все пары, тройки и каре...A как насчет полного дома и двух пар? А, понял...

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

aESThete
04-05-2005, 10:37
Все равно, слишком много переменных вводится, тогда уж лучше массив...
ну, для четырех мастей только три комбинации (пара, тройка, каре), если не считать покера (каре + джокер)
вводить массив не вижу смысла...
ок, рассмотрим гипотетический случай с MaxSuit мастями, MaxFaces количеством карт в каждой масти и MaxCardsOnHand картами в руках игрока, тогда
' упс!.. не заметил в первый раз:
' не стоит проверять по нескольку раз (дубляжи получаются)
For i = 0 to MaxCardsOnHand-1 ' не сравниваем последнюю (а с кем? :))
For j = i+1 to MaxCardsOnHand ' не сравниваем саму с собой и с проверенными ранее (вот они дубляжи!)
If hand(i).face = hand(j).face then ' And i <> j - это условие теперь лишнее
matches(face) += 1
End If
Next j
Next i
' время собирать камни
For i = 0 to MaxFaces
combinations(matches(i)) += 1 ' тут вроде понятно: combinations(2) - количество пар, combinations(3) - количество троек...
Next i
' показываем
For i = 2 to MaxSuits ' "комбинации" младше пары нас не интересуют, да их и нету
if combinations(i) > 0 then
? i;"-к = ";combinations(i)
endif
Next i
' дальше уже смотрим спецкомбинации:
if combinations(2) > 0 and combinations(3) > 0 then
? "фулхаус"
endif
' и т.д.
вроде ниче так получилось :)
но это только одинаковые значения карт.
опять же можно ввести джокеров и даже смотреть их старшинство (b.e. "пара дам с красным джокером" бьет "пару дам с синим")
стриты, флешрояли и иже с ними рассмотрим в следующей главе :)

Vadikan
17-05-2005, 09:46
aESThete
Сорри, я что-то не получил уведомления о последнем сообщении. if combinations(i) > 0 then
? i;"-к = ";combinations(i)
endif
Вот среднюю я строчку я не понял. Поясни, плиз ;-)

Между тем, я получил за проект 100% с комментарием "Очень хороший проект" и в целом за курс А+, что является максимально возможно оценкой. Спасибо всем, кто принял участие в обсуждении :)

aESThete
17-05-2005, 14:23
поздравляю!

if combinations(i) > 0 then ' уже писал в предыдущем посте: combinations(2) - количество пар, combinations(3) - количество троек
? i;"-к = ";combinations(i)
' просто печатает сколько каких комбинаций, например если при i=2 выведет: 2-к=2, то следует читать: двоек[пар] = две
' или при i=3 выведет: 3-к=1 (читай как: троек карт - одна)
endif
if combinations(2) > 0 and combinations(3) > 0 then ' по аналогии - количество пар и кол-во троек карт больше нуля
? "фулхаус"
endif

это что, мне тут на днях (домой в автобусе ехал, мысли витали в облаках :)) пришла мысля,что можно сданные карты (руку) засунуть в граф, где вершинами являются масти и значения карт, создать матрицу смежности графа (или просто создать массив вида H(масть,значение), что в сущности одно и тоже) а потом уж издеваться над этим как угодно: плясать от любой вершины по связям и т.д. (все согласно теории графов ;))
нуууу ооооочень красиво получается
но есть подозрение, что ваш препод тогда или поседеет раньше времени, или в дурку попадет :lol:

Avelyev
04-11-2011, 05:02
Жалко что не на си))) было бы в сто раз понятнее, код хороший, я вот хочу сделать калькулятор шансов (подсчет аутов), велосипед (покерную руку) делать не очень хотелось.




© OSzone.net 2001-2012