private bool EqualsDeck(LogicDeck expected, LogicDeck actual)
 {
     return(expected.Size == actual.Size &&
            expected.Score == actual.Score &&
            expected.Victory == actual.Victory &&
            expected.Tiles.SequenceEqual(actual.Tiles, new ComparerTiles()));
 }
        public void Test_Unsort_Deck()
        {
            var newDeck = new LogicDeck(4);

            newDeck.Unsort();
            var expectedDeck = new LogicDeck()
            {
                Size    = 4,
                Score   = 0,
                Victory = false,
                Tiles   = new List <LogicTile>()
                {
                    new LogicTile(0, 4),
                    new LogicTile(1, 4),
                    new LogicTile(2, 4),
                    new LogicTile(3, 4),
                    new LogicTile(4, 4),
                    new LogicTile(5, 4),
                    new LogicTile(6, 4),
                    new LogicTile(7, 4),
                    new LogicTile(8, 4),
                    new LogicTile(9, 4),
                    new LogicTile(10, 4),
                    new LogicTile(11, 4),
                    new LogicTile(12, 4),
                    new LogicTile(13, 4),
                    new LogicTile(14, 4),
                    new LogicTile(15, 4),
                }
            };

            Assert.IsFalse(Equals(expectedDeck, newDeck));
        }
        public bool Test_Move_tile_Num_15(int size, int numMoveTile)
        {
            var newDeck = new LogicDeck(size);

            newDeck.Move(numMoveTile);
            var tileMovable = newDeck.Tiles.First(t => t.Num == numMoveTile);
            var tileEmpty   = newDeck.Tiles.First(t => t.Num == 0);

            return(tileMovable.Pos == 16 &&
                   tileEmpty.Pos == 15);
        }
示例#4
0
        public async Task <Result <Deck> > Handle(NewDeckCommand request, CancellationToken cancellationToken)
        {
            var user = await _context.UserDbs
                       .Include(u => u.Deck)
                       .Include(d => d.Deck.Tiles)
                       .AsNoTracking()
                       .FirstOrDefaultAsync(
                u => u.Email == request.Email, cancellationToken);

            if (user == null)
            {
                //create user and deck
                var logicDeck = new LogicDeck(4);

                do
                {
                    logicDeck.Unsort();
                } while (!logicDeck.CheckWinIsPossible());
                logicDeck.Tiles         = logicDeck.Tiles.OrderBy(t => t.Pos).ToList();
                logicDeck.User.Email    = request.Email;
                logicDeck.User.UserName = request.UserName;

                var deckDb = _mapper.Map <DeckDb>(logicDeck);
                _context.Add(deckDb);
                try
                {
                    await _context.SaveChangesAsync(cancellationToken).ConfigureAwait(false);

                    return(Result.Ok <Deck>(_mapper.Map <Deck>(deckDb)));
                }
                catch (DbUpdateException ex)
                {
                    return(Result.Fail <Deck>(ex.Message));
                }
            }

            //reset deck
            try
            {
                var deckDb = user.Deck;

                var logicDeck = _mapper.Map <LogicDeck>(deckDb);
                logicDeck.User.Email    = request.Email;
                logicDeck.User.UserName = request.UserName;
                do
                {
                    logicDeck.Unsort();
                } while (!logicDeck.CheckWinIsPossible());
                logicDeck.Tiles   = logicDeck.Tiles.OrderBy(t => t.Pos).ToList();
                logicDeck.Victory = false;
                logicDeck.Score   = 0;
                _context.Update(_mapper.Map <DeckDb>(logicDeck));
                await _context.SaveChangesAsync(cancellationToken).ConfigureAwait(false);

                return(Result.Ok <Deck>(_mapper.Map <Deck>(logicDeck)));
            }
            catch (DbUpdateException ex)
            {
                return(Result.Fail <Deck>(ex.Message));
            }
        }
        public bool Test_Move_Movable_tile_Num_15(int size, int numMoveTile)
        {
            var newDeck = new LogicDeck(size);

            return(newDeck.TileCanMove(numMoveTile));
        }