From d4b37377b93fa486f92316aa400be0da37741a13 Mon Sep 17 00:00:00 2001 From: Anton Vakhrushev Date: Fri, 4 Oct 2019 16:14:18 +0300 Subject: [PATCH] Rewrite game with command router --- src/expansion.cr | 84 ++++++++++++++++++++++++------------------------ 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/src/expansion.cr b/src/expansion.cr index e9001cd..4de9a93 100644 --- a/src/expansion.cr +++ b/src/expansion.cr @@ -3,45 +3,52 @@ require "./game/map" require "./game/queue" require "./game/resources" require "./game/world" +require "./cli/command_router" -UserWorld = World.new +world = World.new + +router = CLI::CommandRouter.new + +router.add "st" do + printf "Stat:\n\tTime: %d\n\tCrystals: %d\n\tTarraform: %d\n", + world.ts, + world.resources[ResourceType::Crystal], + world.resources[ResourceType::Terraformation] +end + +router.add "m" do + world.map.print +end + +router.add "run {ts}" do |p| + ts = p["ts"].to_i32 + world.run ts + printf "Run to %d\n", ts +end + +router.add "harv {x} {y}" do |p| + x = p["x"].to_i32 + y = p["y"].to_i32 + world.push(BuildCrystalHarvesterCommand.new(Point.new(x, y))) + printf "Build harvester at %d %d\n", x, y +end + +router.add "rest {x} {y}" do |p| + x = p["x"].to_i32 + y = p["y"].to_i32 + world.push(BuildCrystalRestorerCommand.new(Point.new(x, y))) +end + +router.add "terr {x} {y}" do |p| + x = p["x"].to_i32 + y = p["y"].to_i32 + world.push(BuildTerraformerCommand.new(Point.new(x, y))) +end def normalize_command(cmd) cmd.downcase.gsub(/\s+/, ' ').strip end -def run_command(cmd) - case - when md = /^st/.match(cmd) - printf "Stat:\n\tTime: %d\n\tCrystals: %d\n\tTarraform: %d\n", - UserWorld.ts, - UserWorld.resources[ResourceType::Crystal], - UserWorld.resources[ResourceType::Terraformation] - when md = /^m/.match(cmd) - UserWorld.map.print - when md = /^run (?P\d+)$/.match(cmd) - ts = md["ts"].to_i32 - UserWorld.run(ts) - printf "Run to %d\n", ts - when md = /^harv (?P\d+)\s+(?P\d+)$/.match(cmd) - x = md["x"].to_i32 - y = md["y"].to_i32 - UserWorld.push(BuildCrystalHarvesterCommand.new(Point.new(x, y))) - printf "Build harvester at %d %d\n", x, y - when md = /^rest (?P\d+)\s+(?P\d+)$/.match(cmd) - x = md["x"].to_i32 - y = md["y"].to_i32 - UserWorld.push(BuildCrystalRestorerCommand.new(Point.new(x, y))) - when md = /^terr (?P\d+)\s+(?P\d+)$/.match(cmd) - x = md["x"].to_i32 - y = md["y"].to_i32 - UserWorld.push(BuildTerraformerCommand.new(Point.new(x, y))) - else - printf "Out > %s\n", cmd - end - printf "\n" -end - loop do printf "In > " cmd = read_line() @@ -49,13 +56,6 @@ loop do if norm == "exit" break end - run_command(norm) + router.handle cmd + printf "\n" end - -# w.map.print -# w.push(BuildCrystalHarvesterCommand.new(Point.new(2, 3))) -# w.push(BuildCrystalRestorerCommand.new(Point.new(1, 2))) -# w.push(BuildTerraformerCommand.new(Point.new(3, 2))) -# w.run(2000) -# w.map.print -# pp w.resources