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); } }
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); } }
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++; } } }
public void Clear() { CenterTable.Clear(); PlayerTable.Clear(); }