Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - dmutruk

Pages: [1] 2 3
1
Спасибо, заново переделывать уже не буду конечно, но на х32 пожалуй перейду.

2
У меня:
кликкер 4,13,014 x64
винда 10 1809 (17763,503)

И вообще такая конструкция сравнения десятых долей через раз работает. У меня около сотни таких проверок идет и один вариант работает, а скопированный такой же с изменением одной переменной не работает. Пришлось избавиться от такой конструкции, но хотелось бы понять в чем причина такого поведения.

3
Кто может обьяснить почему неверное условие получается и внутрь ифа не входит?

Code: (clickermann) [Select]
arrpush($x, 2.2)
arrpush($x, 14.2)

IF( $x[0] - int($x[0]) = $x[1] - int($x[1]) )
   logwrite("ок")
end_if
halt

4
Quote
Такой бот прокатит там, где народ просто приятно проводит время ничем не рискуя.
Какой "такой"? Прописать распознание комбинаций и все!!!
Дальше каждый будет сам под себя алгоритм игры думать, когда играть, когда нет, когда в олл-ин, а когда блефануть. И только тогда уже можно делать выводу, годится ВАША версия для игры на деньги или нет.

5
Quote
есть предложение адаптировать бота под покерстарс и рубить бабки лопатой
Адаптацией под нужный рум будет заниматься каждый пользователь сам.
Нужно создать общий алгоритм распознания комбинаций.

6
Для начала покажи скрин экрана где рыба не зянята и где занята.
Делай скрин с помощью клавиш ctrl+PrtSc и встявляй в пэинт, потом сохраняй в формате bmp

7
Quote
Это точно правильно?
Спасибо. Это я увидел сразу и потом исправил, но забыл добавить скобку в условие и не поправилось. Уже поправил там.
теперь:
Code: [Select]
16:55:28 Карта 1 = 9.3 / Карта 2 = 9.2
16:55:28 подряд карт: 1
16:55:28 Слабые карты - Сбрасываем

8
Префлоп анализировать я его научил. После того как делаем ход по одному из моих вариантов уже нужно подключать будущие анализаторы комбо.

Code: (clickermann) [Select]
//Префлоп
$card_1 = 9.2   //  9
$card_2 = 9.3  // 10

LOGWRITE ("Карта 1 = ", $card_1, " / ", "Карта 2 = ", $card_2 )


// загоняем их в массив
ARRPUSH($all, INT($card_1))
ARRPUSH($all, INT($card_2))

// сортируем массив по возрастанию
$len = ARRSIZE($all)
FOR($num=0, $num < $len - 1)
   $min = $all[$num]
   $ind = $num
   FOR($i=($num+1), $i < $len)
      IF($all[$i] < $min)
         $min = $all[$i]
         $ind = $i
      END_IF
   END_CYC
   $minimum =  $all[$ind]
   $all[$ind] = $all[$num]
   $all[$num] = $minimum
END_CYC

// ранг меньшей карты в руках
$min_card_preflop_podr = $all[0]

// считаем сколько карт есть подряд
$podr = 1
FOR($i=0, $i < $len-1)
   IF($all[$i] = $all[$i+1] - 1)
      INC($podr)
   ELSE
      $podr = 1
   END_IF
   IF($podr = 5)
      $i = 100 // прерываем
   END_IF
   LOGWRITE ("подряд карт: ", $podr)
END_CYC

// МАСТЬ
UNDEFINE($all)
ARRPUSH($allm, $card_1)
ARRPUSH($allm, $card_2)

//массив количества карт по мастям
ARRPUSH($mast_count, 0)
ARRPUSH($mast_count, 0)
ARRPUSH($mast_count, 0)
ARRPUSH($mast_count, 0)

// сколько карт по мастям
FOR($i=0, $i < ARRSIZE($allm))
   $card = $allm[$i]
   $m = ($card - INT($card)) * 10
   $mast_count[$m-1] = $mast_count[$m-1] +1
END_CYC

// Обе ли карты одной масти
FOR($i=0, $i < ARRSIZE($mast_count))
   IF($mast_count[$i] > 1)
      LOGWRITE("Две карты масти  ", $i+1)
      $mast_preflop = 1
   END_IF
END_CYC

// *****ВАРИАНТЫ ДЕЙСТВИЙ НА ПРЕФЛОПЕ*****

IF(($min_card_preflop_podr < 10) & ($mast_preflop = 1) & ($podr = 2))
   // Вариант 6
   LOGWRITE ("карты идут подряд, одной масти, обе ниже 10")
