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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
        }