Class: EloManager

Inherits:
Object
  • Object
show all
Defined in:
lib/multiplayer_elo/elo_manager.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeEloManager

Returns a new instance of EloManager.



4
5
6
# File 'lib/multiplayer_elo/elo_manager.rb', line 4

def initialize
	@k_factor = 20
end

Instance Attribute Details

#k_factorObject

Returns the value of attribute k_factor.



2
3
4
# File 'lib/multiplayer_elo/elo_manager.rb', line 2

def k_factor
  @k_factor
end

Instance Method Details

#evaulate_results(results) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/multiplayer_elo/elo_manager.rb', line 17

def evaulate_results(results)
	results.each do |i|
		elo_change = 0
		results.each do |j|
			next if i == j
			
			# we are using places so first place < 2nd place means a win
			if i[:place] > j[:place]
				winner = 0
			elsif i[:place] == j[:place]
				winner = 0.5
			else
				winner = 1
			end

			elo_change += points_change(i[:elo], j[:elo], winner)
		end

		i[:new_elo] = i[:elo] + elo_change
	end
end

#expected_percentage(elo1, elo2) ⇒ Object



8
9
10
# File 'lib/multiplayer_elo/elo_manager.rb', line 8

def expected_percentage(elo1, elo2)
	1.0 / ( 1.0 + ( 10.0 ** ((elo2.to_f - elo1.to_f) / 400.0) ) )
end

#points_change(elo1, elo2, result) ⇒ Object

result is 0 for a loss 1 for a win or .5 for a tie



13
14
15
# File 'lib/multiplayer_elo/elo_manager.rb', line 13

def points_change(elo1, elo2, result)
	(@k_factor.to_f * (result.to_f - expected_percentage(elo1, elo2))).round
end