ELSE
   IF(($min_card_preflop_podr < 10) & ($podr = 2))
      // Вариант 7
      LOGWRITE ("карты идут подряд, разной масти, обе ниже 10")
   ELSE
      IF(($min_card_preflop_podr > 9) & ($mast_preflop = 1) & ($podr = 2))
         // Вариант 4
         LOGWRITE ("карты идут подряд, одной масти, обе выше 10 включительно")
      ELSE
         IF(($min_card_preflop_podr > 9) & ($podr = 2))
            // Вариант 5
            LOGWRITE ("карты идут подряд, разной масти, обе выше 10 включительно")
         ELSE
            IF(($min_card_preflop_podr > 9) & ($mast_preflop = 1))
               // Вариант 2
               LOGWRITE ("обе карты выше 10 включительно и одной масти(но не подряд)")
            ELSE
               IF(INT($card_1) = INT($card_2) & ($min_card_preflop_podr > 9))
                  // Вариант 1
                  LOGWRITE ("обе карты одного ранга выше 10 включительно(ПАРА)")
               ELSE
                  IF($min_card_preflop_podr > 9)
                     // Вариант 3
                     LOGWRITE ("обе карты выше 10 включительно и разной масти(но не подряд)")
                  ELSE
                     // Слабые карты - Сбрасываем
                     LOGWRITE ("Слабые карты - Сбрасываем")
                  END_IF
               END_IF
            END_IF
         END_IF
      END_IF
   END_IF
END_IF
HALT

Вроде работает:
Code: [Select]
16:08:06 Карта 1 = 9.1 / Карта 2 = 8.2
16:08:06 подряд карт: 2
16:08:06 карты идут подряд, разной масти, обе ниже 10

16:09:55 Карта 1 = 9.1 / Карта 2 = 11.2
16:09:55 подряд карт: 1
16:09:55 Слабые карты - Сбрасываем

16:11:58 Карта 1 = 9.1 / Карта 2 = 9.2
16:11:58 подряд карт: 1
16:11:58 обе карты одного ранга выше 10 включительно(ПАРА)

16:15:47 Карта 1 = 11.1 / Карта 2 = 12.2
16:15:47 подряд карт: 2
16:15:47 карты идут подряд, разной масти, обе выше 10 включительно

Сейчас еще подумаю как сюда подставить:
Quote
По тузу можно так...
Если в картах есть туз, модуль/подпрограмма определения стрита вызывается 2 раза
В первый раз ей передаётся туз как 14, во второй раз как 2.

9
Quote
Для стрита ещё можно возвращать номер комбинации 1-9
5.1 - старшая карта  шестёрка
5.2 - старшая карта семёрка
...
5.9 - старшая карта туз

Если так и делать, то стритов 10
От туза до 5
от 2 до 6
от 3 до 7
и т.д до туза.
Но все же считаю это лишним. Так как для сравнения еще и возможных комбинаций у противников надо морочить голову. На первоначальном этапе было бы достаточно просто определять комбо, без их ранга. Выпал стрит, действуем по условию стрита, флеш - по условию флеша. А возвращать ранг комбинации просто для информативности - лишнее. имхо

10
Из первых вариантов от Vint'а делаю сейчас действия при условиях:
1) Если обе карты одного ранга выше 10 включительно (пара) - Повышаем или равняем в случае, если сумма повышения вынуждает нас сделать Ва-банка, на все деньги) Или идем Ва-банк. Рандомно решает.
2) Если обе карты выше 10 включительно и одной масти(но не подряд) - Повышаем или равняем в случае Ва-банка, на все деньги)
3) Если обе карты выше 10 включительно и разной масти(но не подряд) - Равняем ставку, но сбрасываем  в случае Ва-банка, на все деньги)
4) Если карты идут подряд, одной масти, обе выше 10 включительно - Повышаем ставку или в случает Ва-банка  рандомно решаем равнять в или нет.
5) Если карты идут подряд, разной масти, обе выше 10 включительно - Равняем ставку или в случает Ва-банка  рандомно решаем равнять в или нет.
6) Если карты идут подряд, одной масти, обе ниже 10 - Рандомно решаем равнять или повышать ставку. НО сбрасиваем, если для сравнения ставки нужно делать Ва-банк
7) Если карты идут подряд, разной масти, обе ниже 10 - Равняет ставку. НО сбрасиваем, если для сравнения ставки нужно делать Ва-банк

Но у меня пока проблема возникла. Туз может быть как самая маленькая карта в стрите (Туз-2-3-4-5)так же и как самая большая в стрите (10-валет-дама-король-туз). Туз у нас число 14, как его сделать, чтобы туз был числом 1 в первом стрите и 14 во втором? И когда в руке туз-2, действовало по варианту 6-7 или король-туз по вариантам 4-5, в зависимости от масти?

