III. Скриптовый язык Lua и его использование в программе

Для задания расчетных значений используется скриптовый язык Lua. Общий принцип работы такой: из программы в скрипт передаётся несколько необходимых значений, с помощью скрипта программа делает необходимые вычисления и возвращает результат, который в дальнейшем отображается в интерфейсе.

Что же такое Lua? Lua — язык программирования, предназначенный для встраивания в другие приложения, чтобы дать их пользователям возможность писать конфигурационные скрипты и высокоуровневые сценарии. Lua поддерживает процедурный, объектный и функциональный стили программирования, но является в то же время простым языком.

В интернете достаточно много ресурсов с описанием синтаксиса Lua, поэтому в данном документе он не будет описываться, а посмотреть его можно, например, на этом сайте или здесь. 

Файл со скриптом называется script.lua и находится в той же папке, где и файл MiniLuaFormulaTimer.exe. Программа из скрипта вызывает функцию myFunc(dSB,dBB,dMoney,nHands,nCur,nSec). Название функции и параметры менять нельзя, иначе программа работать не будет! Всё остальное менять можно.

В скобках указаны параметры, которые можно использовать в своих расчетах:

  • dSB – размер малого блайнда (в центах);
  • dBB – размер большого блайнда (в центах);
  • dMoney – сколько денег Вы выиграли/проиграли за nHands (в долларах )
  • nHands – количество рук используемых в подсчёте dMoney (как правило nHands = 1 раздача)
  • nCur – валюта (целое число для обозначения валюты), в которой была данная раздача (0 – USD, 1 – EUR, 2 - GBP);
  • nSec – общее игровое время за сессию в секундах (оно же выводится в верхней строке окна программы).

Примеры рабочих скриптов, которые можно использовать в нашей программе. Во всех скриптах используются следующие функции: playmusicfile – проигрывает звуковой файл, roundh – округляет число до сотых.

Пример 1. Ведёт подсчёт денег за текущую сессию и выдает звуковой сигнал, когда выходим за рамки заданных значений (Рис. 6Б).

function playmusicfile(filename)
-- create an audio device using default parameters and exit in case of errors
require("proAudioRt")
if not proAudio.create() then return end
-- load and play a sample:
sample = proAudio.sampleFromFile(filename)
if sample then proAudio.soundPlay(sample) end
-- wait until the sound has finished:
while proAudio.soundActive()> 0 do
proAudio.sleep(0.05)
end
-- close audio device
proAudio.destroy()
return 1
end
function roundh(value)
local v = value
v = v*100
v = v + 0.5
v = math.floor(v)
v = v*0.01
return v
end
do
local loch=0 8
local dSumMoney = 0.0
local Hands = 0
local s = 'Money '
local nAlarmProfit = 0
local sound = 0
function myFunc(dSB,dBB,dMoney,nHands, nCur, nSec)
dSumMoney = dSumMoney + dMoney
if dSumMoney > -5 then nAlarmProfit = nAlarmProfit + 1 end
if nAlarmProfit == 1 and sound == 0 then
playmusicfile("sample.ogg")
sound = 1
end
Hands = Hands + nHands
--WinRate = (dSumMoney/Hands)*100/dBB
return s..roundh(dSumMoney)
--return dSumMoney..WinRate
end
end

 Пример 2. Ведём подсчёт винрейта (количество ББ на 100 рук) за текущую сессию и выдаем звуковой сигнал, когда выходим за рамки заданных значений

function playmusicfile(filename)
-- create an audio device using default parameters and exit in case of errors
require("proAudioRt")
if not proAudio.create() then return end
-- load and play a sample:
sample = proAudio.sampleFromFile(filename)
if sample then proAudio.soundPlay(sample) end
-- wait until the sound has finished:
while proAudio.soundActive()> 0 do
proAudio.sleep(0.05)
end
-- close audio device
proAudio.destroy()
return 1
end

function roundh(value)
local v = value
v = v*100
v = v + 0.5
v = math.floor(v)
v = v*0.01
return v
end

do
local loch=0
local dSumMoney = 0.0
local Hands = 0
local s = 'Money '
local nAlarmProfit = 0
local sound = 0

function myFunc(dSB,dBB,dMoney,nHands, nCur, nSec)
dSumMoney = dSumMoney + dMoney
if dSumMoney > -5 then nAlarmProfit = nAlarmProfit + 1 end
if nAlarmProfit == 1 and sound == 0 then
playmusicfile("sample.ogg")
sound = 1
end
Hands = Hands + nHands
WinRate = (dSumMoney/Hands)*100/dBB
return roundh(WinRate)
end
end

Результаты видны на следующем рисунке

Винрейт и количество денег, посчитанное по одновременно запущенной программе MiniMoneyTimer Винрейт и количество денег, посчитанное по одновременно запущенной программе MiniMoneyTimer

Рис.7 Винрейт и количество денег, посчитанное по одновременно запущенной программе MiniMoneyTimer

Пример 3. Ведём подсчёт денег и винрейта одновременно за текущую сессию (Рис. 6Б).

function playmusicfile(filename)
-- create an audio device using default parameters and exit in case of errors
require("proAudioRt")
if not proAudio.create() then return end
-- load and play a sample:
sample = proAudio.sampleFromFile(filename)
if sample then proAudio.soundPlay(sample) end
-- wait until the sound has finished:
while proAudio.soundActive()> 0 do
proAudio.sleep(0.05)
end
-- close audio device
proAudio.destroy()
return 1
end

function roundh(value)
local v = value
v = v*100
v = v + 0.5
v = math.floor(v)
v = v*0.01
return v
end

do
local loch=0
local dSumMoney = 0.0
local Hands = 0
local s = 'Money
local nAlarmProfit = 0
local sound = 0

function myFunc(dSB,dBB,dMoney,nHands, nCur, nSec)
dSumMoney = dSumMoney + dMoney
if dSumMoney > -5 then nAlarmProfit = nAlarmProfit + 1 end
if nAlarmProfit == 1 and sound == 0 then
playmusicfile("sample.ogg")
sound = 1
end

Hands = Hands + nHands
WinRate = (dSumMoney/Hands)*100/dBB
return s..roundh(dSumMoney)..' WinRate '..roundh(WinRate)

end
end

Результаты (для играемого лимита NL10) видны на следующем рисунке

Винрейт и количество денег

Рис.8 Винрейт и количество денег

Здесь также видим, что для вывода результатов отведено две строки. Именно этот скрипт будет у Вас в скачанном архиве вместе с файлом программы и библиотеками. Хотелось бы отметить, что без установки дополнительных библиотек, через Lua проигрываются только файлы *.ogg. Для конвертации звуковых файлов в этот формат можно воспользоваться каким-нибудь конвертером звуковых файлов, например этим.

                                     

Yandex.Metrika