The Attack of the Clones
This guide covers how to make a tank bot army in a single file with 'RTanque'
Now that you all have seen how to build a basic tank, We are going to see how to create a bunch of clones in the same file first we start with a single BasicBotclass BasicBot < RTanque::Bot::Brain NAME = 'basic_bot' include RTanque::Bot::BrainHelper def tick! ## main logic goes here # use self.sensors to detect things # use self.command to control tank # self.arena contains the dimensions of the arena self.make_circles self.command.fire(0.25) end def make_circles command.speed = MAX_BOT_SPEED # takes a value between -5 to 5 command.heading = sensors.heading + 0.01 end endfirst we copy and paste the whole BasicBot and paste it below the original and run it. Unfortunatley there is still only one bot. The problem is the class's both have the same name. So we change the second class name to Clone1 Now when we run it there will be two tanks. This is marvolous, but lets see if we can DRY up this code a little. Lets cut out all the logic for Clone1 so we have
class Clone1 < RTanque::Bot::Brain endWhen we run it again we still have two tanks but one is just sitting there still as death. The problem is Clone1's Brain doesn't have any logic. We solve that problem by letting Clone1 inherit BasicBot's Brain with
class Clone1 < BasicBot endNow here is my code for a basic_bot_swarm
class BasicBot < RTanque::Bot::Brain NAME = "#{self}" include RTanque::Bot::BrainHelper def tick! ## main logic goes here # use self.sensors to detect things # use self.command to control tank # self.arena contains the dimensions of the arena self.make_circles self.command.fire(MIN_FIRE_POWER) end def make_circles command.speed = MAX_BOT_SPEED # takes a value between -5 to 5 command.heading = sensors.heading + MAX_BOT_ROTATION end end class Clone1 < BasicBot NAME = "#{self}" end class Clone2 < BasicBot NAME = "#{self}" end class Clone3 < BasicBot NAME = "#{self}" end class Clone4 < BasicBot NAME = "#{self}" end class Clone5 < BasicBot NAME = "#{self}" end class Clone6 < BasicBot NAME = "#{self}" endThis is an extremely basic, easy guide to making 'RTanque' tank bot clones. If you are looking to make your tank smarter, you'll want to see part 3, when we will deal with the subject of targeting.
This is Part 2 of a 4 part series on 'RTanque' tank bot making. Joshua Kemp @joshuakemp1 and myself Cody Kemp @codesterkemp will be joint authors during this series.
No comments:
Post a Comment