internal void When(Attacked @event) { From = Countries.ById(@event.Attacker); To = Countries.ById(@event.Defender); From.Army = @event.Result.Attacker; To.Army = @event.Result.Defender; }
internal void When(Conquered @event) { From = Countries.ById(@event.Attacker); To = Countries.ById(@event.Defender); ArmyBuffer = From.Army - 2; From.Army = From.Army.Owner.Army(1); To.Army = From.Army.Owner.Army(1); Phase = GamePhase.Advance; }
private void LinkNeighborCountries(IEnumerable <CountryInitialized> countries) { foreach (var data in countries.Select((c, id) => new { Country = CountryId.Create(id), c.Borders, })) { var country = Countries.ById(data.Country); country.Borders = data.Borders.Select(id => Countries.ById(id)).ToArray(); } }
internal void When(ArmiesInitialized @event) { foreach (var data in @event.Armies.Select((army, index) => new { Army = army, Id = CountryId.Create(index) })) { Countries.ById(data.Id).Army = data.Army; } Phase = GamePhase.Deploy; }
private void LinkContinentsToCountries(IEnumerable <ContinentInitialized> continents) { foreach (var data in continents.Select((c, id) => new { Continent = ContinentId.Create(id), Countries = c.Territories })) { var continent = Continents.ById(data.Continent); foreach (var id in data.Countries) { var country = Countries.ById(id); country.Continent = continent; } } }
public Result <Game> AutoAttack( CountryId attacker, CountryId defender, IGenerator rnd) => Must.BeInPhase(GamePhase.Attack) | (g => g.Must.Exist(attacker)) | (g => g.Must.Exist(defender)) | (g => g.Must.BeOwnedBy(attacker, ActivePlayer)) | (g => g.Must.NotBeOwnedBy(defender, ActivePlayer)) | (g => g.Must.BeReachable(defender, by: attacker)) | (g => g.Must.HaveArmiesToAttack(attacker)) | (g => g.Attack(attacker, defender, Dice .AutoAttack( Countries.ById(attacker).Army, Countries.ById(defender).Army, rnd)));
internal void When(Reinforced @event) { Countries.ById(@event.From).Army -= @event.Army; Countries.ById(@event.To).Army += @event.Army; }
internal void When(Deployed @event) { Countries.ById(@event.Country).Army += @event.Army; ArmyBuffer -= @event.Army; Phase = ArmyBuffer.Size > 0 ? GamePhase.Deploy : GamePhase.Attack; }
internal void When(ArmyInitiated @event) => Countries.ById(@event.Country).Army = @event.Army;
private bool ConquerCountryWillKillPlayer(CountryId country) => Countries.Count(c => c.Owner == Countries.ById(country).Owner) == 1;