Added check for living survivors to game level detection

This commit is contained in:
Liru 2018-04-20 23:51:43 -04:00
parent c069557f17
commit 542ffbc826
2 changed files with 27 additions and 0 deletions

View File

@ -31,6 +31,7 @@ defmodule ZombieSurvivor.Game do
@spec level(Game.t()) :: ZombieSurvivor.level() @spec level(Game.t()) :: ZombieSurvivor.level()
def level(game) do def level(game) do
game.survivors game.survivors
|> Enum.reject(fn {_, s} -> Survivor.dead?(s) end)
|> Enum.reduce(0, fn {_, s}, acc -> max(s.experience, acc) end) |> Enum.reduce(0, fn {_, s}, acc -> max(s.experience, acc) end)
|> ZombieSurvivor.level() |> ZombieSurvivor.level()
end end

View File

@ -100,5 +100,31 @@ defmodule GameTest do
assert Game.level(g) == :red assert Game.level(g) == :red
end end
test "returns the level of the highest levelled living survivor" do
g =
Game.new()
|> Game.add_survivor(@new_survivor)
assert Game.level(g) == :blue
g =
g
|> Game.add_survivor(Survivor.new(name: "Eric", experience: 10))
assert Game.level(g) == :yellow
g =
g
|> Game.add_survivor(Survivor.new(name: "Jack", experience: 20, wounds: 2))
assert Game.level(g) == :yellow
g =
g
|> Game.add_survivor(Survivor.new(name: "Liru", experience: 1_000_000, wounds: 2))
assert Game.level(g) == :yellow
end
end end
end end