From e796ea2d6d3aabe84ff165d8be110506482f895d Mon Sep 17 00:00:00 2001 From: Nat Lasseter Date: Tue, 7 May 2024 21:27:05 +0100 Subject: Two levels! --- forward-please | 113 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100755 forward-please (limited to 'forward-please') diff --git a/forward-please b/forward-please new file mode 100755 index 0000000..70c6986 --- /dev/null +++ b/forward-please @@ -0,0 +1,113 @@ +#!/usr/bin/env ruby + +$levels = %w(01-hub2 02-hub3) +require "./#{$levels.shift}" + +puts Level.description + +def help + puts <<~EOF + Commands: + f {frame} {iface}: forward a frame to iface + h: this help + c: click on + d: show the level description + i: show the interfaces + a: show the click frames and actions + q: quit + EOF +end + +$instructions = [] + +def forward(frame, iface) + $instructions << [frame, $clickframes[frame].to(iface)] +end + +def clickactions + puts "Click #{$click}:" + puts "Frames:" + $clickframes.each do |id, frame| + puts " #{id}: #{frame.description} from Interface #{frame.iface}" + end + + i = 1 + puts "Actions:" + $instructions.each do |instr| + puts " #{i}: Forward frame #{instr[0]} to interface #{instr[1].iface}" + end +end + +$click = 1 + +def click + right = 0 + wrong = 0 + + targetframes = [] + $clickframes.each do |id, frame| + targetframes += Level.target(frame) + end + targetframes.flatten! + + $instructions.each do |id, frame| + if targetframes.include?(frame) + right += 1 + targetframes.delete(frame) + else + wrong += 1 + end + end + wrong += targetframes.count + + puts "#{right} out of #{right+wrong} correct" + + $instructions = [] + + $click += 1 + if $click > Level.clicks + $click = 1 + level = $levels.shift + if level.nil? + puts "Demo all done" + exit 0 + end + require "./#{level}" + puts Level.description + end + + $clickframes = Level.generate + clickactions +end + +def handle(cmd) + case cmd[0] + when ?h + help + when ?f + args = cmd.split[1..] + if args.count == 2 + forward(*args) + else + puts "f {frame} {iface}" + end + when ?d + puts Level.description + when ?i + puts Level.interfaces + when ?a + clickactions + when ?c + click + when ?q + exit 0 + end +end + +$clickframes = Level.generate + +clickactions +loop do + print ">: " + handle(gets.strip) +end -- cgit v1.2.1