Advertisement
Doob

handanalys

May 11th, 2015
311
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.56 KB | None | 0 0
  1. -- функция перебора выдает 21 комбинаций по 5 карт, сортируем по возрастанию
  2. -- на входе у нас 5 карт, считаем масти - получаем флеш true/false
  3.  
  4. -- считаем карты, если какие-то карты ==4, то карэ/ если какие-то карты ==3 и другие карты ==2, то фх, иначе трипс
  5. -- если какие-то карты ==2 и другие ==2, то две пары, иначе пара
  6. -- последняя карта - старшая
  7.  
  8. local tFaces = {'2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K', 'A'}
  9. local sstr = {'3h', 'Ac', '9h', '3s', '2c', '9d', '6c'}
  10. local str = {'Tc', 'Ac', 'Kc', 'Jc', 'Qc'}
  11. tTmp = {}
  12. tFaceH, tSuitH = {}, {}
  13.  
  14. local function counter(tbl) -- счетчик? какой-то костыль...
  15.   t = {}
  16.   for z = 1, #tbl do
  17.     if t[tbl[z]] then
  18.       t[tbl[z]] = t[tbl[z]]+1
  19.     else
  20.       t[tbl[z]] = 1
  21.     end
  22.   end
  23.   return t
  24. end
  25.  
  26. local function cuter(tbl) -- отделяет значение карты от масти
  27.   for c = 1, #tbl do
  28.     tFaceH[c] = string.sub(tbl[c], 1, 1) -- отрезаем значение карты от масти
  29.     tSuitH[c] = string.sub(tbl[c], 2, 2) -- отрезаем значение масти от карты
  30.   end
  31.   return tFaceH, tSuitH -- возвращаем таблицы с результатом
  32. end
  33.  
  34. local function tonumb(tbl) -- преобразование значения карты в число 1-13, принимает таблицу вида {'A', '2', 'T'...
  35.   -- возвращает {'13', '1', '9'...
  36.   for r = 1, #tFaces do -- проходим по таблице значений, индексы - числовые значения карты
  37.     for e = 1, #tbl do -- проходим по таблице с картами
  38.       if tbl[e] == tFaces[r] then -- если нашли совпадение, то
  39.         tbl[e] = r -- присваиваем на место карты ее числовое значение
  40.       end
  41.     end
  42.   end
  43.   return tbl -- возвращаем числовые значения карт
  44. end
  45.  
  46. local function toface(tbl)
  47.   for r = 1, #tFaces do
  48.     for e = 1, #tbl do
  49.       if tbl[e] == r then
  50.         tbl[e] = tFaces[r]
  51.       end
  52.     end
  53.   end
  54.   return tbl
  55. end
  56.  
  57. local function ssort(tbl) -- сортирует таблицу в порядке возрастания значений
  58.   --принимает таблицу вида {'2c', '3c', '4c', '6c', '5c'}
  59.   tbl = tonumb(tbl)
  60.   for i = 1, #tbl do -- перебираем...
  61.     m = i
  62.       for j = i+1, #tbl do
  63.         if tbl[m] > tbl[j] then m = j end -- если это значение больше предыдущего
  64.       end
  65.     tbl[i], tbl[m] = tbl[m], tbl[i] -- меняем местами значения
  66.   end
  67.   tbl = toface(tbl)
  68.   return tbl -- возвращаем отсортированную таблу
  69. end
  70.  
  71. local function test_flush(ftbl) -- проверка на флаш, принимает таблицу мастей ({'c','h','s','d','c'}), выдает true/false
  72.   amounts = counter(ftbl)
  73.   for key, value in pairs(amounts) do -- считаем масти
  74.     if value == 5 then -- если = 5, то
  75.       f = true  -- flush есть
  76.     else f = false -- иначе нет
  77.     end
  78.   end
  79.   return f -- вернуть есть/нет
  80. end
  81.  
  82. local function test_straight(stbl) -- принимает таблицу {'A', 'T', 'Q', '9'...
  83.   s_stbl = table.concat(stbl) -- конвертируем в строку
  84.   s_straight = 'A23456789TJQKA' -- создаем строку стритов
  85.   b_straight = false -- состояние
  86.   straight_p = 0  -- сила стрита
  87.   for f = 1, 10 do
  88.   print(string.sub(s_stbl, 1, 5), ' ', string.sub(s_straight, f, f+4))
  89.     if string.sub(s_stbl, 1, 5) == string.sub(s_straight, f, f+4) then
  90.       b_straight, straight_p = true, f
  91.     end
  92.   end
  93.   return b_straight, straight_p -- возвращаем true/false и силу руки
  94. end
  95.  
  96. local function test_pairs(tbl)
  97.   local amounts = counter(tbl)
  98.   for key, value in pairs(amounts) do
  99.     tTmp[key] = value
  100.   end
  101.   return tTmp
  102. end
  103.  
  104. local face, suit = cuter(str)
  105. face = ssort(face)
  106.  
  107. --проверка на рояльфлеш
  108. if test_flush(face) == true and table.concat(test_straight(face)) == true10 then
  109.   print('WOW!')
  110. else
  111. -- поиск каре
  112.   tTmp = test_pairs(face)
  113.   for i = 1, #tTmp do
  114.     if tTmp[i] == 4 then
  115.       print('kare')
  116.     elseif tTmp[i] == 3 then
  117.       print('three')
  118.     end
  119.   end
  120. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement