On 11/24/05, Simon Kröçer <SimonKroeger / gmx.de> wrote: > RRobots v0.1 > > First there was CRobots, followed by PRobots and many others, > recently (well also years ago) Robocode emerged and finally > this is RRobots bringing all the fun to the ruby community. > > What is he talking about? > > RRobots is a simulation environment for robots, these robots have > a scanner and a gun, can move forward and backwards and are entirely > controlled by ruby scripts. All robots are equal (well at the moment, > maybe this will change) except for the ai. > > A simple robot script may look like this: > ----------------------- code ----------------------- > require 'robot' > > class NervousDuck > include Robot > > def tick events > turn_radar 1 if time == 0 > turn_gun 30 if time < 3 > accelerate 1 > turn 2 > fire 3 unless events['robot_scanned'].empty? > end > end > ----------------------- code ----------------------- > > all you need to implement is the tick method which should > accept a hash of events occured turing the last tick. > > By including Robot you get all this methods to controll your bot: > > battlefield_height #the height of the battlefield > battlefield_width #the width of the battlefield > energy #your remaining energy (if this drops > #below 0 you are dead) > gun_heading #the heading of your gun, 0 pointing east, > #90 pointing > #north, 180 pointing west, 270 pointing south > gun_heat #your gun heat, if this is above 0 you can't shoot > heading #your robots heading, 0 pointing east, 90 pointing > #north, 180 pointing west, 270 pointing south > size #your robots radius, if x <= size you hit > #the left wall > radar_heading #the heading of your radar, 0 pointing east, > #90 pointing north, 180 pointing west, > #270 pointing south > time #ticks since match start > velocity #your velocity (-8/8) > x #your x coordinate, 0...battlefield_width > y #your y coordinate, 0...battlefield_height > accelerate(param) #accelerate (max speed is 8, > #max accelerate is 1/-1, > #negativ speed means moving backwards) > stop #accelerates negativ if moving forward > #(and vice versa), may take 8 ticks to stop (and > #you have to call it every tick) > fire(power) #fires a bullet in the direction of your gun, > #power is 0.1 - 3, this power will heat your gun > turn(degrees) #turns the robot (and the gun and the radar), > #max 10 degrees per tick > turn_gun(degrees) #turns the gun (and the radar), max 30 degrees > #per tick > turn_radar(degrees) #turns the radar, max 60 degrees per tick > dead #true if you are dead > > These methods are intentionally of very basic nature, you are free to > unleash the whole power of ruby to create higher level functions. > (e.g. move_to, fire_at and so on) > > Some words of explanation: The gun is mounted on the body, if you turn > the body the gun will follow. In a simmilar way the radar is mounted on > the gun. The radar scans everything it sweeps over in a single tick (100 > degrees if you turn your body, gun and radar in the same direction) but > will report only the distance of scanned robots, not the angle. If you > want more precission you have to turn your radar slower. > > RRobots is implemented in pure ruby using a tk ui and should run on all > platforms that have ruby and tk. (until now it's tested on windows only) > > To start a match call e.g. > > ruby rrobots.rb SittingDuck NervousDuck > > the classes have to be defined in files with the same name. > (SittingDuck.rb and NervousDuck.rb for the example above) > > You can download the 0.1 release from rubyforge: > > http://rubyforge.org/frs/?group_id=1109 > > The best way to help and keep me motivated would be to post some cool > bots here (along with the bug-reports and feature requests) > > cheers > > Simon > > (and thanks to the robocode project for the nice graphics) > > Really great work! It runs on my Linux desktop very well by only modifying image path. :) However, ruby can handle unix style path separator(/) on other platforms, (If I am wrong, correct me.) though 'File.join' will be better for that use. --- rrobots.rb.orig 2005-11-24 23:14:55.000000000 +0900 +++ rrobots.rb 2005-11-24 23:15:20.000000000 +0900 @@ -136,15 +136,15 @@ %w{red green}.each do |color| bodies, guns, radars = [], [], [] 36.times do |i| - bodies << TkPhotoImage.new(:file => "images\\#{color}_body#{(i*10).to_s.rjust(3, '0')}.gif") - guns << TkPhotoImage.new(:file => "images\\#{color}_turret#{(i*10).to_s.rjust(3, '0')}.gif") - radars << TkPhotoImage.new(:file => "images\\#{color}_radar#{(i*10).to_s.rjust(3, '0')}.gif") + bodies << TkPhotoImage.new(:file => "images/#{color}_body#{(i*10).to_s.rjust(3, '0')}.gif") + guns << TkPhotoImage.new(:file => "images/#{color}_turret#{(i*10).to_s.rjust(3, '0')}.gif") + radars << TkPhotoImage.new(:file => "images/#{color}_radar#{(i*10).to_s.rjust(3, '0')}.gif") end colors << TkRobot.new(bodies << bodies[0], guns << guns[0], radars << radars[0]) end bum = (0..14).map do |i| - TkPhotoImage.new(:file => "images\\explosion#{i.to_s.rjust(2, '0')}.gif") + TkPhotoImage.new(:file => "images/explosion#{i.to_s.rjust(2, '0')}.gif") end robots, bullets, explosions = {}, {}, {} @@ -177,4 +177,4 @@ end }).start -Tk.mainloop \ No newline at end of file +Tk.mainloop -- http://nohmad.sub-port.net