Пример #1
0
        public void PerformAction_EmptyStockAndPlayerChecks_MoveCardAndAddNewTrump()
        {
            var state = new GameState()
            {
                DealerId     = DealerId,
                NextPlayerId = NextPlayerId,
                PlayersCards = _playersCards
            };
            var card   = new Card(Rank.Queen, Color.Clubs);
            var action = new Action()
            {
                PlayerId = NextPlayerId,
                Card     = card
            };

            var expectedStock       = new[] { new StockItem(NextPlayerId, card) };
            var expectedPlayerCards = new CardsSet(new[] { new Card(Rank.King, Color.Clubs) });

            var resultState = state.PerformAction(action);

            Assert.Equal(expectedStock, resultState.Stock);
            Assert.Equal(Color.Clubs, resultState.Trump);
            Assert.Equal(expectedPlayerCards, resultState.PlayersCards[NextPlayerId]);
            Assert.Equal(60, resultState.PlayersPoints[NextPlayerId]);
        }
Пример #2
0
        public void Contains_CardIdOutOfSet_ReturnFalse()
        {
            var       cardsSetA = new CardsSet(new byte[] { 2, 8, 16 });
            const int cardId    = 7;

            Assert.False(cardsSetA.Contains(cardId));
        }
Пример #3
0
        public void PerformAction_TwoCardsOnStockAndNoTrumps_MoveCardAndEvaluateTurn()
        {
            var state = new GameState()
            {
                DealerId     = DealerId,
                NextPlayerId = NextPlayerId,
                PlayersCards = _playersCards,
                Stock        = new[]
                {
                    new StockItem(3, new Card(Rank.Jack, Color.Clubs)),
                    new StockItem(0, new Card(Rank.Ace, Color.Hearts))
                }
            };
            var card   = new Card(Rank.Queen, Color.Clubs);
            var action = new Action()
            {
                PlayerId = NextPlayerId,
                Card     = card
            };
            var expectedStock = new[]
            {
                new StockItem(3, new Card(Rank.Jack, Color.Clubs)),
                new StockItem(0, new Card(Rank.Ace, Color.Hearts)),
                new StockItem(NextPlayerId, card)
            };
            var expectedPlayerCards = new CardsSet(new[] { new Card(Rank.King, Color.Clubs) });

            var resultState = state.PerformAction(action);

            Assert.Equal(expectedStock, resultState.Stock);
            Assert.Equal(expectedPlayerCards, resultState.PlayersCards[NextPlayerId]);
            Assert.Equal(new[] { 0, 16, 0, 0 }, resultState.PlayersPoints);
        }
Пример #4
0
        public void PerformAction_OneCardOnStock_MoveCard()
        {
            var state = new GameState()
            {
                DealerId     = DealerId,
                NextPlayerId = NextPlayerId,
                PlayersCards = _playersCards,
                Stock        = new[]
                {
                    new StockItem(NextPlayerId - 1, new Card(Rank.Jack, Color.Clubs))
                },
            };
            var card   = new Card(Rank.Queen, Color.Clubs);
            var action = new Action()
            {
                PlayerId = NextPlayerId,
                Card     = card
            };
            var expectedStock = new[]
            {
                new StockItem(NextPlayerId - 1, new Card(Rank.Jack, Color.Clubs)),
                new StockItem(NextPlayerId, card)
            };
            var expectedPlayerCards = new CardsSet(new[] { new Card(Rank.King, Color.Clubs) });

            var resultState = state.PerformAction(action);

            Assert.Equal(expectedStock, resultState.Stock);
            Assert.Equal(expectedPlayerCards, resultState.PlayersCards[NextPlayerId]);
        }
