UG_RRobots 1.3 → 2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,19 +5,19 @@ require "rake/gempackagetask"
5
5
 
6
6
  spec = Gem::Specification.new do |s|
7
7
  s.name = "UG_RRobots"
8
- s.version = "1.3"
8
+ s.version = "2.0"
9
9
  s.author = "Simon Kröger, Romain GEORGES"
10
10
  s.email = "dev@ultragreen.net"
11
11
  s.homepage = "http://www.ultragreen.net/projects/rrobots"
12
12
  s.platform = Gem::Platform::RUBY
13
13
  s.summary = "Ultragreen RRobots Fork with new features like toolboxes, config file, gemified"
14
- s.files = FileList["{bin,lib,images,config,doc,contribs,robots}/**/*"].to_a.concat(['COPYRIGHT.txt','RakeFile'])
14
+ s.files = FileList["{bin,lib,images,config,doc,contribs,robots}/**/*"].to_a.concat(['COPYRIGHT.txt','Rakefile'])
15
15
  s.require_path = "lib"
16
16
  # s.autorequire = "name"
17
17
  # s.test_files = FileList["{test}/**/*test.rb"].to_a
18
18
  s.has_rdoc = true
19
- s.extra_rdoc_files = ["doc/manual.rdoc","doc/manual_fr.rdoc"].concat(FileList["bin/*"].to_a)
20
- # s.add_dependency("dependency", ">= 0.x.x")
19
+ s.extra_rdoc_files = FileList["doc/*"].to_a.concat(FileList["bin/*"].to_a)
20
+ s.add_dependency("i18n", ">= 0.2.1")
21
21
  s.bindir = 'bin'
22
22
  s.executables = ['rrobots','tournament']
23
23
  s.description = "Ultragreen RRobots Fork"
data/bin/rrobots CHANGED
@@ -1,41 +1,61 @@
1
1
  #!/usr/bin/env ruby
2
-
2
+ #== Synopsis
3
+ #
4
+ # rrobots : AI Ruby Scripts based Robots simulation game
5
+ #
6
+ #== Date
7
+ #
8
+ # 2009-11-27
9
+ #
10
+ #== Copyright
11
+ #
12
+ #
13
+ # Ultragreen (c) 2005-2008 : Romain GEORGES UG RRobots
14
+ # Fork du projet RRobots
15
+ # Historical (c) Simon Kröger
16
+ # Ruby license (http://www.ruby-lang.org/en/LICENSE.txt).
17
+ #
18
+ #* Version : 2.0
19
+ #
20
+ #== About :
21
+ #
22
+ #* Author:: Simon Kröger, Romain GEORGES
23
+ #* type:: robots AI Game (need TK)
24
+ #* obj:: command
25
+ #
26
+ #== Source :
27
+ #
28
+ #* http://www.ultragreen.net/projects/rrobots
29
+ #
30
+
31
+ require 'I18n'
32
+
33
+ require 'rdoc/usage'
3
34
  require 'misc'
4
35
  require 'robot'
5
36
  require 'yaml'
6
37
  require 'overloads'
7
38
  require 'configuration'
8
39
  require 'battlefield'
9
- require 'toolboxes'
10
- require 'explosions'
11
- require 'bullets'
40
+
41
+
42
+ init_I18n get_locale_from_env
12
43
 
13
44
  ##############################################
14
45
  # arena
15
46
  ##############################################
16
47
 
17
48
  def usage