11
Извиняюсь, если где-то не так выразился и не то спросил. В голове у меня был алгоритм, который оказался не верным. Но в ходе ваших подсказок я понял, что нужно делать совсем иначе. За это большое спасибо.
Quote
Нужно делать два типа анализа ситуации.
Какие комбинации у нас УЖЕ есть с учётом открытых карт.
Какие комбинации у нас могут быть.
Да, вот это как раз в точку.
Quote
Если не нужно заглядывать вперёд больше чем на 1 карту, тогда проще.
Я думаю, что не нужно. Вначале когда на руки дают 2 карты, бот будет играть только с определенными картами. Допустим со всеми картами выше 10 (если обе карты такого ранга), а если они меньше, то можно играть только с  идущими подряд, например, (5,6) или (2,3) . Когда он решит играть дальше, нужно будет оценивать. Но загадывать на 2 карты вперед не нужно, на 1 вполне хватит. Ибо таких ситуаций, когда допустим до стрита не хватает 2 карты, и чтобы из 2 карт зашли обе нужные %-вероятности маленький.

12
Я прошу помочь с общим алгоритмом для всех. На данный момент делаю под покер-рум Poker Mira. Снимайте нужные карты в базу да и все и подставляйте.
А я думаю, что нужно сделать вот так:
Делаем шаблоны всех комбинаций, условно для каждой комбинации нужное кол-во "ячеек", в массивах не оч я ещеЮ но уже начинаю осваивать.
// Пара
Две ячейки, в которые могут поместится только карты одинакового достоинства
// Две пары
Четыре ячейки, для 2х разных пар
// Сет
Три ячейки для трех карт одинакового достоинства
и т.д.

Раздаются карты, сначала 2шт, делается проверка по всех шаблонах. Максимальная комбинация Пара.
Потом еще 3 карты на стол дают, снова анализируются из всех шаблонов. На руках может быть карты 5-6, а на столе 8-9-Туз. В этом случает у нас почти собран Стрит (5 карт подряд, в этом случае 5-6-7-8-9). Как видим нам не хватает 7ки для сложившейся комбинации. НО на стол дальше приходит еще 1 карта, снова анализируем и делаем вывод. Допустим падает Двойка. У нас снова нету комбинации, но есть последняя карта, которая еще выпадает на стол.
По выше указанному коду не выйдет научить бота понимать, что у него еще есть шансы для сбора комбинации.

Алгоритмы, действий при разных комбинациях (Сбрасывать, Равнять ставку, Подымать ставку, Делать Ва-Банк) я сам сделаю и выложу сюда, но вначале нужно вышеуказанные проблемы решить.
Выложу описание возможных комбинаций в покере, шаблоны которых нужно сделать:
[spoiler]// Пара
Две карты одного ранга

// Две пары
Две карты одного ранга и две другого

// Сет
3 карты одного ранга

// Стрит
5 последовательных карт
(туз может использовать как самая старшая, так и как самая младшая карта)
Пример, когда туз самая младшая карта: Туз-двойка-тройка-четверка-пятерка
Пример, когда туз самая старшая карта : Десятка-валет-дама-король-туз

// Флеш
5 любых карт одной масти

// Фул хаус
3 карты одного ранга и пара (То есть пара + сет)

// Каре
4 карты одного ранга

// Стрит фшел
5 последовательных карт одной масти. (То есть тот же стрит, только когда еще все карты, которые делают стрит еще и одной масти)

// Флеш рояль
5 старших карт одной масти
A,K,Q,J,10 и все одной масти - Самая сильная комбинация в покере. [/spoiler]

Каждая комбинация содержит в себе 5 карт (Даже пара, хоть там и нужно только 2 карты, но тогда еще учитываются карты которые есть еще так называемые КИКЕРА, НО этим можно пренебречь) .  Всего карт, которые мы видим 7. Две нам дают на руки, которые видим только мы и 5 карт на стол для всех игроков.

13
Подряд-то 3, но для стрита на столе лежат 4 карты, не хватает карты с середины, восьмерки.

14
Все таки нужно делать шаблоны и смотреть сколько недостающих карт до комбинаций. И просматривать не 1 шаблон, а все 9 , так как игровых комбинаций 9, не учитывая просто Кикер.

15
Изменил немного
Code: (clickermann) [Select]
$card_1 = 5    // 5
$card_2 = 9   // 9
$card_3 = 6    // 6
$card_4 = 11   // валет
$card_5 = 7   // 7
$card_6 = 14   // туз
$card_7 = 0    //  еще не зашла нужная 8

и в итоге
Code: [Select]
17:45:20 0
17:45:20 5
17:45:20 6
17:45:20 7
17:45:20 9
17:45:20 11
17:45:20 14
17:45:20 подряд карт: 1
17:45:20 подряд карт: 2
17:45:20 подряд карт: 3
17:45:20 подряд карт: 1
17:45:20 подряд карт: 1
17:45:20 подряд карт: 1
17:45:20 подряд идущих карт: 1

Как это исправить? Вить когда есть еще шанс на нужную карту можно играть. Тока подумал про это(

Pages: [1] 2 3