抽取扑克牌的实例案例
步骤
- 创建1-52数字为元素的数组
- 随机打乱
- 取整取余得到颜色和牌号的索引
代码如下,可能有些地方写的比较乱,可以看下注释。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 抽纸牌
{
public class Cards
{
Random randomNumber = new Random();
public int[] _number;
public int[] Number
{
get { return _number; }
set { _number = value; }
}
public void SaveNumber(int length,int count)
{
string[] color = { "红桃", "黑桃", "方块", "梅花" };//四种颜色
string[] CardName = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};//13张牌号
_number = new int[length];//创建长度大小为length的数组;
//for循环遍历为每个元素赋值;
for (int i = 0; i < length; i++)
{
Number[i] = i + 1;
}
//类中调用两个方法
RandomOrder();
RandomName(color,CardName,count);
}
//随机打乱顺序
public void RandomOrder()
{
int temp = 0;
for (int i = 0; i < _number.Length; i++)
{
int index = randomNumber.Next(0, _number.Length);
//遍历每个元素 将每个元素的值替换成随机索引元素的值
temp = _number[i];
_number[i] = _number[index];
_number[index] = temp;
}
}
//随机抽取牌
public void RandomName(string[] color,string[] Name,int count)
{
int IndexColor;
int indexName;
int CardNumber;
//for循环设置抽取次数
for (int i = 0; i < count; i++)
{
CardNumber = randomNumber.Next(0,_number.Length);
Console.WriteLine(_number[CardNumber]);//测试
//每13张不同的牌就是一个颜色
//
//当值大于等于13时,对值取整能取范围1-52/13=4
//卡牌颜色数组的最大索引为3,第一索引为0
if (_number[CardNumber] >= 13)
IndexColor = _number[CardNumber] / 13 - 1;//设置数组索引
else
IndexColor = 0;//小于13时 为索引0,红桃
//对卡牌值取余
//余数为0代表值是13的倍数。也就是每张颜色的最后一张牌K
if (_number[CardNumber] % 13 == 0)
indexName = 12;//牌号索引12 K
else
indexName = _number[CardNumber] % 13 - 1;//余数减一 为所在数组的索引
Console.WriteLine($"抽到了{color[IndexColor]}{Name[indexName]}");
}
}
}
class Program
{
static void Main(string[] args)
{
Cards card = new Cards();
Console.WriteLine("请输入想要抽取次数");
int count = int.Parse(Console.ReadLine());
card.SaveNumber(52,count);
//foreach (int numbers in card._number)
//{
// Console.WriteLine(numbers);
//}
Console.ReadLine();
}
}
}