Example #1
0
        public void TakeFromExpositor(string playerName, int expositorNumber, int rowNumber, TileType typeSelected)
        {
            var player = Players.FirstOrDefault(p => p.Name.Equals(playerName, StringComparison.InvariantCultureIgnoreCase));

            if (player.IsMyTurn)
            {
                var expositor = Expositors.FirstOrDefault(e => e.Number.Equals(expositorNumber));

                player.AddTilesToRow(rowNumber, typeSelected, expositor.SelectedByPlayer(typeSelected), false);

                CenterTable.AddRange(expositor.ToCenterPlate(typeSelected));

                TurnDone(player);
            }
        }
Example #2
0
        public void TakeFromCenterTable(string playerName, int rowNumber, TileType typeSelected)
        {
            var player = Players.FirstOrDefault(p => p.Name.Equals(playerName, StringComparison.InvariantCultureIgnoreCase));

            if (player.IsMyTurn)
            {
                player.AddTilesToRow(rowNumber, typeSelected, CenterTable.Count(t => t.Type.Equals(typeSelected)), FirstTakeFromCenterTable);

                foreach (var tile in CenterTable.Where(t => t.Type.Equals(typeSelected)).ToList())
                {
                    CenterTable.Remove(tile);
                }

                CenterTable.RemoveAll(t => t.Type.Equals(TileType.Player1));

                TurnDone(player);
            }
        }
Example #3
0
        void TurnDone(Player player)
        {
            // Se ci sono ancora espositori con tile o tile a centro tavola
            if (Expositors.Any(e => e.Tiles.Any()) || CenterTable.Any())
            {
                var nextPlayer = Players.Skip(Players.IndexOf(player) + 1).FirstOrDefault();

                if (nextPlayer == null)
                {
                    nextPlayer = Players.FirstOrDefault();
                }

                // Next Player
                nextPlayer.IsMyTurn = true;
            }
            // Se non ci sono più tile da prendere...
            else
            {
                // Tutti i giocatori fanno lo score di fine round
                Players.ForEach(p => CommonReserve.AddRange(p.UpdateBoard()));

                // Se almeno un giocatore ha completato una riga
                if (Players.Any(p => p.HasCompletedARow()))
                {
                    // Punti di fine partita
                    Players.ForEach(p => p.EndGameVictoryPoints());

                    Ended = DateTime.Now;
                }
                // Se si può ancora giocare...
                else
                {
                    var firstPlayer = Players.First(p => p.IsFirstPlayer);

                    firstPlayer.IsMyTurn = true;

                    SetupTable(firstPlayer.Name);

                    RoundNo++;
                }
            }
        }
Example #4
0
 public void Clear()
 {
     CenterTable.Clear();
     PlayerTable.Clear();
 }