public override void ViewHas(Player viewer, Owner newOwner, Card card) { var originalOwner = _viewCards[viewer, card]; if (newOwner < originalOwner) { if (!(_cardOwners[card] <= newOwner)) { throw new InvalidOperationException($"View: {viewer} Card: {card} Owner:{_cardOwners[card]} Mistake:{newOwner}"); } var newOwnerCount = _viewCount[viewer, newOwner] + 1; _viewCards[viewer, card] = newOwner; _viewCount[viewer, newOwner] = newOwnerCount; if (newOwner.MaxCount() == newOwnerCount) { foreach (var c in Card.AllCards) { var co = _viewCards[viewer, c]; if (co > newOwner) { var nco = co - newOwner; if (nco != co) { ViewHas(viewer, nco, c); } } } } } }
public void EnumMembers() { for (byte o = 0; o < Owner.Count; o++) { var g = new Owner(o); foreach (var m in g.EnumMembers()) { Assert.IsTrue(m <= g); } } }
public void EnumGroups() { for (byte o = 0; o < Owner.Count; o++) { var m = new Owner(o); foreach (var g in m.EnumGroups()) { Assert.IsTrue(m <= g); } } }
public void ViewReceive(Player viewer, Owner owner, params Card[] cards) { ViewReceive(viewer, owner, (IEnumerable<Card>) cards); }
public override void ViewDoesntHave(Player viewer, Owner owner, Card card) { var newOwner = _viewCards[viewer, card] - owner; ViewHas(viewer, newOwner, card); }
public void ViewReceive(Player viewer, Owner owner, IEnumerable<Card> cards) { foreach (var card in cards) { if (!(_viewCards[viewer, card] >= owner)) { throw new InvalidOperationException("card already received by " + _viewCards[viewer, card]); } ViewHas(viewer, owner, card); } }
public virtual void ViewHas(Player viewer, Owner newOwner, Card card) { }
public virtual void ViewDoesntHave(Player viewer, Owner owner, Card card) { }
public bool Equals(Owner other) { return _owner == other._owner; }