Пример #5
0
        //重新封装卡组
        public static bool disassembleCardSetsInfo(String userName, SerializableDictionary <int, CardsSet> dict)
        {
            String path = Path.Combine(DataRootPath, "UserInfo\\" + userName + "\\CardSetsInfo.txt");

            try
            {
                File.WriteAllText(path, String.Empty);
                using (StreamWriter writer = new StreamWriter(new FileStream(path, FileMode.Open), Encoding.GetEncoding("gb2312")))
                {
                    foreach (int cardSetNumber in dict.Keys)
                    {
                        CardsSet cardsSet = DictionaryUtils.getValue <int, CardsSet>(dict, cardSetNumber);
                        writer.WriteLine("CardsSet" + " " + cardsSet.Name + " " + (byte)cardsSet.profession + " " + (byte)cardsSet.gameMode);
                        for (int i = 0; i < cardsSet.CardCapable; i++)
                        {
                            if (cardsSet.cards[i] != null && cardsSet.cards[i] != "")
                            {
                                writer.WriteLine(cardsSet.cards[i] + " " + cardsSet.isGolden[i]);
                            }
                            else
                            {
                                break;
                            }
                        }
                        writer.WriteLine("*CardsSet");
                    }
                }
                return(true);
            }
            catch (Exception e)
            {
                Application.logger.Info(e.ToString());
                return(false);
            }
        }
Пример #6
0
        public void Contains_CardIdInSet_ReturnTrue()
        {
            var       cardsSetA = new CardsSet(new byte[] { 1, 7, 20 });
            const int cardId    = 7;

            Assert.True(cardsSetA.Contains(cardId));
        }
Пример #7
0
        public void Contains_CardOutOfSet_ReturnFalse()
        {
            var cardsSetA = new CardsSet(new byte[] { 2, 8, 16 });
            var card      = new Card(7);

            Assert.False(cardsSetA.Contains(card));
        }
        public void RemoveCard_InvalidCardId_ThrowException()
        {
            var       cardsSetA = new CardsSet(new byte[] { 1, 2, 6, 10, 22 });
            const int cardId    = 25;

            Assert.Throws <InvalidOperationException>(() => cardsSetA.RemoveCard(cardId));
        }
Пример #9
0
        public void Contains_CardInSet_ReturnTrue()
        {
            var cardsSetA = new CardsSet(new byte[] { 1, 7, 20 });
            var card      = new Card(7);

            Assert.True(cardsSetA.Contains(card));
        }
        public void Deck_Always_ReturnDeckCardSet()
        {
            const int expected = 0b111111111111111111111111;

            var deckCardsSet = CardsSet.Deck();

            Assert.Equal(expected, deckCardsSet.Code);
        }
        public void GetHighestInColor_ColorNonEmpty_ReturnHighestCard()
        {
            var cardsSetA = new CardsSet(new[] { new Card(Rank.Jack, Color.Clubs), new Card(Rank.Ace, Color.Clubs) });
            var expected  = new Card(Rank.Ace, Color.Clubs);

            var result = cardsSetA.GetHighestInColor(Color.Clubs);

            Assert.Equal(expected, result);
        }
        public void AndOperator_DisjunctiveSets_ReturnEmptySet()
        {
            var cardsSetA = new CardsSet(new byte[] { 1, 2, 6, 10, 22 });
            var cardsSetB = new CardsSet(new byte[] { 0, 8, 13, 17, 20 });

            var cardsSetC = cardsSetA & cardsSetB;

            Assert.True(cardsSetC.IsEmpty);
        }
        public void GetCardsIds_EmptySet_ReturnEmptyCollection()
        {
            var cardsSetA = new CardsSet();
            var expected  = new byte[] { };

            var actual = cardsSetA.GetCardsIds();

            Assert.Equal(expected, actual);
        }
        public void PlusOperator_OneEmptySet_ReturnEmptySet()
        {
            var cardsSetA = new CardsSet(new byte[] { 1, 2, 6, 10, 22 });
            var cardsSetB = new CardsSet(new byte[] { });

            var cardsSetC = cardsSetA & cardsSetB;

            Assert.True(cardsSetC.IsEmpty);
        }
        public void Color_Always_ReturnColorCardSet()
        {
            const Color color    = Color.Diamonds;
            const int   expected = 0b000000111111000000000000;

            var colorCardsSet = CardsSet.Color(color);

            Assert.Equal(expected, colorCardsSet.Code);
        }
