Advertisement
Guest User

Untitled

a guest
Jun 24th, 2017
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 2.49 KB | None | 0 0
  1. require 'pp'
  2. require 'terminal-table/import'
  3. require 'progressbar'
  4.  
  5. EXAMPLE_BOTS = {
  6.   :BullyBot  => "java -jar example_bots/BullyBot.jar",
  7.   :DualBot   => "java -jar example_bots/DualBot.jar",
  8.   :RageBot   => "java -jar example_bots/RageBot.jar",
  9.   :RandomBot => "java -jar example_bots/RandomBot.jar"
  10. }
  11.  
  12. PLAYERS = {
  13.   :Rezunov    => "bots/Rezunov/Rezunov.exe",
  14.   :Svinarenko => "bots/Svinarenko/Svinarenko.exe",
  15.   :Lisenko    => "bots/Lisenko/Lisenko.exe"
  16. }
  17.  
  18. class Battle
  19.   @@game_engine = "java -jar tools/PlayGame2.jar"
  20.   @@map_format = "maps/map%d.txt"
  21.   @@game_file = "last_game.txt"
  22.   attr_accessor :first_player, :secont_player, :maps, :results
  23.  
  24.   def initialize
  25.     @maps = []
  26.   end
  27.  
  28.   def start(&block)
  29.     @results = {:first => 0, :second => 0}
  30.     @maps.each { |map| play map, &block }
  31.   end
  32.  
  33.   def play(map_number, &block)
  34.     system "#{@@game_engine} #{@@map_format % map_number} 1000 1000 log.txt \"#{@first_player}\" \"#{@secont_player}\" > null 2> #{@@game_file}"
  35.     File.open(@@game_file).each_line do |line|
  36.       @results[:first] += 1 if line[/Player 1 Wins!/]
  37.       @results[:second] += 1 if line[/Player 2 Wins!/]
  38.       if line[/WARNING/] or line[/ERROR/] then
  39.         puts " " * 80
  40.         puts "#{line} -- 1: #{first_player}, 2: #{secont_player}, map: #{map_number}"
  41.       end
  42.     end
  43.     yield
  44.   end
  45. end
  46.  
  47. battle = Battle.new
  48. battle.maps = (1..25).map { |e| e * 4 }
  49.  
  50. progress = ProgressBar.new("Fighting", battle.maps.count * PLAYERS.count * (PLAYERS.count + EXAMPLE_BOTS.count - 1))
  51. results = {}
  52.  
  53. PLAYERS.each do |player_name, player_command|
  54.   battle.first_player = player_command
  55.   oponents = {}
  56.   oponents.merge! EXAMPLE_BOTS
  57.   oponents.merge! PLAYERS
  58.   oponents.delete player_name
  59.  
  60.   oponents.each do |bot_name, bot_command|
  61.     battle.secont_player = bot_command
  62.     battle.start {progress.inc }
  63.     results[player_name] ||= {}
  64.     results[player_name][bot_name] = battle.results[:first]
  65.   end
  66. end
  67.  
  68. results_table = table do |t|
  69.   heads = PLAYERS.keys + EXAMPLE_BOTS.keys
  70.   t.headings = ["(Player)"] + heads + ["(Score)"]
  71.   results.each do |player, scores|
  72.     row = []
  73.     total_score = 0
  74.     heads.each do |oponent|
  75.       if scores.has_key? oponent then
  76.         row << scores[oponent]
  77.         total_score += scores[oponent]
  78.       else
  79.         row << "-"
  80.       end
  81.     end
  82.     t.add_row [player] + row + [total_score]
  83.   end
  84. end
  85.  
  86. puts results_table
  87. File.open("battle_results.txt", "w") do |f|
  88.   f.write results_table
  89. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement