=== First Working Version === #!/usr/bin/env ruby require 'rubygems' require_gem 'tbs' Thread.abort_on_exception = true class CowboyBattle < TBS::Game @@name = "Cowboy Battle" def turn(player) player.new_turn draw_all() player.choose([["Nevermind"]]) do end end end TBS::Spawner.new(2002) do |id| terrain_key = { "p" => TBS::Plains.new, "g" => TBS::Grass.new, "w" => TBS::Water.new, "t" => TBS::Town.new, } map = TBS::Map.new terrain_key, <<-END gggggggggg gggggggwww ggggggwwtt gggppppppp ggppggwtpt ggpgggwwtt END human = TBS::Players::DHTML.new("cowboy", "Topher") game = CowboyBattle.new game.add_map(map) game.add_player human Thread.new{ game.run } human.method(:callback) end.run === Adding Units === #!/usr/bin/env ruby require 'rubygems' require_gem 'tbs' Thread.abort_on_exception = true class Unit < TBS::Unit end class Captain < Unit def initialize(*args) super(*args) @hp = 10 @move = 1 @actions.push TBS::Attack end end class CowboyBattle < TBS::Game @@name = "Cowboy Battle" def turn(player) player.new_turn draw_all() player.choose([["Nevermind"]]) do end end end TBS::Spawner.new(2002) do |id| terrain_key = { "p" => TBS::Plains.new, "g" => TBS::Grass.new, "w" => TBS::Water.new, "t" => TBS::Town.new, } map = TBS::Map.new terrain_key, <<-END gggggggggg gggggggwww ggggggwwtt gggppppppp ggppggwtpt ggpgggwwtt END human = TBS::Players::DHTML.new("cowboy", "Topher") stanley = Captain.new(human, "Stanley") map.place(0, 0, stanley) game = CowboyBattle.new game.add_map(map) game.add_player human Thread.new{ game.run } human.method(:callback) end.run === Moving Units === #!/usr/bin/env ruby require 'rubygems' require_gem 'tbs' Thread.abort_on_exception = true class Unit < TBS::Unit end class Captain < Unit def initialize(*args) super(*args) @hp = 10 @move = 1 @actions.push TBS::Attack end end class CowboyBattle < TBS::Game @@name = "Cowboy Battle" def turn(player) player.new_turn draw_all() player.choose_all_or_done(player.not_done_unit_choices) do |choice| break if choice == TBS::DONE unit = choice.call draw_all() player.choose(unit.move_choices) do |move| move.call end unit.done draw_all() end end end TBS::Spawner.new(2002) do |id| terrain_key = { "p" => TBS::Plains.new, "g" => TBS::Grass.new, "w" => TBS::Water.new, "t" => TBS::Town.new, } map = TBS::Map.new terrain_key, <<-END gggggggggg gggggggwww ggggggwwtt gggppppppp ggppggwtpt ggpgggwwtt END human = TBS::Players::DHTML.new("cowboy", "Topher") stanley = Captain.new(human, "Stanley") map.place(0, 0, stanley) game = CowboyBattle.new game.add_map(map) game.add_player human Thread.new{ game.run } human.method(:callback) end.run === Attacking Enemies === #!/usr/bin/env ruby require 'rubygems' require_gem 'tbs' Thread.abort_on_exception = true class Unit < TBS::Unit def strength; 5; end end class Captain < Unit def initialize(*args) super(*args) @hp = 10 @move = 1 @actions.push TBS::Attack end end class EvilCaptain < Captain end class CowboyBattle < TBS::Game @@name = "Cowboy Battle" def turn(player) player.new_turn draw_all() player.choose_all_or_done(player.not_done_unit_choices) do |choice| break if choice == TBS::DONE unit = choice.call draw_all() player.choose(unit.move_choices) do |move| move.call end draw_all() player.choose(unit.action_choices) do |action| action.call end unit.done draw_all() end done() unless players().find_all(&:units_left?).size > 1 end end TBS::Spawner.new(2002) do |id| terrain_key = { "p" => TBS::Plains.new, "g" => TBS::Grass.new, "w" => TBS::Water.new, "t" => TBS::Town.new, } map = TBS::Map.new terrain_key, <<-END gggggggggg gggggggwww ggggggwwtt gggppppppp ggppggwtpt ggpgggwwtt END human = TBS::Players::DHTML.new("cowboy", "Topher") computer = TBS::Players::DumbComputer.new("Computer") stanley = Captain.new(human, "Stanley") map.place(0, 0, stanley) evilcaptain = EvilCaptain.new(computer, "EvilTwin") map.place(0, 2, evilcaptain) game = CowboyBattle.new game.add_map(map) game.add_player human game.add_player computer Thread.new{ game.run } human.method(:callback) end.run