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]); }
public void Contains_CardIdOutOfSet_ReturnFalse() { var cardsSetA = new CardsSet(new byte[] { 2, 8, 16 }); const int cardId = 7; Assert.False(cardsSetA.Contains(cardId)); }
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); }
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]); }
//重新封装卡组 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); } }
public void Contains_CardIdInSet_ReturnTrue() { var cardsSetA = new CardsSet(new byte[] { 1, 7, 20 }); const int cardId = 7; Assert.True(cardsSetA.Contains(cardId)); }
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)); }
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); }
//字符串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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }