Beispiel #1
0
        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);
            }
        }
Beispiel #3
0
        /// <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));
 }