Exemple #1
0
        void SetupTable(string playerName)
        {
            // Mescolo le tile perché sono state passate al gioco lato client e devono essere nuovamente randomizzate
            for (var k = 0; k < 3; k++)
            {
                TilesBag = TilesBag.OrderBy(q => Guid.NewGuid()).ToList();
            }

            // Creo gli espositori
            Expositors = new List <Expositor>();

            var numbers = 2 * Players.Count + 1;

            for (var i = 0; i < numbers; i++)
            {
                var tiles = TilesBag.Take(4).ToList();

                if (tiles.Count < 4)
                {
                    // Metto la riserva nel sacchetto e lo rimescolo
                    TilesBag = CommonReserve.ToList();

                    for (var k = 0; k < 3; k++)
                    {
                        TilesBag = TilesBag.OrderBy(q => Guid.NewGuid()).ToList();
                    }

                    // Svuoto la riserva
                    CommonReserve = new List <Tile>();

                    // Completo le tile da inserire nell'espositore
                    var tilesToTake = 4 - tiles.Count;

                    tiles.AddRange(TilesBag.Take(tilesToTake));

                    TilesBag.RemoveRange(0, tilesToTake);
                }
                else
                {
                    TilesBag.RemoveRange(0, 4);
                }

                Expositors.Add(new Expositor(i + 1)
                {
                    Tiles = tiles
                });
            }

            // Solo la tile primo giocatore al centro
            CenterTable = new List <Tile>
            {
                new Tile(TileType.Player1)
            };

            // Imposto l'ordine di gioco
            Players = Players
                      .SkipWhile(q => !q.IsFirstPlayer)
                      .Union(Players.TakeWhile(q => !q.IsFirstPlayer))
                      .ToList();
        }
Exemple #2
0
        public bool Start()
        {
            if (!Started.HasValue && Players.Count > 1)
            {
                Started = DateTime.Now;

                RoundNo = 1;

                // Scelgo un primo giocatore a caso
                var firstPlayer = Players.OrderBy(q => Guid.NewGuid()).First();

                firstPlayer.IsFirstPlayer = true;
                firstPlayer.IsMyTurn      = true;

                var tiles = new List <TileType>
                {
                    TileType.Blue,
                    TileType.Yellow,
                    TileType.Red,
                    TileType.Black,
                    TileType.Ice
                };

                // Tutte le tile nel sacco e mischiare
                foreach (var tile in tiles)
                {
                    TilesBag.AddRange(Enumerable.Range(0, 20).Select(x => new Tile(tile)));
                }

                for (var i = 0; i < 3; i++)
                {
                    TilesBag = TilesBag.OrderBy(q => Guid.NewGuid()).ToList();
                }

                // Setup del tavolo
                SetupTable(firstPlayer.Name);

                return(true);
            }

            return(false);
        }