static void Main(string[] args)
{
Func<int, string> getName = p => {
var s = new[] { "黑桃", "红桃", "梅花", "方块" };
var n = new[] { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" };
return p < 52 ? s[p/13] + n[p%13] : p == 52 ? "JokerSmallJoker" : "JokerBigJoker";
};
var buf = new byte[54];
using(var rnd = new RNGCryptoServiceProvider())
rnd.GetBytes(buf);
var ps = Enumerable.Range(0, buf.Length).OrderBy(p => buf[p])
.Select((p, i) => new {p,i}).GroupBy(t => t.i > 50 ? 3 : t.i%3, t => t.p).OrderBy(g => g.Key);
var r = new[] { "角色A", "角色B", "角色C", "底牌" };
foreach (var g in ps)
{
Console.Write(r[g.Key] + ":");
foreach (var p in g)
Console.Write(getName(p) + " ");
Console.WriteLine("\r\n");
}
}
//数据填充
list = list.OrderBy(r=>Guid.NewGuid()).ToList();
//怎么发就随便你了
直接一切三,跳着发,都可以
static Dictionary<byte, string> PokerColors = new Dictionary<byte, string>() { { 0, "方片" }, { 1, "红桃" }, { 2, "梅花" }, { 3, "黑桃" } };
static void R()
{
List<Poker> list = new List<Poker>();
foreach (string p in PokerValues)
{
foreach (byte c in PokerColors.Keys)
{
list.Add(new Poker() { Color = c, Value = p });
}
}
list.Add(new Poker() { Color = 5, Value = "JQ" });//小鬼
list.Add(new Poker() { Color = 6, Value = "JQ" });//大鬼
list = list.OrderBy(p => Guid.NewGuid()).ToList();
Func<byte, string> colorFunc = (i) =>
{
switch (i)
{
case 5:
return "小";
case 6:
return "大";
default:
return PokerColors[i];
}
};
foreach (var p in list)
{
Console.Write(string.Format("Color:{0} Value:{1} ", colorFunc(p.Color), p.Value));
}
}
public class Poker
{
public byte Color { get; set; }
public string Value { get; set; }
}
只有初始化加打乱顺序的代码
1. 54张牌没必要先分什么花色,就是1--52个数字,判定花色直接 取和13 商,牌点则是和13模.53,54为大小王
2. 54张牌直接乱序排序见6楼
3. 发牌先扣3张底牌,然后按index 模3分组