Skip to content

Instantly share code, notes, and snippets.

@atrolla
Last active January 12, 2017 08:55
Show Gist options
  • Save atrolla/a36d6d241cc168c71db15fffdc5f6ed0 to your computer and use it in GitHub Desktop.
Save atrolla/a36d6d241cc168c71db15fffdc5f6ed0 to your computer and use it in GitHub Desktop.
-module(city).
-include("city.hrl").
-author("Yvan").
%% ------------------------------------------------------------------
%% API Function Exports
%% ------------------------------------------------------------------
-export([new/0,plague/1,preturnPopulation/1,preturnHealth/1]).
-define(IS_HEALTH_LOW(X), X < 4).
-define(IS_HEALTH_VERYLOW(X), X < 2).
-define(IS_HEALTH_HIGH(X), X > 8).
-define(LOW_FOOD,3).
-define(VERYLOW_FOOD,1).
-define(HIGH_FOOD,8).
%% ------------------------------------------------------------------
%% API Function Definitions
%% ------------------------------------------------------------------
new() -> #city{}.
plague(#city{health = CurrentHealth} = City) ->
City#city{health = gauge:decrement(CurrentHealth)}.
nextPopulation(CurrentPopulation, CurrentHealth)
when ?IS_HEALTH_VERYLOW(CurrentHealth)
-> gauge:decrement(gauge:decrement(CurrentPopulation));
nextPopulation(CurrentPopulation, CurrentHealth)
when ?IS_HEALTH_LOW(CurrentHealth)
-> gauge:decrement(CurrentPopulation);
nextPopulation(CurrentPopulation, CurrentHealth)
when ?IS_HEALTH_HIGH(CurrentHealth)
-> gauge:increment(CurrentPopulation);
nextPopulation(CurrentPopulation, _)
-> CurrentPopulation.
preturnPopulation(#city{population = CurrentPopulation, health = CurrentHealth} = City) ->
City#city{population = nextPopulation(CurrentPopulation, CurrentHealth)}.
preturnHealth(#city{health = CurrentHealth, food = CurrentFood} = City) ->
case City of
_ when CurrentFood < ?VERYLOW_FOOD ->
NewHealth = gauge:decrement(gauge:decrement(CurrentHealth));
_ when CurrentFood < ?LOW_FOOD ->
NewHealth = gauge:decrement(CurrentHealth);
_ when CurrentFood >= ?HIGH_FOOD ->
NewHealth = gauge:increment(CurrentHealth);
_ ->
NewHealth = CurrentHealth
end,
City#city{health = NewHealth}.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment