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(); }
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); }