コード例 #1
0
        public async Task <ShipPart> SaveAsync()
        {
            var shipPart = _context.ShipParts.Add(_shipPart);
            await _context.SaveChangesAsync(CancellationToken.None);

            return(shipPart.Entity);
        }
コード例 #2
0
        public async Task <Game> SaveAsync()
        {
            var game = _context.Games.Add(_game);
            await _context.SaveChangesAsync(CancellationToken.None);

            return(game.Entity);
        }
コード例 #3
0
        public async Task <Board> SaveAsync()
        {
            var board = _context.Boards.Add(_board);
            await _context.SaveChangesAsync(CancellationToken.None);

            return(board.Entity);
        }
コード例 #4
0
        public async Task <Player> SaveAsync()
        {
            var player = _context.Players.Add(_player);
            await _context.SaveChangesAsync(CancellationToken.None);

            return(player.Entity);
        }
コード例 #5
0
        public async Task <Model> Handle(Command request, CancellationToken cancellationToken)
        {
            var attacker = await _context.Players.FindAsync(request.AttackerPlayerId);

            if (attacker == null)
            {
                throw new NotFoundException(nameof(Player), request.AttackerPlayerId);
            }

            var lastAttack = await _context.Shots
                             .OrderByDescending(x => x.ShotId)
                             .FirstOrDefaultAsync();

            if (lastAttack?.Player == attacker)
            {
                throw new OutOfTurnException(attacker.Name);
            }

            var board = await _context.Boards.FindAsync(request.BoardId);

            if (board == null)
            {
                throw new NotFoundException(nameof(Board), request.BoardId);
            }

            // TODO: Ensure the attacker is attacking opponent board in the current game.

            // Check hit or miss
            var part = await _context.ShipParts
                       .Where(x => x.Ship.Board == board)
                       .Where(x => x.X == request.AttackX && x.Y == request.AttackY)
                       .FirstOrDefaultAsync();

            var viewModel = new Model();

            if (part != null)
            {
                part.Hit  = true;
                viewModel = _mapper.Map <Model>(part);
            }

            // Record shot.
            var shot = new Shot
            {
                Player      = attacker,
                Board       = board,
                AttackX     = request.AttackX,
                AttackY     = request.AttackY,
                Hit         = part?.Hit ?? false,
                ShipPartHit = part
            };
            await _context.Shots.AddAsync(shot);


            await _context.SaveChangesAsync(cancellationToken);

            return(viewModel);
        }
コード例 #6
0
        public async Task <Model> Handle(Command request, CancellationToken cancellationToken)
        {
            var player = await _context.Players.FindAsync(request.PlayerId);

            if (player == null)
            {
                throw new NotFoundException(nameof(Player), request.PlayerId);
            }

            var entity = new Board
            {
                Player     = player,
                DimensionX = request.DimensionX,
                DimensionY = request.DimensionY,
            };

            _context.Boards.Add(entity);

            await _context.SaveChangesAsync(cancellationToken);

            var model = _mapper.Map <Model>(entity);

            return(model);
        }