18
- puts "usage: rrobots [resolution] [#match] [-nogui] [-speed=<N>] [-timeout=<N>] [-teams=<N>] [-with-toolboxes] <FirstRobotClassName[.rb]> <SecondRobotClassName[.rb]> <...>"
19
- puts "Or : rrobots -list-internals"
20
- puts "\t[-list-internals] (exclusive) give the list of avaibles internals Robots"
21
- puts "\t[resolution] (optional) should be of the form 640x480 or 800*600. default is 800x800"
22
- puts "\t[match] (optional) to replay a match, put the match# here, including the #sign. "
23
- puts "\t[-nogui] (optional) run the match without the gui, for highest possible speed.(ignores speed value if present)"
24
- puts "\t[-speed=<N>] (optional, defaults to 1) updates GUI after every N ticks. The higher the N, the faster the match will play."
25
- puts "\t[-timeout=<N>] (optional, default 50000) number of ticks a match will last at most."
26
- puts "\t[-teams=<N>] (optional) split robots into N teams. Match ends when only one team has robots left."
27
- puts "\t[-with-toolboxes] (optional) to accept the spawning of healing toolboxes (randomly)."
28
- puts "\t[-ignore-config] (optional) to ignore the config file present in the path."
29
- puts "\t[-write-config] (optional) to write the config in a file in the path."
30
- puts "\tthe names of the rb files have to match the class names of the robots"
31
- puts "\t(up to 8 robots)"
32
- puts "\te.g. 'ruby rrobots.rb SittingDuck NervousDuck'"
33
- puts "\t or 'ruby rrobots.rb 600x600 #1234567890 SittingDuck NervousDuck'"
49
+ usage_file = "usage.rdoc"
50
+ usage_file = "usage_#{I18n.locale}.rdoc" if I18n.locale != 'en'
51
+ doc = "#{gem_path('doc')}/#{usage_file}"
52
+ RDoc.file_no_exit(doc,"rrobots")
34
53
  exit
35
54
  end
36
55
 
37
56
  def run_out_of_gui(battlefield)
38
- $stderr.puts 'match ends if only 1 bot/team left or dots get here-->|'
57
+ $stderr.puts I18n.t('rrobots.match_limit_warning')
58
+
39
59
 
40
60
  until battlefield.game_over
41
61
  battlefield.tick
@@ -94,6 +114,9 @@ def print_outcome(battlefield)
94
114
  end
95
115
  puts " kills: #{robot.kills}"
96
116
  puts " toolboxes catched: #{robot.catched_toolboxes}" if battlefield.with_toolboxes
117
+ puts " dropped mines: #{robot.dropped_mines}" if battlefield.with_mines
118
+ puts " trigged mines: #{robot.trigged_mines}" if battlefield.with_mines
119
+ puts " destroyed mines: #{robot.destroyed_mines}" if battlefield.with_mines
97
120
  end
98
121
  end
99
122
 
@@ -111,7 +134,7 @@ def hash_internals
111
134
  end
112
135
 
113
136
  def list_internals
114
- title = "List of avaibles internals robots :"
137
+ title = I18n.t('rrobots.list_internals_title')
115
138
  puts title
116
139
  puts "-"*title.size
117
140
  hash_internals.each do |key,value|
@@ -119,15 +142,45 @@ def list_internals
119
142
  end
120
143
  end
121
144
 
145
+ def list_locales
146
+ title = I18n.t('rrobots.list_locales_title')
147
+ puts title
148
+ puts "-"*title.size
149
+ I18n.backend.available_locales.each do |value|
150
+ puts " - #{value}"
151
+ end
152
+ end
122
153
 
123
154
  $stdout.sync = true
124
155
 
156
+
157
+ ARGV.grep( /^-set-locale=(\w{2})/ )do |item|
158
+ x = $1.to_s
159
+ I18n.locale=x
160
+ ARGV.delete(item)
161
+ end
162
+
125
163
  # look for query for robots internal list
126
164
  ARGV.grep(/^(-list-internals)/) do |item|
127
165
  list_internals
128
166
  exit 0
129
167
  end
130
168
 
