コード例 #1
0
ファイル: VGame.Views.cs プロジェクト: pavelsavara/marias
        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);
                            }
                        }
                    }
                }
            }
        }
コード例 #2
0
ファイル: VGame.cs プロジェクト: pavelsavara/marias
        public VGame(byte betSeven, byte betGame, bool bet100, Player playerAlone, params Card[] deck)
            : this(betSeven, betGame, bet100, playerAlone)
        {
            var t1 = deck[15];
            var t2 = deck[16];

            for (var c = 0; c < 5; c++)
            {
                var card = deck[c];
                ViewHas(Player.P1, Owner.P1, card);
            }
            for (var c = 5; c < 10; c++)
            {
                var card = deck[c];
                ViewHas(Player.P2, Owner.P2, card);
            }
            for (var c = 10; c < 15; c++)
            {
                var card = deck[c];
                ViewHas(Player.P3, Owner.P3, card);
            }

            for (var c = 17; c < 22; c++)
            {
                var card = deck[c];
                ViewHas(Player.P1, Owner.P1, card);
            }
            for (var c = 22; c < 27; c++)
            {
                var card = deck[c];
                ViewHas(Player.P2, Owner.P2, card);
            }
            for (var c = 27; c < 32; c++)
            {
                var card = deck[c];
                ViewHas(Player.P3, Owner.P3, card);
            }

            // bet winner has the knowledge of Talon
            // TODO choose the cards instead or receiving them fixed
            ViewHas(playerAlone, Owner.T, t1);
            ViewHas(playerAlone, Owner.T, t2);
        }
コード例 #3
0
ファイル: VGame.cs プロジェクト: pavelsavara/marias
 public VGame(byte betSeven, byte betGame, bool bet100, Player playerAlone)
     : base(betSeven, betGame, bet100, playerAlone)
 {
     _viewCards = new Owner[3, Card.Count];
     _viewCount = new int[3, Owner.Count];
     for (var i = 0; i < 3; i++)
     {
         foreach (var card in Card.AllCards)
         {
             var value = card.Value;
             if (value == Value.V0 || value == Value.VA)
             {
                 _viewCards[i, card] = Owner.P123;
             }
             else
             {
                 _viewCards[i, card] = Owner.All;
             }
         }
     }
 }
コード例 #4
0
ファイル: Game.cs プロジェクト: pavelsavara/marias
        public Game(byte betSeven, byte betGame, bool bet100, Player playerAlone)
        {
            _cardOwners = new Player[Card.Count];
            _sequence = new Card[30];
            _cardUsed = new bool[Card.Count];
            _remainingColorCount = new byte[Player.Count, Color.Count];
            _score = new byte[Owner.Count];

            for (var c = 0; c < Card.Count; c++)
            {
                _cardOwners[c] = Player.None;
            }

            _betSeven = betSeven;
            _betGame = betGame;
            _bet100 = bet100;
            PlayerOnTurn = Player.P1; // always forhont
            PlayerAlone = playerAlone;
            _betSeven = betSeven;
            _betGame = betGame;
            Turn = 0;
        }
コード例 #5
0
ファイル: VGame.Views.cs プロジェクト: pavelsavara/marias
        public void DumpView(Player viewer, StringWriter sw)
        {
            sw.Write($"V{viewer}    -> ");
            var owners = Owner.All.EnumMembers().ToList();
            var byOwner = owners.ToDictionary<Owner, Owner.OwnerName, List<Card>>(owner => owner,
                owner => Card.AllCards
                    .Where(card => owner == _viewCards[viewer, card] && !_cardUsed[card])
                    .ToList()
                );

            var pc = 0;
            foreach (var owner in owners)
            {
                var list = byOwner[owner];
                if (list.Count > 0)
                {
                    if (pc != 0)
                    {
                        sw.Write("  ");
                    }
                    pc++;
                    sw.Write($"{owner}:");
                    for (var index = 0; index < list.Count; index++)
                    {
                        var card = list[index];
                        if (index != 0)
                        {
                            sw.Write($",{card}");
                        }
                        else
                        {
                            sw.Write($"{card}");
                        }
                    }
                }
            }
            sw.WriteLine();
        }
コード例 #6
0
ファイル: Player.cs プロジェクト: pavelsavara/marias
 // ReSharper restore InconsistentNaming
 public bool Equals(Player other)
 {
     return _player == other._player;
 }
コード例 #7
0
ファイル: VGame.cs プロジェクト: pavelsavara/marias
 public VGame(Player playerAlone)
     : this(2, 2, false, playerAlone)
 {
 }
