예제 #1
0
파일: Team.cs 프로젝트: shahboura/Tarneeb
        public bool AddPlayer(Player player)
        {
            if (_players.Count == 2)
                return false;

            _players.Add(player);
            return true;
        }
예제 #2
0
파일: Engine.cs 프로젝트: shahboura/Tarneeb
 private void AssignBidByPlayer(Player player, Bid bid)
 {
     _bidPlayerTeam = new Trio<Bid, Player, Team>
                          {
                              First = bid,
                              Second = player,
                              Third = _teams.First(t => t.Players.Contains(player))
                          };
 }
예제 #3
0
파일: Engine.cs 프로젝트: shahboura/Tarneeb
        public void Join(string playerId, string playerName, string teamName)
        {
            var teamCount = _teams.Count;

            if (_teams.All(t => t.Name != teamName))
            {
                if (_teams.Count < 2)
                {
                    _teams.Add(new Team { Name = teamName });
                }
                else
                {
                    throw new Exception("Maximum number of teams has been reached!");
                }
            }

            var team = _teams.First(t => t.Name == teamName);
            var player = new Player(playerId, playerName);
            _players.Add(player);

            if (!team.AddPlayer(player))
            {
                throw new Exception("Maximum number of players per team has been reached!");
            }

            _eventHandlerList[PlayerJoinedConstant].SafelyInvoke(this, new PlayersInformationEventArgs { Teams = _teams });

            if (teamCount == 1 && _teams.Count == 2)
            {
                _eventHandlerList[TeamsCompletedConstant].SafelyInvoke(this,
                                                                       new PlayersInformationEventArgs { Teams = _teams });
            }

            if (_players.Count != 4) return;

            _eventHandlerList[PlayersCompletedConstant].SafelyInvoke(this,
                                                                     new PlayersInformationEventArgs { Teams = _teams });
            ReArrangePlayersSeatting();
            SetupGame();
        }
예제 #4
0
파일: Engine.cs 프로젝트: shahboura/Tarneeb
        public void Bid(Player player, Bid bid)
        {
            if (_bidPlayerTeam == null)
                AssignBidByPlayer(player, bid);
            else if (bid.CallType == CallType.Call && _bidPlayerTeam.First.CompareTo(bid) > 0)
                throw new Exception("Invalid bid is called!");
            else if (bid.CallType == CallType.Call)
                AssignBidByPlayer(player, bid);

            _biddingPlayerIndex = (_biddingPlayerIndex + 1) % 4;
            _eventHandlerList[BidCalledConstant].SafelyInvoke(this,
                                                              new BidEventArgs
                                                                  {
                                                                      Bid = bid,
                                                                      Caller = player,
                                                                      NextCaller = _players[_biddingPlayerIndex]
                                                                  });

            if (bid.CallType != CallType.Double &&
                (bid.CallType != CallType.Pass || _players[_biddingPlayerIndex] != _bidPlayerTeam.Second))
                return;
            if (bid.CallType == CallType.Double)
                _isDouble = true;

            _cardsPlayers.Keys.ForEach(c => c.Trump = _bidPlayerTeam.First.Suit);
            var bidArgs = new BidEventArgs
                              {
                                  Bid = _bidPlayerTeam.First,
                                  Caller = _bidPlayerTeam.Second
                              };
            _eventHandlerList[BidEndedConstant].SafelyInvoke(this, bidArgs);
        }
예제 #5
0
파일: Team.cs 프로젝트: shahboura/Tarneeb
 public void RemovePlayer(Player player)
 {
     _players.Remove(player);
 }