public override void Execute(Game game) { RedrawState state = game.State as RedrawState; if (state == null) { throw new CommandException(); } Player sender = game.GetPlayerByUserId(SenderUserId); Player opponent = game.GetOpponentPlayerByUserId(SenderUserId); if (sender == null || opponent == null) { throw new CommandException(); } RedrawPlayerSubstate substate = state.Substates.FirstOrDefault(s => s.UserId == sender.User.Id); RedrawPlayerSubstate opponentSubstate = state.Substates.FirstOrDefault(s => s.UserId == opponent.User.Id); if (substate == null || opponentSubstate == null) { throw new CommandException(); } sender.IsTurn = false; substate.RedrawCardCount = 0; if (opponentSubstate.RedrawCardCount != 0) { return; } NextState = new RoundState(); }
public void EndRedrawWhileOpponentCanStillRedraw() { var redrawPlayer1Substate = new RedrawPlayerSubstate { UserId = 1, RedrawCardCount = 1 }; var game = new Game { State = new RedrawState { Substates = { redrawPlayer1Substate, new RedrawPlayerSubstate { UserId = 2, RedrawCardCount = 1 } } }, Players = { new Player { User = new User { Id = 1 }, }, new Player { User = new User { Id = 2 }, } } }; var command = new EndRedrawCardCommand { SenderUserId = 1 }; command.Execute(game); Assert.Null(command.NextState); Assert.Equal(0, redrawPlayer1Substate.RedrawCardCount); }
public void EndRedraw() { var redrawPlayer1Substate = new RedrawPlayerSubstate { UserId = 1, RedrawCardCount = 1 }; var game = new Game { State = new RedrawState { Substates = { redrawPlayer1Substate, new RedrawPlayerSubstate { UserId = 2, RedrawCardCount = 0 } } }, Players = { new Player { User = new User { Id = 1 }, }, new Player { User = new User { Id = 2 }, } } }; var command = new EndRedrawCardCommand { SenderUserId = 1 }; command.Execute(game); Assert.IsType(typeof(RoundState), command.NextState); Assert.Equal(0, redrawPlayer1Substate.RedrawCardCount); }
public void RedrawFirstOfTwoCard() { var redrawPlayer1Substate = new RedrawPlayerSubstate { UserId = 1, RedrawCardCount = 2 }; var game = new Game { State = new RedrawState { Substates = { redrawPlayer1Substate, new RedrawPlayerSubstate { UserId = 2, RedrawCardCount = 0 } } }, Players = { new Player { User = new User { Id = 1 }, Deck = new Deck { BattleKingCard = new DeckCard(), Cards = new List <DeckCard> { new DeckCard { Card = new Card() } } }, HandCards = { new PlayerCard() { Card = new Card { Id = 1 } } }, DeckCards = { new PlayerCard() { Card = new Card() } } }, new Player { User = new User { Id = 2 }, Deck = new Deck { BattleKingCard = new DeckCard() } } } }; var command = new RedrawCardCommand() { SenderUserId = 1, CardId = 1 }; command.Execute(game); Assert.Null(command.NextState); Assert.Equal(1, redrawPlayer1Substate.RedrawCardCount); }
public void RedrawLastCardWhileOpponentCanStillRedraw() { var redrawPlayer1Substate = new RedrawPlayerSubstate { UserId = 1, RedrawCardCount = 1 }; var game = new Game { State = new RedrawState { Substates = { redrawPlayer1Substate, new RedrawPlayerSubstate { UserId = 2, RedrawCardCount = 1 } } }, Players = { new Player { User = new User { Id = 1 }, Deck = new Deck { BattleKingCard = new DeckCard() }, HandCards = { new PlayerCard() { Card = new Card { Id = 1 } } }, DeckCards = { new PlayerCard() { Card = new Card { Id = 2 } } } }, new Player { User = new User { Id = 2 }, Deck = new Deck { BattleKingCard = new DeckCard() } } } }; var command = new RedrawCardCommand() { SenderUserId = 1, CardId = 1 }; command.Execute(game); Assert.Null(command.NextState); Assert.Equal(0, redrawPlayer1Substate.RedrawCardCount); }