Files
CC-Casnio/prog2/slotV2.lua
2026-02-01 17:34:39 -06:00

165 lines
3.9 KiB
Lua
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
--slot2
rednet.open("back")
local function interactWithCard(userUUID, mode, money)
if mode == "updateBalance" then
rednet.broadcast({
uuid = userUUID,
amount = money,
type = "set"
}, "machineBalanceModifier")
end
if mode == "getBalance" then
local _, _, cardUUID = os.pullEvent("nfc_data")
rednet.broadcast({
card = cardUUID
}, "getAccountData")
while true do
local id, message = rednet.receive("server_response", 10)
if not id then
print("the server is down")
print("please ping @minecartchris")
sleep(30)
--shell.run("reboot")
end
if message.type == "account_data" and message.cardId == cardUUID then
local money = message.balance
local playerUUID = message.uuid
local username = message.username
return money, playerUUID, username
end
end
end
end
os.pullEvent= function(...)
while true do
local t = table.pack(os.pullEventRaw(...))
if t[1] ~= "terminate" then
return table.unpack(t,1,t.n)
end
end
end
if fs.exists("/disk/terminate") then
error("Service mode active",2)
end
math.randomseed(os.epoch("utc"))
for i = 1, 5 do math.random() end
local function random(min, max)
return math.random(min, max)
end
local function input(message)
local w, h = term.getSize()
term.setCursorPos(1, h)
term.clearLine()
io.write(message)
return io.read()
end
local function calculate_winnings(got, bet)
local b = tonumber(bet) or 0
if got[1] == got[2] and got[2] == got[3] then
return b * 10
elseif got[1] == got[2] or got[2] == got[3] or got[1] == got[3] then
return b
else
return 0
end
end
local function draw()
local letters = {'', '', '', ' '}
local got = {}
for i = 1, 3 do
table.insert(got, letters[random(1, #letters)])
end
return got
end
local function draw_display(display)
local w, h = term.getSize()
local midW = math.floor(w / 2)
local midH = math.floor(h / 2)
term.clear()
term.setCursorPos(midW - 5, midH - 1)
print("+-----------+")
term.setCursorPos(midW - 5, midH)
print("| " .. (display[1] or "-") .. " | " .. (display[2] or "-") .. " | " .. (display[3] or "-") .. " |")
term.setCursorPos(midW - 5, midH + 1)
print("+-----------+")
end
local function spin(current_got)
local letters = {'', '', '', ' '}
local delay = 0.05
for i = 1, 12 do
local display = {}
for j = 1, 3 do
if current_got[j] then
display[j] = current_got[j]
else
display[j] = letters[random(1, #letters)]
end
end
draw_display(display)
sleep(delay)
if i > 6 then
delay = delay + 0.05
end
end
end
local function run()
term.clear()
print("Welcome to the Slot Machine!")
print("Please swipe your card to begin")
money, playerUUID, username = interactWithCard(nil, "getBalance", nil)
term.clear()
print("Welcome ".. username .." have fun!")
local bet_input = input("Bet: ")
if money < bet_input then
print("please get more money or bet less as you can't bet more then you have")
end
local final = draw()
local current = {nil, nil, nil}
for i = 1, 3 do
spin(current)
current[i] = final[i]
draw_display(current)
sleep(0.5)
end
local winnings = calculate_winnings(final, bet_input)
local w, h = term.getSize()
term.setCursorPos(math.floor(w/2) - 6, math.floor(h/2) + 3)
money = money + winnings
interactWithCard(playerUUID, "updateBalance", money)
print("WON: " .. winnings)
for i = 1, 4 do
sleep(0.3)
term.setCursorPos(math.floor(w/2) - 5, math.floor(h/2))
term.write(" ")
sleep(0.3)
draw_display(final)
end
end
shell.execute("clear")
while true do
run()
end