コード例 #8
0
ファイル: VGame.cs プロジェクト: pavelsavara/marias
 public VGame(Player playerAlone, params Card[] deck)
     : this(2, 2, false, playerAlone, deck)
 {
 }
コード例 #9
0
ファイル: VGame.Views.cs プロジェクト: pavelsavara/marias
 public void ViewReceive(Player viewer, Owner owner, params Card[] cards)
 {
     ViewReceive(viewer, owner, (IEnumerable<Card>) cards);
 }
コード例 #10
0
ファイル: VGame.Views.cs プロジェクト: pavelsavara/marias
 public override void ViewDoesntHave(Player viewer, Owner owner, Card card)
 {
     var newOwner = _viewCards[viewer, card] - owner;
     ViewHas(viewer, newOwner, card);
 }
コード例 #11
0
ファイル: VGame.Views.cs プロジェクト: pavelsavara/marias
 public Owner this[Player viewer, Card card] = > _viewCards[viewer, card];
コード例 #12
0
ファイル: VGame.Views.cs プロジェクト: pavelsavara/marias
 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);
     }
 }
コード例 #13
0
ファイル: Game.Steps.cs プロジェクト: pavelsavara/marias
 public virtual void ViewHas(Player viewer, Owner newOwner, Card card)
 {
 }
コード例 #14
0
ファイル: Game.Steps.cs プロジェクト: pavelsavara/marias
 public virtual void ViewDoesntHave(Player viewer, Owner owner, Card card)
 {
 }
コード例 #15
0
ファイル: Game.cs プロジェクト: pavelsavara/marias
        public Game(byte betSeven, byte betGame, bool bet100, Player playerAlone, params Card[] deck)
            : this(betSeven, betGame, bet100, playerAlone)
        {
            if (deck.Length != 32)
            {
                throw new ArgumentException("Card count");
            }

            var t1 = deck[15];
            var t2 = deck[16];
            if (t1.HasPoints() || t2.HasPoints())
            {
                throw new ArgumentException("Points in talon");
            }
            var seven = new Card(Color.T, Value.V7);
            if (betSeven > 0 && (t1 == seven || t2 == seven))
            {
                throw new ArgumentException("Betted seven in talon");
            }

            for (var c = 0; c < 5; c++)
            {
                var card = deck[c];
                if (_cardOwners[card] != Player.None)
                {
                    throw new ArgumentException("Duplicate "+ card);
                }
                _cardOwners[card] = Player.P1;
                _remainingColorCount[Player.P1, card.Color]++;
            }
            for (var c = 5; c < 10; c++)
            {
                var card = deck[c];
                if (_cardOwners[card] != Player.None)
                {
                    throw new ArgumentException("Duplicate " + card);
                }
                _cardOwners[card] = Player.P2;
                _remainingColorCount[Player.P2, card.Color]++;
            }
            for (var c = 10; c < 15; c++)
            {
                var card = deck[c];
                if (_cardOwners[card] != Player.None)
                {
                    throw new ArgumentException("Duplicate " + card);
                }
                _cardOwners[card] = Player.P3;
                _remainingColorCount[Player.P3, card.Color]++;
            }

            for (var c = 17; c < 22; c++)
            {
                var card = deck[c];
                if (_cardOwners[card] != Player.None)
                {
                    throw new ArgumentException("Duplicate " + card);
                }
                _cardOwners[card] = Player.P1;
                _remainingColorCount[Player.P1, card.Color]++;
            }
            for (var c = 22; c < 27; c++)
            {
                var card = deck[c];
                if (_cardOwners[card] != Player.None)
                {
                    throw new ArgumentException("Duplicate " + card);
                }
                _cardOwners[card] = Player.P2;
                _remainingColorCount[Player.P2, card.Color]++;
            }
            for (var c = 27; c < 32; c++)
            {
                var card = deck[c];
                if (_cardOwners[card] != Player.None)
                {
                    throw new ArgumentException("Duplicate " + card);
                }
                _cardOwners[card] = Player.P3;
                _remainingColorCount[Player.P3, card.Color]++;
            }

            _cardOwners[t1] = Player.T;
            _cardOwners[t2] = Player.T;
            _remainingColorCount[Player.T, t1.Color]++;
            _remainingColorCount[Player.T, t2.Color]++;
        }
コード例 #16
0
ファイル: Game.cs プロジェクト: pavelsavara/marias
 private Player PrevPlayer(Player playerOnTurn)
 {
     switch ((Player.PlayerName) playerOnTurn)
     {
         case Player.PlayerName.P1:
             return Player.P3;
         case Player.PlayerName.P2:
             return Player.P1;
         case Player.PlayerName.P3:
             return Player.P2;
         default:
             throw new InvalidOperationException();
     }
 }