Skip to content

Instantly share code, notes, and snippets.

@ro31337
Created June 20, 2022 01:58
Show Gist options
  • Save ro31337/bc7b24357b8646f29c778ccad4391fff to your computer and use it in GitHub Desktop.
Save ro31337/bc7b24357b8646f29c778ccad4391fff to your computer and use it in GitHub Desktop.
Slot machine app
require 'hidapi'
@coin_acceptor = HIDAPI::open(0x0079, 0x0006)
@coin_dispenser = HIDAPI::open(0x14d4, 0x0000)
# Ожидание монеты
def wait_for_coin
loop do
packet = @coin_acceptor.read
confidence = packet[2].unpack('H*')[0][0].to_i
cmd = packet[6].unpack('H*')[0]
if cmd == '20' && confidence > 5
return
end
sleep 0.05
end
end
# Выдача монет
def dispence_coins(cnt)
return if cnt.zero?
x = cnt / 2
y = cnt - x
# Случайно меняем первый, последний столбец для нормального распределения выдачи:
# чтобы если число нечетное, то бремя не ложилось на один из столбцов
x, y = y, x if [true, false].sample
# reset
@coin_dispenser.write 0x01, 0x04, 0x50, 0x72, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
sleep 0.1
# dispense
@coin_dispenser.write 0x01, 0x04, 0x50, 0x02, 0x30 + x, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30 + y, 0x03, 0x02, 0x00, 0x00, 0x00
sleep 1
end
# Крутим барабан
def roll
puts "Крутим барабан..."
speed_a = 1.to_f/rand(1..20)
speed_b = 1.to_f/rand(1..20)
speed_c = 1.to_f/rand(1..20)
a, b, c = 0.to_f, 0.to_f, 0.to_f
time = rand(50..150)
loop do
break if time < 0
a += speed_a
b += speed_b
c += speed_c
print "#{a.to_i % 10} #{b.to_i % 10} #{c.to_i % 10} \r"
sleep 0.02
time -= 1
end
[a.to_i % 10, b.to_i % 10, c.to_i % 10]
end
# Размер выигрыша в четвертаках от 0 до 9
# Экспериментальным путём установлено мат.ожидание выигрыша в районе 0.45
def get_prize(a, b, c)
if a == b && b == c && a != 0
# Если всё равно, то просто возвращаем значение
# За исключением нуля
puts "*** Все числа равны ***"
return 3
end
if a == b && a > 3
puts "*** Два левых равны и больше 3 ***"
return 2
end
if b == c && b > 4
puts "*** Два правых равны и больше 4 ***"
return 2
end
0
end
puts "*" * 80
puts " " * 20 + "О Д Н О Р У К И Й Б А Н Д И Т"
puts "*" * 80
puts
puts "Опустите монету..."
win_cnt = 0
lose_cnt = 0
win_size = 0
lose_size = 0
loop do
wait_for_coin
puts "Монета опущена"
a, b, c = roll
puts
prize = get_prize(a, b, c)
if prize == 0
lose_cnt += 1
lose_size += 1
puts "Несчастливая комбинация"
else
puts "Ура! " * 10
puts "Получите #{prize} мон."
win_size += prize
win_cnt += 1
dispence_coins(prize)
end
#puts "Мат.ожидание (выигрыш к проигрышу) #{(win_size.to_f / lose_size.to_f)}"
#puts "Попытки (выигрыш к проигрышу) #{(win_cnt.to_f / lose_cnt.to_f)}"
puts "Опустите ещё одну монету..."
puts
puts "==="
puts
end
@W1zarDddD
Copy link

I can’t even imagine how much people earn from them. The main thing is that everything is legal.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment