diff options
author | Jérémy Zurcher <jeremy@asynk.ch> | 2020-09-03 15:45:54 +0200 |
---|---|---|
committer | Jérémy Zurcher <jeremy@asynk.ch> | 2020-09-03 15:45:54 +0200 |
commit | 1ea408bc51382058fbeb54e88678432a459a44c9 (patch) | |
tree | 05317cbcae29d3c18a85f882c04dd697141d1951 /lib/colonial_twilight | |
parent | c18b41671efabbd20a743e01dd8498d71d550eb9 (diff) | |
download | colonial-twilight-1ea408bc51382058fbeb54e88678432a459a44c9.zip colonial-twilight-1ea408bc51382058fbeb54e88678432a459a44c9.tar.gz |
Board/Cli : introduce Box class, clean up CLI
Diffstat (limited to 'lib/colonial_twilight')
-rw-r--r-- | lib/colonial_twilight/board.rb | 22 | ||||
-rw-r--r-- | lib/colonial_twilight/cli.rb | 44 | ||||
-rw-r--r-- | lib/colonial_twilight/fln_bot.rb | 19 |
3 files changed, 50 insertions, 35 deletions
diff --git a/lib/colonial_twilight/board.rb b/lib/colonial_twilight/board.rb index ba6956b..6ddd97b 100644 --- a/lib/colonial_twilight/board.rb +++ b/lib/colonial_twilight/board.rb @@ -137,6 +137,14 @@ module ColonialTwilight end + class Box < Forces + attr_reader :name + def initialize sym + super sym + @name = sym + end + end + class Sector MOUNTAIN=1 @@ -265,9 +273,9 @@ module ColonialTwilight @names = [] @spaces_h = {} @capabilities = [] - @available = Forces.new :available - @casualties = Forces.new :casualties - @out_of_play = Forces.new :out_of_play + @available = Box.new :available + @casualties = Box.new :casualties + @out_of_play = Box.new :out_of_play feed @spaces = @spaces_h.values @sectors = @spaces.select { |s| not s.country? } @@ -283,10 +291,12 @@ module ColonialTwilight end def transfer n, what, from, to, towhat=nil - from = (from.is_a?(Sector) ? from : get_local(from) ) - to = (to.is_a?(Sector) ? to : get_local(to) ) + towhat = what if towhat.nil? + from = get_var from if from.is_a? Symbol + to = get_var to if to.is_a? Symbol from.add what, -n to.add towhat, n + { :n => n, :what => what, :from=>from, :to => to, :towhat=> towhat } end def terror where, n @@ -394,7 +404,7 @@ module ColonialTwilight private - def get_local sym + def get_var sym case sym when :available; return @available when :casualties; return @casualties diff --git a/lib/colonial_twilight/cli.rb b/lib/colonial_twilight/cli.rb index f0ca895..97700ea 100644 --- a/lib/colonial_twilight/cli.rb +++ b/lib/colonial_twilight/cli.rb @@ -7,6 +7,20 @@ require 'colonial_twilight/game' module ColonialTwilight + class Sector + def cli + name.magenta + end + def towhat?; true end + end + + class Box + def cli + Cli::BOXES[name].cyan + end + def towhat?; false end + end + class Cli FRANCE_TRACK=[' A ',' B ',' C ',' D ',' E ',' F '].map {|e| e.white.on_blue}.freeze @@ -139,17 +153,17 @@ module ColonialTwilight # def show_control selected, control # s = "\t => shift #{'control'.cyan} to #{CONTROL[control]}" - # s += " in #{selected.name.magenta}" if @options.verbose + # s += " in #{selected.magenta}" if @options.verbose # puts s # end def show_controls selected, controls controls.each do |k,v| - puts "\t => shift #{'control'.cyan} to #{CONTROL[v[1]]} in #{k.name.magenta}" if k != selected + puts "\t => shift #{'control'.cyan} to #{CONTROL[v[1]]} in #{k.cli}" if k != selected end if controls.has_key? selected s = "\t => shift #{'control'.cyan} to #{CONTROL[controls[selected][1]]}" - s += " in #{selected.name.magenta}" if @options.verbose + s += " in #{selected.cli}" if @options.verbose puts s end end @@ -163,13 +177,13 @@ module ColonialTwilight puts "\t#{'PASS'.red} increase #{'resources'.yellow} by #{v} to #{rcs[:value].to_s.red}" else action = action.to_s.capitalize - sym = selected.is_a?(Symbol) - where = sym ? "on #{BOXES[selected]}" : "in #{selected.name.magenta}" + sym = selected.is_a?(Symbol) # FIXME Symbol => France track or Border track + where = sym ? "on #{BOXES[selected]}" : "in #{selected.cli}" cost = (incr == 0 ? nil : "#{incr < 0 ? 'increase' : 'decrease'} #{'resources'.yellow} by #{v} to #{rcs[:value].to_s.red}") if @options.verbose puts "\t#{faction} executes a #{action.yellow} Operation #{where}" puts "\t#{cost}" unless cost.nil? - puts "\tin #{selected.name.magenta} :" unless sym + puts "\tin #{selected.cli} :" unless sym else s = "\t#{action.black.on_white} #{where} " s += cost unless cost.nil? @@ -185,17 +199,15 @@ module ColonialTwilight what, towhat = tr[:what], tr[:towhat] if from == to s = "\t => flip #{n} #{FORCES[what]} to #{FORCES[towhat]}" - s += " in #{selected.name.cyan}" if @options.verbose + s += " in #{selected.cyan}" if @options.verbose puts s else - froms = (from.is_a?(Sector) ? from.name.magenta : BOXES[from] ) - tos = (to.is_a?(Sector) ? to.name.magenta : BOXES[to] ) s = "\t => transfer #{n} #{FORCES[what]}" - s += " from #{froms}" if @options.verbose or from != selected - s += " to #{tos}" if @options.verbose or to != selected - s += " as #{FORCES[towhat]}" if @options.verbose or (what != towhat and to.is_a?(Sector)) - # puts "\t => shift #{'control'.cyan} to #{CONTROL[controls[from]]} in #{froms}" if from != selected and controls.has_key?(from) - # puts "\t => shift #{'control'.cyan} to #{CONTROL[controls[to]]} in #{tos}" if to != selected and controls.has_key?(to) + s += " from #{from.cli}" if @options.verbose or from != selected + s += " to #{to.cli}" if @options.verbose or to != selected + s += " as #{FORCES[towhat]}" if @options.verbose or (what != towhat and to.towhat?) + # puts "\t => shift #{'control'.cyan} to #{CONTROL[controls[from]]} in #{from.cli}" if from != selected and controls.has_key?(from) + # puts "\t => shift #{'control'.cyan} to #{CONTROL[controls[to]]} in #{to.cli}" if to != selected and controls.has_key?(to) puts s end end @@ -208,11 +220,11 @@ module ColonialTwilight when :terror act = (n > 0 ? 'add' : 'remove').red s = "\t => #{act} #{n.to_s.cyan} #{'Terror'.yellow} markers" - s += " in #{selected.name.magenta} from #{from.to_s.cyan} to #{to.to_s.red}" if @options.verbose + s += " in #{selected.cli} from #{from.to_s.cyan} to #{to.to_s.red}" if @options.verbose puts s when :alignment if @options.verbose - puts "\t => shift #{selected.name.magenta} #{n.to_s.cyan} times towards #{ALIGNMENT[towards]} from #{ALIGNMENT[from]} to #{ALIGNMENT[to]}" + puts "\t => shift #{selected.cli} #{n.to_s.cyan} times towards #{ALIGNMENT[towards]} from #{ALIGNMENT[from]} to #{ALIGNMENT[to]}" else puts "\t => shift #{'Alignment'.yellow} onto #{ALIGNMENT[to]}" end diff --git a/lib/colonial_twilight/fln_bot.rb b/lib/colonial_twilight/fln_bot.rb index 0cb8b46..e119d36 100644 --- a/lib/colonial_twilight/fln_bot.rb +++ b/lib/colonial_twilight/fln_bot.rb @@ -576,11 +576,9 @@ module ColonialTwilight end def transfer h, n, what, from, to, towhat=nil - towhat = what if towhat.nil? h[:controls][from] ||= from.control unless from.is_a? Symbol h[:controls][to] ||= to.control unless to.is_a? Symbol - @board.transfer n, what, from, to, towhat - h[:transfers] << { :n => n, :what => what, :from=>from, :to => to, :towhat=> towhat } + h[:transfers] << @board.transfer( n, what, from, to, towhat) # puts h[:transfers][-1] if @debug end @@ -595,15 +593,16 @@ module ColonialTwilight IGNORE = [:pass, :event, :agitate].freeze def apply_action h + selected = h[:selected] action = h[:action] if OPERATIONS.include? action operation_done action - raise "already selected #{h[:selected].name}" if @selected_spaces.include? h[:selected] - @selected_spaces << h[:selected] #unless @selected_spaces.include? h[:selected] + raise "already selected #{selected.name}" if @selected_spaces.include? selected + @selected_spaces << selected #unless @selected_spaces.include? selected puts 'selected spaces :: ' + @selected_spaces.collect(){|s| s.is_a?(Symbol) ? s.to_s : s.name}.join(' :: ') if @debug elsif SPECIAL_ACTIVITIES.include? action special_activity_done action - @selected_spaces << h[:selected] if action == :ambush + @selected_spaces << selected if action == :ambush elsif not IGNORE.include? action raise "apply unknown action #{h[:action]}" else @@ -613,13 +612,7 @@ module ColonialTwilight @board.shift_resources :fln, -cost @expended_resources += cost unless h.has_key? :already_expended # _reserve_agitate h[:resources] = {:cost=>cost, :value=>@board.fln_resources} - h[:controls].each do |k,v| - if v != k.control - h[:controls][k] = [v, k.control] - else - h[:controls].delete k - end - end + h[:controls] = h[:controls].inject({}){|ch,(k,v)| ch[k] = [v, k.control] if v != k.control; ch} @ui.show_player_action self, h true end |