using System;
public class initCard { //初始化牌
private string[] suit = { "\x0001", "\x0002", "\x0003", "\x0004", "\x0005", "\x0006" }; //大小王和四种花色
private string[] rank = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", };
public string[,] cards = new string[4, 14]; //从j从1算起,好记。
public initCard() {
for (int i = 0; i < 4; i++) {
for (int j = 1; j < 14; j++) {
cards[i, j] = suit[i + 2] + rank[j - 1];
}
}
cards[0, 0] = "\x0001";
cards[1, 0] = "\x0002"; //大小王单独赋
cards[2, 0] = "NotUsed"; //还多出两个空,后面每次要判断
cards[3, 0] = "NotUsed";
}
}
public class shuffle { //洗牌
public shuffle(ref string[,] cards) {
Random random = new Random();
string[] tmpCards = new string[54];
for (int count = 0; count < 10; count++) { //洗牌10*56次,每次随机调换1张牌
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 14; j++) {
string tmpCard = "";
int ranCardi = random.Next(0, 4);
int ranCardj = random.Next(0, 14);
if (cards[i, j] != "NotUsed" && cards[ranCardi, ranCardj] != "NotUsed") { //要判断是否为多出的两张废牌
tmpCard = cards[i, j];
cards[i, j] = cards[ranCardi, ranCardj];
cards[ranCardi, ranCardj] = tmpCard;
}
}
}
}
}
}
public class deal { //分牌
public string lastCard = "";
public string[] tmpCards = new string[51];
public string[] player = new string[3];
public deal(string[,] cards) {
Random random = new Random();
int tmp = 0;
for (int i = 0; i < 3; i++) { //分3张底牌
int ranCardi = random.Next(0, 4);
int ranCardj = random.Next(0, 14);
if (cards[ranCardi, ranCardj] != "NotUsed" && cards[ranCardi, ranCardj] != "lastCard") { //判断是否废牌或底牌
lastCard += cards[ranCardi, ranCardj];
cards[ranCardi, ranCardj] = "lastCard"; //分过的底牌做标记
}
else
i--; //如果随机到空或是已经为底牌,就再来一次,概率较小
}
for (int i = 0; i < 4; i++) { //剩下的51张牌转成普通数组方便处理
for (int j = 0; j < 14; j++) {
if (cards[i, j] != "NotUsed" && cards[i, j] != "lastCard") { //判断是否废牌或底牌
tmpCards[tmp] = cards[i, j];
tmp++;
}
}
}
for (int x = 0; x < 3; x++) { //3个人,每人17张
for (int i = 0; i < 17; i++) {
player[x] += tmpCards[i + x * 17];
}
}
player[random.Next(0, 3)] += lastCard+"(地主)"; //随机地主拿底牌
}
}
class ChinesePoker {
public static void Main() {
initCard myCards = new initCard();
shuffle shuffleCard = new shuffle(ref myCards.cards);
deal dealCard = new deal(myCards.cards);
Console.WriteLine("底牌是:"+dealCard.lastCard);
for (int i = 0; i < 3; i++) {
Console.WriteLine("玩家{0}的牌是:{1}", i + 1, dealCard.player[i]);
}
Console.ReadKey();
}
}
没排序,先这样了,感觉还不错,多练习