169
+ # look for query for robots internal list
170
+ ARGV.grep(/^(-manual)/) do |item|
171
+ manual_file = "manual.rdoc"
172
+ manual_file = "manual_#{I18n.locale}.rdoc" if I18n.locale != 'en'
173
+ doc = "#{gem_path('doc')}/#{manual_file}"
174
+ RDoc.file_no_exit(doc)
175
+ exit 0
176
+ end
177
+
178
+ # look for query for locales avaible list
179
+ ARGV.grep(/^(-list-locales)/) do |item|
180
+ list_locales
181
+ exit 0
182
+ end
183
+
131
184
  # look for resolution arg
132
185
  xres, yres = 800, 800
133
186
  ARGV.grep(/^(\d+)[x\*](\d+$)/) do |item|
@@ -149,6 +202,12 @@ with_toolboxes = true
149
202
  ARGV.delete(item)
150
203
  end
151
204
 
205
+ #look for with_toolboxes arg
206
+ with_mines = false
207
+ ARGV.grep( /^(-with-mines)/ ) do |item|
208
+ with_mines = true
209
+ ARGV.delete(item)
210
+ end
152
211
 
153
212
  #look for mode arg
154
213
  mode = :run_in_gui
@@ -179,6 +238,7 @@ ARGV.grep( /^-speed=(\d\d?)/ )do |item|
179
238
  ARGV.delete(item)
180
239
  end
181
240
 
241
+
182
242
  #look for timeout arg
183
243
  timeout = 50000
184
244
  ARGV.grep( /^-timeout=(\d+)/ )do |item|
@@ -199,7 +259,7 @@ teams = Array.new([team_count, ARGV.size].min){ [] }
199
259
 
200
260
  usage if ARGV.size > 8 || ARGV.empty?
201
261
 
202
- battlefield = Battlefield.new xres*2, yres*2, timeout, seed, with_toolboxes, merge, write_config
262
+ battlefield = Battlefield.new xres*2, yres*2, timeout, seed, with_toolboxes, with_mines, merge, write_config
203
263
 
204
264
  c = 0
205
265
  team_divider = (ARGV.size / teams.size.to_f).ceil
data/bin/tournament CHANGED
@@ -1,6 +1,12 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require "yaml"
4
+ require 'I18n'
5
+ require 'rdoc/usage'
6
+ require 'misc'
7
+ require 'overloads'
8
+
9
+ init_I18n get_locale_from_env
4
10
 
5
11
  class Match
6
12
  attr_reader :bots
@@ -286,15 +292,69 @@ end
286
292
  ####################################################################
287
293
 
288
294
  def usage
289
- puts "Usage: ruby tournament.rb [-timeout=<N>] [-matches=<N>] [-with-toolboxes] (-dir=<Directory> | <RobotClassName[.rb]>+)"
290
- puts "\t[-with-toolboxes] (optional) to accept the spawning of healing toolboxes (randomly)."
291
- puts "\t[-ignore-config] (optional) to ignore the config file present in the path."
292
- puts "\t[-timeout=<N>] (optional, default 10000) number of ticks a match will last at most."
293
- puts "\t[-matches=<N>] (optional, default 2) how many times each robot fights every other robot."
294
- puts "\t-dir=<Directory> All .rb files from that directory will be matched against each other."
295
- puts "\t[-ignore-config] (optional) to ignore the config file present in the path."
296
- puts "\tthe names of the rb files have to match the class names of the robots."
297
- exit(0)
295
+ usage_file = "usage.rdoc"
296
+ usage_file = "usage_#{I18n.locale}.rdoc" if I18n.locale != 'en'
297
+ doc = "#{gem_path('doc')}/#{usage_file}"
298
+ RDoc.file_no_exit(doc,"tournament")
299
+ exit
300
+ end
301
+
302
+ def hash_internals
303
+ my_res = Hash::new
304
+ robots_path = gem_path('robots')
305
+ Dir["#{robots_path}/*.rb"].each {|file|
306
+ robots = File.basename(file, ".rb")
307
+ my_res[robots] = file
308
+ }
309
+ return my_res
310
+ end
311
+
312
+ def list_internals
313
+ title = I18n.t('rrobots.list_internals_title')
314
+ puts title
315
+ puts "-"*title.size
316
+ hash_internals.each do |key,value|
317
+ puts " - #{key}"
318
+ end
319
+ end
320
+
321
+ def list_locales
322
+ title = I18n.t('rrobots.list_locales_title')
323
+ puts title
324
+ puts "-"*title.size
325
+ I18n.backend.available_locales.each do |value|
326
+ puts " - #{value}"
327
+ end
328
+ end
329
+
330
+ $stdout.sync = true
331
+
332
+
333
+ ARGV.grep( /^-set-locale=(\w{2})/ )do |item|
334
+ x = $1.to_s
335
+ I18n.locale=x
336
+ ARGV.delete(item)
337
+ end
338
+
339
+ # look for query for robots internal list
340
+ ARGV.grep(/^(-list-internals)/) do |item|
341
+ list_internals
342
+ exit 0
343
+ end
344
+
345
+ # look for query for robots internal list
346
+ ARGV.grep(/^(-manual)/) do |item|
347
+ manual_file = "manual.rdoc"
348
+ manual_file = "manual_#{I18n.locale}.rdoc" if I18n.locale != 'en'
349
+ doc = "#{gem_path('doc')}/#{manual_file}"
350
+ RDoc.file_no_exit(doc)
351
+ exit 0
352
+ end
353
+
354
+ # look for query for locales avaible list
355
+ ARGV.grep(/^(-list-locales)/) do |item|
356
+ list_locales
357
+ exit 0
298
358
  end
