Created
May 12, 2020 12:50
-
-
Save Forecaster/02e2980d2aa764b5a0e1fbb618116d80 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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