Пример #16
0
        //字符串User化
        public static User praseUserStringToUser(String userString)
        {
            User user = new User();

            String[] info = userString.Split(';');

            user.UserName       = info[0];
            user.Password       = info[1];
            user.Money          = int.Parse(info[2]);
            user.ArcaneDust     = int.Parse(info[3]);
            user.MyCardsPackage = new SerializableDictionary <Series, int>();
            user.MyCards        = new SerializableDictionary <string, int>();
            user.CardSets       = new SerializableDictionary <int, CardsSet>();

            if (info[4] != null && !info[4].Equals(""))
            {
                String[] cardsPackage = info[4].Split(',');
                for (int i = 0; i < cardsPackage.Length - 1; i++)
                {
                    String[] p = cardsPackage[i].Split(':');
                    user.MyCardsPackage.Add((Series)int.Parse(p[0]), int.Parse(p[1]));
                }
            }

            String[] cards = info[5].Split(',');
            for (int i = 0; i < cards.Length - 1; i++)
            {
                String[] p = cards[i].Split(':');
                user.MyCards.Add(p[0], int.Parse(p[1]));
            }

            if (info[6] != null && !info[6].Equals(""))
            {
                String[] cardsSet = info[6].Split(',');
                for (int i = 0; i < cardsSet.Length - 1; i++)
                {
                    String[] p   = cardsSet[i].Split(':');
                    String[] s   = p[1].Split(' ');
                    CardsSet set = new CardsSet();
                    set.Name        = s[0];
                    set.CardCapable = int.Parse(s[1]);
                    set.Changeable  = bool.Parse(s[2]);
                    set.Number      = int.Parse(s[3]);
                    set.profession  = (Profession)int.Parse(s[4]);
                    set.gameMode    = (GameMode)int.Parse(s[5]);
                    for (int k = 0; k < set.Number; k++)
                    {
                        set.cards[k]    = s[6 + 2 * k];
                        set.isGolden[k] = bool.Parse(s[7 + 2 * k]);
                    }
                    user.CardSets.Add(int.Parse(p[0]), set);
                }
            }

            return(user);
        }
        public void GetCardsIds_NonEmptySet_ReturnArrayOfIds()
        {
            var cardsIds  = new byte[] { 1, 2, 6, 10, 22 };
            var cardsSetA = new CardsSet(cardsIds);
            var expected  = cardsIds;

            var actual = cardsSetA.GetCardsIds();

            Assert.Equal(expected, actual);
        }
Пример #18
0
        public void OrOperator_IntersectingSets_ReturnValidSet()
        {
            var       cardsSetA = new CardsSet(new byte[] { 1, 2, 6, 10, 22 });
            var       cardsSetB = new CardsSet(new byte[] { 0, 2, 6, 17, 20 });
            const int expected  = 0b010100100000010001000111;

            var cardsSetC = cardsSetA | cardsSetB;

            Assert.Equal(expected, cardsSetC.Code);
        }
Пример #19
0
        public void AddCard_CardInSet_DoNothing()
        {
            var       cardsSet = new CardsSet(new byte[] { 1, 2, 6, 10, 22 });
            const int cardId   = 6;
            const int expected = 0b010000000000010001000110;

            cardsSet.AddCard(cardId);

            Assert.Equal(cardsSet.Code, expected);
        }
        public void MinusOperator_DisjunctiveSets_ReturnValidSet()
        {
            var       cardsSetA = new CardsSet(new byte[] { 1, 2, 6, 10, 22 });
            var       cardsSetB = new CardsSet(new byte[] { 0, 8, 13, 17, 20 });
            const int expected  = 0b010000000000010001000110;

            var cardsSetC = cardsSetA - cardsSetB;

            Assert.Equal(expected, cardsSetC.Code);
        }