299
359
 
300
360
  #look for timeout arg
@@ -317,6 +377,13 @@ with_toolboxes = true
317
377
  ARGV.delete(item)
318
378
  end
319
379
 
380
+ #look for with_mines arg
381
+ with_mines = false
382
+ ARGV.grep( /^(-with-mines)/ ) do |item|
383
+ with_mines = true
384
+ ARGV.delete(item)
385
+ end
386
+
320
387
  #look for config arg
321
388
  merge = true
322
389
  ARGV.grep( /^(-ignore-config)/ )do |item|
@@ -372,7 +439,8 @@ robots.each do |bot1|
372
439
  matches_per_round.times do |i|
373
440
  puts "- Match #{i+1} of #{matches_per_round} -"
374
441
  cmd = "rrobots -nogui -timeout=#{timeout} "
375
- cmd += "-with-toolboxes " if with_toolboxes
442
+ cmd += "-with-toolboxes " if with_toolboxes
443
+ cmd += "-with-mines " if with_mines
376
444
  cmd += "-ignore-config" if merge
377
445
  cmd += "#{folder}/#{bot1} #{folder}/#{bot2}"
378
446
 
@@ -0,0 +1,17 @@
1
+ ---
2
+ en:
3
+ rrobots:
4
+ list_internals_title: List of avaibles internals robots
5
+ list_locales_title: List of avaible locales
6
+ match_limit_warning: match ends if only 1 bot/team left or dots get here-->|
7
+ battlefield:
8
+ robot_made_an_exception: '{{robot}} made an exception'
9
+ tkarena:
10
+ ai_name_dead: '{{ai_name}} dead'
11
+ draw: "Draw!"
12
+ no_team_wonn: ' won!'
13
+ no_team_won: '{{winner_name}} won!'
14
+ team_won: 'Team {{winner_team}} won!'
15
+ game_over: GAME OVER
16
+
17
+
@@ -0,0 +1,14 @@
1
+ ---
2
+ fr:
3
+ rrobots:
4
+ list_internals_title: Liste des robots disponibles en interne
5
+ list_locales_title: Liste des locales disponibles
6
+ match_limit_warning: fin si 1 robot/equipe survi(e) ou ligne jusqu'ici -->|
7
+ battlefield:
8
+ robot_made_an_exception: '{{robot}} a lev� une exception'
9
+ tkarena:
10
+ ai_name_dead: '{{ai_name}} d�truit'
11
+ draw: Match nul !
12
+ no_team_won: '{{winner_name}} a gagn� !'
13
+ team_won: "L'�quipe {{winner_team}} a gagn� !"
14
+ game_over: FIN DU MATCH
data/config/rrobots.yml CHANGED
@@ -1,15 +1,22 @@
1
1
  --- !ruby/object:Configuration
