public void SameSortTest() { PokerGroup PG = new PokerGroup(); // TODO: 初始化为适当的值 PG.Add(new Poker(PokerNum.P10, PokerColor.黑桃)); PG.Add(new Poker(PokerNum.P10, PokerColor.黑桃)); PG.Add(new Poker(PokerNum.P9, PokerColor.红心)); PG.Add(new Poker(PokerNum.P9, PokerColor.黑桃)); PG.Add(new Poker(PokerNum.P9, PokerColor.黑桃)); PG.Add(new Poker(PokerNum.P5, PokerColor.方块)); PG.Add(new Poker(PokerNum.P5, PokerColor.黑桃)); PG.Add(new Poker(PokerNum.P5, PokerColor.红心)); //PG.Add(new Poker(PokerNum.P4, PokerColor.方块)); //PG.Add(new Poker(PokerNum.P4, PokerColor.黑桃)); //PG.Add(new Poker(PokerNum.P4, PokerColor.红心)); //PG.Add(new Poker(PokerNum.P3, PokerColor.方块)); //PG.Add(new Poker(PokerNum.P3, PokerColor.黑桃)); //PG.Add(new Poker(PokerNum.P3, PokerColor.红心)); PokerGroup expected = null; // TODO: 初始化为适当的值 PokerGroup actual; actual = DConsole.SameThreeSort(PG); Assert.AreEqual(expected, actual); Assert.Inconclusive("验证此测试方法的正确性。"); }
public void IsThreeLinkPokersTest() { PokerGroup PG = new PokerGroup(); // TODO: 初始化为适当的值 PG.Add(new Poker(PokerNum.P2, PokerColor.红心)); PG.Add(new Poker(PokerNum.P3, PokerColor.黑桃)); PG.Add(new Poker(PokerNum.P3, PokerColor.黑桃)); PG.Add(new Poker(PokerNum.P3, PokerColor.方块)); bool expected = true; // TODO: 初始化为适当的值 bool actual; actual = DConsole.IsThreeLinkPokers(PG); Assert.AreEqual(expected, actual); Assert.Inconclusive("验证此测试方法的正确性。"); }
private void 发出_开始游戏() { Poker lastPoker; for (int i = 0; i < 5000; i++) //洗牌,六个随机数向下替换. { //洗牌 int num1 = new Random().Next(0, 27); lastPoker = AllPoker[num1]; int num2 = new Random().Next(28, 54); AllPoker[num1] = AllPoker[num2]; int num3 = new Random().Next(0, 54); AllPoker[num2] = AllPoker[num3]; int num4 = new Random().Next(0, 10); AllPoker[num3] = AllPoker[num4]; int num5 = new Random().Next(34, 54); AllPoker[num4] = AllPoker[num5]; int num6 = new Random().Next(45, 54); AllPoker[num5] = AllPoker[num6]; AllPoker[num6] = lastPoker; //发牌 for (int j = 0; j < 17; j++) { _players.顺序索引(0).MyPokerGroup.Add(AllPoker[j]); } for (int j = 17; j < 34; j++) { _players.顺序索引(1).MyPokerGroup.Add(AllPoker[j]); } for (int j = 34; j < 51; j++) { _players.顺序索引(2).MyPokerGroup.Add(AllPoker[j]); } var LandLordNum = new Random().Next(0, 3); var TheLandLord = _players.顺序索引(LandLordNum); TheLandLord.IsTheLandLord = true; for (int j = 51; j < 54; j++) { LandLordPoker.Add(AllPoker[j]); } byte[][] sendData; foreach (var player in _players) { sendData = new byte[][] { BitConverter.GetBytes(player.Key), BitConverter.GetBytes((int)DDZActions.S_开始游戏), player.Value.MyPokerGroup.GetBuffer(), BitConverter.GetBytes(TheLandLord.PlayerID) }; 发出消息(sendData); } } }
public void GetBufferTest() { PokerGroup target = new PokerGroup(); // TODO: 初始化为适当的值 target.Add(new Poker(PokerNum.大王, PokerColor.红心)); target.Add(new Poker(PokerNum.P7, PokerColor.黑桃)); target.Add(new Poker(PokerNum.P3, PokerColor.梅花)); target.Add(new Poker(PokerNum.K, PokerColor.方块)); target.Add(new Poker(PokerNum.A, PokerColor.红心)); target.Add(new Poker(PokerNum.P4, PokerColor.黑桃)); target.Add(new Poker(PokerNum.P7, PokerColor.红心)); target.Add(new Poker(PokerNum.P9, PokerColor.红心)); byte[] expected = null; // TODO: 初始化为适当的值 byte[] actual; actual = target.GetBuffer(); string str = Encoding.Default.GetString(actual); Assert.AreEqual(expected, actual); Assert.Inconclusive("验证此测试方法的正确性。"); }
/// <summary> /// 对飞机和飞机带翅膀进行排序,把飞机放在前面,翅膀放在后面. /// </summary> /// <param name="PG">牌组</param> /// <returns>是否为连续三张牌</returns> public static PokerGroup SameThreeSort(PokerGroup PG) { Poker FourPoker = null; //如果把4张当三张出并且带4张的另外一张,就需要特殊处理,这里记录出现这种情况的牌的点数. bool FindedThree = false; //已找到三张相同的牌 PokerGroup tempPokerGroup = new PokerGroup(); //记录三张相同的牌 int count = 0; //记录在连续三张牌前面的翅膀的张数 int Four = 0; // 记录是否连续出现三三相同,如果出现这种情况则表明出现把4张牌(炸弹)当中的三张和其他牌配成飞机带翅膀,并且翅膀中有炸弹牌的点数. // 比如有如下牌组: 998887777666 玩家要出的牌实际上应该为 888777666带997,但是经过从大到小的排序后变成了998887777666 一不美观,二不容易比较. for (int i = 2; i < PG.Count; i++) //直接从2开始循环,因为PG[0],PG[1]的引用已经存储在其他变量中,直接比较即可 { if (PG[i] == PG[i - 2] && PG[i] == PG[i - 1])// 比较PG[i]与PG[i-1],PG[i]与PG[i-2]是否同时相等,如果相等则说明这是三张相同牌 { if (Four >= 1) //默认的Four为0,所以第一次运行时这里为false,直接执行else //一旦连续出现两个三三相等,就会执行这里的if { FourPoker = PG[i]; //当找到四张牌时,记录下4张牌的点数 Poker changePoker; for (int k = i; k > 0; k--) //把四张牌中的一张移动到最前面. { changePoker = PG[k]; PG[k] = PG[k - 1]; PG[k - 1] = changePoker; } count++; //由于此时已经找到三张牌,下面为count赋值的程序不会执行,所以这里要手动+1 } else { Four++; //记录本次循环,因为本次循环找到了三三相等的牌,如果连续两次找到三三相等的牌则说明找到四张牌(炸弹) tempPokerGroup.Add(PG[i]); //把本次循环的PG[i]记录下来,即记录下三张牌的点数 } FindedThree = true; //标记已找到三张牌 } else { Four = 0; //没有找到时,连续找到三张牌的标志Four归零 if (!FindedThree) //只有没有找到三张牌时才让count增加.如果已经找到三张牌,则不再为count赋值. { count = i - 1; } } } foreach (Poker tempPoker in tempPokerGroup) //迭代所有的三张牌点数 { Poker changePoker; //临时交换Poker for (int i = 0; i < PG.Count; i++) //把所有的三张牌往前移动 { if (PG[i] == tempPoker) //当PG[i]等于三张牌的点数时 { if (PG[i] == FourPoker) //由于上面已经把4张牌中的一张放到的最前面,这张牌也会与tempPoker相匹配所以这里进行处理 // 当第一次遇到四张牌的点数时,把记录四张牌的FourPoker赋值为null,并中断本次循环.由于FourPoker已经为Null,所以下次再次遇到四张牌的点数时会按照正常情况执行. { FourPoker = null; continue; } changePoker = PG[i - count]; PG[i - count] = PG[i]; PG[i] = changePoker; } } } return PG; }
/// <summary> /// 发牌 /// </summary> public static void deal() { PokerGroup player2Pokers = new PokerGroup(); PokerGroup player3Pokers = new PokerGroup(); player1.pokers.Clear(); for (int i = 0; i < 17; i++) { player1.pokers.Add(allPoker[i]); } for (int i = 17; i < 34; i++) { player2Pokers.Add(allPoker[i]); } for (int i = 34; i < 51; i++) { player3Pokers.Add(allPoker[i]); } LandLordNum = new Random().Next(1, 4); PokerGroup landLordPokers = new PokerGroup(); for (int i = 51; i < 54; i++) { landLordPokers.Add(allPoker[i]); } LandLordPokers = landLordPokers; player1.sort(); if (server.SendDataForClient("StartPokers", player2Pokers, 1) && server.SendDataForClient("StartPokers", player3Pokers, 2)) { DConsole.Write("[系统消息]发牌成功!"); server.SendOrder(LandLordNum); } //if (server.SendDataForClient(player2.pokers, 1) && server.SendDataForClient(player3.pokers, 2)) //{ // DConsole.Write("[系统消息]发牌成功!"); // server.SendOrder(DConsole.LandLordNum); //} else { DConsole.Write("[系统消息]发牌失败!"); } #if DEBUG //调试时在Console上显示的信息 Console.WriteLine("玩家一的牌"); foreach (Poker onePoker in player1.pokers) { Console.WriteLine(onePoker.pokerColor.ToString() + onePoker.ToString()); } #endif }