Пример #21
0
        public void AddCard_CardOutOfSet_SetCardInCode()
        {
            var       cardsSet = new CardsSet(new byte[] { 1, 2, 6, 10, 22 });
            const int cardId   = 17;
            const int expected = 0b010000100000010001000110;

            cardsSet.AddCard(cardId);

            Assert.Equal(cardsSet.Code, expected);
        }
        public void RemoveCard_CardOutOfSet_DoNothing()
        {
            var       cardsSetA = new CardsSet(new byte[] { 1, 2, 6, 10, 22 });
            const int newCardId = 17;
            const int expected  = 0b010000000000010001000110;

            cardsSetA.RemoveCard(newCardId);

            Assert.Equal(expected, cardsSetA.Code);
        }
Пример #23
0
        public void OrOperator_OneEmptySet_ReturnValidSet()
        {
            var       cardsSetA = new CardsSet(new byte[] { 1, 2, 6, 10, 22 });
            var       cardsSetB = new CardsSet(new byte[] { });
            const int expected  = 0b010000000000010001000110;

            var cardsSetC = cardsSetA | cardsSetB;

            Assert.Equal(expected, cardsSetC.Code);
        }
Пример #24
0
 public void Constructor_GivenInitParams_ProperlySetProperties()
 {
     var dealerCards = new CardsSet(new[]
     {
         new Card(Rank.Jack, Color.Diamonds),
         new Card(Rank.Ace, Color.Hearts),
         new Card(Rank.Nine, Color.Spades),
     });
     var initializerId = 0;
     var cardsToLet    = new[]
        public void RemoveCard_CardInSet_RemoveCardFromCode()
        {
            var       cardsSetA = new CardsSet(new byte[] { 1, 2, 6, 10, 22 });
            const int cardId    = 2;
            const int expected  = 0b010000000000010001000010;

            cardsSetA.RemoveCard(cardId);

            Assert.Equal(expected, cardsSetA.Code);
        }
        public void AndOperator_IntersectingSets_ReturnValidSet()
        {
            var       cardsSetA    = new CardsSet(new byte[] { 1, 2, 6, 10, 22 });
            var       cardsSetB    = new CardsSet(new byte[] { 0, 2, 6, 17, 20 });
            const int expectedCode = 0b000000000000000001000100;

            var cardsSetC = cardsSetA & cardsSetB;

            Assert.Equal(cardsSetC.Code, expectedCode);
        }
Пример #27
0
        public override void doResponse(OperationRequest operationRequest, SendParameters sendParameters, MyClientPeer peer)
        {
            Dictionary <byte, object> responseParameter = new Dictionary <byte, object>();

            try
            {
                //获取并查询用户
                Dictionary <byte, object> parameters = operationRequest.Parameters;
                String   userName    = (String)DictionaryUtils.getValue <byte, object>(parameters, (byte)ParameterCode.UserName);
                String   newCardsSet = (String)DictionaryUtils.getValue <byte, object>(parameters, (byte)ParameterCode.CardsSet);
                int      cardsSetId  = (int)DictionaryUtils.getValue <byte, object>(parameters, (byte)ParameterCode.CardsSetId);
                String[] info        = newCardsSet.Split(' ');
                CardsSet set         = new CardsSet();
                set.Name       = info[0];
                set.profession = (Profession)int.Parse(info[1]);
                set.gameMode   = (GameMode)int.Parse(info[2]);

                //用户卡组变化
                User       user = DictionaryUtils.getValue <String, User>(Application.loginUserDict, userName);
                List <int> list = new List <int>();
                foreach (int i in user.CardSets.Keys)
                {
                    if (DictionaryUtils.getValue <int, CardsSet>(user.CardSets, i) == null)
                    {
                        list.Add(i);
                    }
                }

                foreach (int i in list)
                {
                    user.CardSets.Remove(i);
                }

                user.CardSets.Add(cardsSetId, set);

                //将变化保存到文件数据库
                UserManager.disassembleCardSetsInfo(user.UserName, user.CardSets);

                //保存用户
                Application.loginUserDict.Remove(user.UserName);
                Application.loginUserDict.Add(user.UserName, user);

                //封装信息
                responseParameter.Add((byte)ParameterCode.CardsSetOperationResult, 1);
            }
            catch (Exception e)
            {
                Application.logger.Info(e.ToString());
                responseParameter.Add((byte)ParameterCode.CardsSetOperationResult, 0);
            }

            OperationResponse response = new OperationResponse((byte)OPCode.NewCardsSet, responseParameter);

            peer.SendOperationResponse(response, sendParameters);
        }
        public void GetHigherCardsSet_CardOfStockColorAndNoTrump_ReturnProperCardsSet()
        {
            var   card       = new Card(Rank.Jack, Color.Diamonds);
            var   stockColor = Color.Diamonds;
            Color?trump      = null;
            var   expected   = 0b000000111100000000000000;

            var result = CardsSet.GetHigherCardsSet(card, stockColor, trump);

            Assert.Equal(expected, result.Code);
        }
        public void GetHigherCardsSet_OtherCardAndTrump_ReturnProperCardsSet()
        {
            var   card       = new Card(Rank.Jack, Color.Diamonds);
            var   stockColor = Color.Clubs;
            Color?trump      = Color.Hearts;
            var   expected   = 0b111111000000111111000000;

            var result = CardsSet.GetHigherCardsSet(card, stockColor, trump);

            Assert.Equal(expected, result.Code);
        }
Пример #30
0
        public override void doResponse(OperationRequest operationRequest, SendParameters sendParameters, MyClientPeer peer)
        {
            Dictionary <byte, object> responseParameter = new Dictionary <byte, object>();

            try
            {
                //获取并查询用户
                Dictionary <byte, object> parameters = operationRequest.Parameters;
                String   userName   = (String)DictionaryUtils.getValue <byte, object>(parameters, (byte)ParameterCode.UserName);
                String   cardsSet   = (String)DictionaryUtils.getValue <byte, object>(parameters, (byte)ParameterCode.CardsSet);
                int      cardsSetId = (int)DictionaryUtils.getValue <byte, object>(parameters, (byte)ParameterCode.CardsSetId);
                String[] info       = cardsSet.Split(' ');
                CardsSet set        = new CardsSet();
                set.Name        = info[0];
                set.CardCapable = int.Parse(info[1]);
                set.Changeable  = bool.Parse(info[2]);
                set.Number      = int.Parse(info[3]);
                set.profession  = (Profession)int.Parse(info[4]);
                set.gameMode    = (GameMode)int.Parse(info[5]);
                for (int i = 0; i < set.Number; i++)
                {
                    set.cards[i]    = info[6 + 2 * i];
                    set.isGolden[i] = bool.Parse(info[7 + 2 * i]);
                }

                Application.logger.Info(cardsSetId + set.ToString());

                //用户卡组变化
                User user = DictionaryUtils.getValue <String, User>(Application.loginUserDict, userName);
                user.CardSets.Remove(cardsSetId);
                user.CardSets.Add(cardsSetId, set);

                //将变化保存到文件数据库
                UserManager.disassembleCardSetsInfo(user.UserName, user.CardSets);

                //保存用户
                Application.loginUserDict.Remove(user.UserName);
                Application.loginUserDict.Add(user.UserName, user);

                //封装信息
                responseParameter.Add((byte)ParameterCode.CardsSetOperationResult, 1);
            }
            catch (Exception e)
            {
                Application.logger.Info(e.ToString());
                responseParameter.Add((byte)ParameterCode.CardsSetOperationResult, 0);
            }

            OperationResponse response = new OperationResponse((byte)OPCode.ChangeCardsSet, responseParameter);

            peer.SendOperationResponse(response, sendParameters);
        }