2
2
  battlefield:
3
- :height: 800
4
3
  :width: 800
4
+ :height: 800
5
5
  bullets:
6
6
  :speed: 30
7
+ filename: rrobots.yml
7
8
  game:
8
9
  :timeout: 50000
10
+ mines:
11
+ :with_mines: false
12
+ :bullet_energy_resistance: 2
13
+ :energy_hit_points: 20
9
14
  robots:
15
+ :nb_mines: 3
16
+ :radar_mine_scanning_performance: 500
10
17
  :energy_max: 100
11
18
  toolboxes:
12
19
  :energy_heal_points: 20
13
- :with_toolboxes: false
14
20
  :life_time: 200
21
+ :with_toolboxes: false
15
22
  :spawning_chances: 100
data/doc/install.rdoc ADDED
@@ -0,0 +1,85 @@
1
+ = Installation
2
+
3
+ == Download
4
+
5
+ UG_RRobots could be download from the URL :
6
+
7
+ http://www.ultragreen.net/projects/rrobots/files
8
+
9
+ You could choose the Gem file or the TGZ fiile if you want to modify the project before to install it.
10
+ Files are sort by release
11
+
12
+ == Gem or Package creation
13
+
14
+ *Info* : this step is mandatory only if you choose to download TGZ sources
15
+
16
+ Exemple version 2.0 :
17
+
18
+ $ wget http://www.ultragreen.net/attachments/download/51/UG_RRobots-2.0.tgz
19
+ $ tar xvzf G_RRobots-2.0.tgz
20
+ $ cd UG_RRobots-2.0/
21
+ $ rake clean
22
+ $ rake clobber
23
+ $ rake gem
24
+ $ rake package # pour refaire le tgz
25
+
26
+ Gemfile or TGZ source are under the pkg Folder
27
+
28
+ If you create your gem, please do :
29
+
30
+ $ cd pkg
31
+
32
+ otherwise
33
+
34
+ $ wget http://www.ultragreen.net/attachments/download/52/UG_RRobots-2.0.gem
35
+
36
+ == Gem Installation
37
+
38
+ You should be root
39
+
40
+ $ sudo bash
41
+ # gem install UG_RRobots-2.0.gem
42
+
43
+ deinstallation :
44
+
45
+ $ sudo bash
46
+ # gem uninstall UG_RRobots
47
+
48
+ == Configuration
49
+
50
+ === Config File Format
51
+
52
+ YAML file : rrobots.yaml
53
+
54
+ battlefield:
55
+ :width: 800
56
+ :height: 800
57
+ bullets:
58
+ :speed: 30
59
+ filename: rrobots.yml
60
+ game:
61
+ :timeout: 50000
62
+ mines:
63
+ :with_mines: false
64
+ :bullet_energy_resistance: 2
65
+ :energy_hit_points: 20
66
+ robots:
67
+ :nb_mines: 3
68
+ :radar_mine_scanning_performance: 500
69
+ :energy_max: 100
70
+ toolboxes:
71
+ :energy_heal_points: 20
72
+ :life_time: 200
73
+ :with_toolboxes: false
74
+ :spawning_chances: 100
75
+
76
+
77
+ === Config file reading order and priority
78
+
79
+ in this order
80
+
81
+ * Code builtin values
82
+ * GEM_PATH/config/rrobots.yml (merge)
83
+ * PATH ('.') unless you have the -ignore-config for the rrobots command
84
+
85
+ the -argument -write-config create a clone of the configuration in PATH ('.') also named rrobots.yml