示例#1
0
 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;
 }
示例#2
0
 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;
 }
示例#3
0
 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();
     }
 }
示例#4
0
 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;
 }
示例#5
0
        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;
                }
            }
        }
示例#6
0
 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)));
示例#7
0
 internal void When(Reinforced @event)
 {
     Countries.ById(@event.From).Army -= @event.Army;
     Countries.ById(@event.To).Army   += @event.Army;
 }
示例#8
0
 internal void When(Deployed @event)
 {
     Countries.ById(@event.Country).Army += @event.Army;
     ArmyBuffer -= @event.Army;
     Phase       = ArmyBuffer.Size > 0 ? GamePhase.Deploy : GamePhase.Attack;
 }
示例#9
0
 internal void When(ArmyInitiated @event)
 => Countries.ById(@event.Country).Army = @event.Army;
示例#10
0
 private bool ConquerCountryWillKillPlayer(CountryId country) => Countries.Count(c => c.Owner == Countries.ById(country).Owner) == 1;