public override async Task Prepare() { await base.Prepare(); IsLoading = true; RemainingCapacity = await tileManager.GetRemainingTileCapacityAsync(); OnPropertyChanged("RemainingCapacity"); var newTiles = (await tileManager.GetTilesAsync()).ToArray(); var toAdd = newTiles.Where(n => Tiles.All(o => o.Tile.Id != n.Id)).ToArray(); var toRemove = Tiles.Where(o => newTiles.All(n => n.Id != o.Tile.Id)).ToArray(); foreach (var tile in toAdd) { Tiles.Add(new TileViewModel(tile, tileManager)); } foreach (var tile in toRemove) { Tiles.Remove(tile); } IsLoading = false; }
private void CheckGameStatus() { if (!GameOver && !Tiles.Any(x => x.IsMine == false && x.Covered)) { EndGame(true); } if (!GameOver && Tiles.All(x => x.IsMine && x.Covered)) { EndGame(true); } }
/// <summary> /// Constructor. /// </summary> /// <param name="tilesArray">Array of <see cref="TilePivot"/>.</param> /// <exception cref="ArgumentNullException"><paramref name="tilesArray"/> is <c>Null</c>.</exception> /// <exception cref="ArgumentException"><see cref="Messages.InvalidTilesCountError"/>.</exception> /// <exception cref="ArgumentException"><see cref="Messages.InvalidTwoOrFourTilesSetError"/>.</exception> /// <exception cref="ArgumentException"><see cref="Messages.InvalidTilesFamilyError"/>.</exception> /// <exception cref="ArgumentException"><see cref="Messages.InvalidTilesSequenceError"/>.</exception> public SetPivot(params TilePivot[] tilesArray) { if (tilesArray == null) { throw new ArgumentNullException(nameof(tilesArray)); } int[] allowed = { 2, 3, 4 }; if (!allowed.Contains(tilesArray.Length)) { throw new ArgumentException(Messages.InvalidTilesCountError, nameof(tilesArray)); } Tiles = tilesArray.OrderBy(t => t).ToList(); bool allSame = Tiles.All(t => t.Equals(Tiles.First())); if ((Tiles.Count == 2 || Tiles.Count == 4) && !allSame) { throw new ArgumentException(Messages.InvalidTwoOrFourTilesSetError, nameof(tilesArray)); } if (Tiles.Count == 3 && !allSame) { if (!Tiles.All(t => t.Family == Tiles.First().Family)) { throw new ArgumentException(Messages.InvalidTilesFamilyError, nameof(tilesArray)); } else { if (Tiles.First().Number != (Tiles.ElementAt(1).Number - 1) || Tiles.ElementAt(1).Number != (Tiles.ElementAt(2).Number - 1)) { throw new ArgumentException(Messages.InvalidTilesSequenceError, nameof(tilesArray)); } } } }
public bool IsInOrder() { return(Tiles.All(t => t.Value == t.Index + 1)); }