From: horndude77@... Date: 2006-03-20T11:43:51+09:00 Subject: Re: Space Merchant (#71) Ok here is my quick SpaceMerchant::Sector class. I wasn't able to participate in last weeks quiz (and I suggested it!) so I want to be sure and do something in this week. I need to go through and clean this up now, but I wanted to get this out there quick because I haven't seen any parts besided the Galaxy put up. At the very end is the code I've been using to tests with. Ok thanks! -----Jay Anderson module SpaceMerchant class Sector attr_reader :name def initialize(name, region) @name, @region = name, region @planets = [] @stations = [] @links = [] end def link(other_sector) @links << other_sector end def add_planet(planet) @planets << planet end def add_station(station) @stations << station end def handle_event(player) menu = :main_menu while menu != :done menu = send menu, player end end def main_menu player puts "Sector #{name}" puts "#{@region.name}" puts if(@stations.length > 0) then puts "Station#{'s' if @stations.length>0}: "+@stations.map{|s|s.name}.join(', ') end if(@planets.length > 0) then puts "Planet#{'s' if @planets.length>0}: "+@planets.map{|p|p.name}.join(', ') end puts puts '(D)ock with station' if @stations.length > 0 puts '(L)and on planet' if @stations.length > 0 puts if(@links.length > 0) then puts 'Warp to nearby sector: '+@links.map{|l|'['+l.name+']'}.join(', ') end puts puts '(Q)uit game' print '?' response = gets.chomp case response when /^d/i return :dock when /^l/i return :land when /^q/i puts "Are you sure you want to quit? (y/n)" y_or_n = '' while (y_or_n = gets) !~ /^(y|n)/i puts "Are you sure you want to quit? (y/n)" end if y_or_n =~ /^y/i then puts 'goodbye!'; exit 0; end return :main_menu else new_loc = @links.select{|l| l.name == response} if new_loc.length > 0 then puts "Travelling..." player[:location] = new_loc.first return :done else puts " *** INVALID CHOICE ***" return :main_menu end end end def dock player if @stations.length < 1 then puts "There are no stations to dock with" return :main_menu end puts "Choose station to dock with:" puts @stations.each_with_index do |s,index| puts " #{index}: #{s.name}" end puts puts "(M)ain menu" print "?" response = gets.chomp choice = response.to_i if response =~ /^m/i then return :main_menu elsif choice.to_s != response || choice >= @stations.length then puts " *** INVALID CHOICE ***" return :dock else puts "Docking..." player[:location] = @stations[choice] return :done end end def land player if @planets.length < 1 then puts "There are no planets to land on" return :main_menu end puts "Choose planet to land on:" puts @planets.each_with_index do |p,index| puts " #{index}: #{p.name}" end puts puts "(M)ain menu" print "?" response = gets.chomp choice = response.to_i if response =~ /^m/i then return :main_menu elsif choice.to_s != response || choice >= @planets.length then puts " *** INVALID CHOICE ***" return :dock else puts "Landing..." player[:location] = @planets[choice] return :done end end end end if __FILE__ == $0 Named = Struct.new(:name) region = Named.new('The Region') s = SpaceMerchant::Sector.new('Test Sector', region) 5.times do |i| s.add_planet(Named.new("planet #{i}")) s.add_station(Named.new("station #{i}")) s.link(SpaceMerchant::Sector.new("#{i}", region)) end player = {} s.handle_event(player) p player end