Skip to content

Instantly share code, notes, and snippets.

@Forecaster
Created May 12, 2020 12:50
Show Gist options
  • Save Forecaster/02e2980d2aa764b5a0e1fbb618116d80 to your computer and use it in GitHub Desktop.
Save Forecaster/02e2980d2aa764b5a0e1fbb618116d80 to your computer and use it in GitHub Desktop.
local sides = require("sides")
local event = require("event")
local component = require("component")
local serialization = require("serialization")
local max_lights_on_min = 4 -- >= 1
local max_lights_on_max = 6 -- <= 16
local switchboards = {}
local light_board = component.list("light_board")()
if light_board then
light_board = component.proxy(light_board)
end
for address,_ in component.list("switch_board") do
local sw = component.proxy(address)
if sw then
if sw.isActive(1) then
switchboards[1] = sw
elseif sw.isActive(2) then
switchboards[2] = sw
elseif sw.isActive(3) then
switchboards[3] = sw
elseif sw.isActive(4) then
switchboards[4] = sw
end
end
end
if #switchboards < 4 then
error("Not enough switch boards found (" .. #switchboards .. "/4)")
end
local last
for x=1,4 do
local sw = switchboards[x]
for y=1,4 do
if last then
switchboards[last.x].setActive(last.y, false)
end
sw.setActive(y, true)
last = { x=x, y=y }
os.sleep(0.5)
end
end
switchboards[4].setActive(4, false)
local fun = true
local function onInterrupted()
fun = false
print("Exiting, please wait...")
end
event.listen("interrupted", onInterrupted)
print("Game start!")
while fun do
local ok = true
for x=1,4 do
for y=1,4 do
if switchboards[x].isActive(y) then
ok = false
switchboards[x].setActive(y, false)
end
end
end
if ok then
component.redstone.setOutput(sides.up, 15)
else
component.redstone.setOutput(sides.up, 0)
end
local count = 0
local max_lights_on = math.random(max_lights_on_min, max_lights_on_max)
while count < max_lights_on do
local x = math.random(1,4)
local y = math.random(1,4)
if not switchboards[x].isActive(y) then
switchboards[x].setActive(y, true)
count = count + 1
end
end
if light_board then
for l=1,light_board.light_count do
light_board.setActive(l, false)
end
for l=1,light_board.light_count do
light_board.setActive(l, true)
os.sleep(1)
end
else
os.sleep(6)
end
end
if light_board then
for l=1,light_board.light_count do
light_board.setActive(l, false)
end
end
for x=1,4 do
for y=1,4 do
if x==y then
switchboards[x].setActive(y,true)
else
switchboards[x].setActive(y,false)
end
end
end
event.ignore("interrupted", onInterrupted)
--eof
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment