题目链接
https://wenku.baidu.com/view/9fe88540cf84b9d528ea7afe.html
思路=====================================================================
先把每张牌创建出来,用List存着,这里使用现实最常见的洗牌手法,从中间抽一沓连续的放到最上层,不断重复,最后用1-52范围的随机数实现派牌效果;
Dictionary<int, string> leads = new Dictionary<int, string>
{
{ 0," Spaces"},
{ 1," Hearts"},
{ 2," Clubs"},
{ 3,"Diamonds"},
};
List<string> pokers = new List<string>();
// 创建牌
for (int i = 1; i <= 13; i++)
{
for (int lead = 0; lead < 4; lead++)
{
switch (i)
{
case 1:
pokers.Add(leads[lead] + " A");
break;
case 11:
pokers.Add(leads[lead] + " J");
break;
case 12:
pokers.Add(leads[lead] + " Q");
break;
case 13:
pokers.Add(leads[lead] + " K");
break;
default:
pokers.Add(leads[lead] + " " + i);
break;
}
}
}
// 洗牌
Random random = new Random();
for (int j = 1; j <= 100; j++)// 洗10次
{
int start = random.Next(0, 51);
int end = random.Next(start, 51);
List<string> getPokers = new List<string>();
for (int i = start; i <= end; i++)// (抽出)形成【新牌堆】
{
getPokers.Add(pokers[i]);
}
pokers.RemoveRange(start, end - start + 1);// 从原来牌堆移除新牌堆形成【旧牌堆】
getPokers.AddRange(pokers);// 新牌堆放到旧牌堆上方(这里的代码是在【新牌堆】后方添加复制的【旧牌堆】,语义不同但效果一样)
pokers.Clear();
pokers.AddRange(getPokers);
Console.WriteLine("NewPokers(" + pokers.Count + "):洗第" + j + "次");
for (int i = 1; i <= pokers.Count; i++)
{
Console.WriteLine(pokers[i - 1]);
}
Console.WriteLine();
}
List<List<string>> gameDesk = new List<List<string>>{ // 牌局 & 4个玩家
new List<string>(),
new List<string>(),
new List<string>(),
new List<string>()
};
// 发牌
for (int j = 0, order = 0; order < pokers.Count; j++, order++)
{
gameDesk[j].Add(pokers[order]);
if (j == 3)
{
j = -1;
}
}
Console.WriteLine("展示手牌");
foreach (var player in gameDesk)
{
player.Sort();// 额外添加的整理牌堆
player.ForEach((poker)=>{
Console.WriteLine(poker);
});
Console.WriteLine("***********************************");
}
Console.ReadKey();