先创建几个变量来接收牌组中的牌数、玩家胜利的次数、电脑胜利的次数和总共玩的总局数
private static int index = 53; // 记录当前牌组中的牌数
private static int gamePlayer = 0; // 玩家胜利的次数
private static int compuTers = 0; // 电脑胜利的次数
private static int race = 0; // 总共玩的总局数
创建完了变量之后,就可以写后台电脑自动游戏的函数
///
/// 后台电脑自动游戏的函数
///
/// name="nums">
///
public static int computer(ArrayList nums)
{
// 随机(随机数类)抽取两张牌并从牌组中去掉这张牌
int sum = 0;
Random ran = new Random();//实例化ran
int J = ran.Next(index--);//随机获取数组中的一个数值
int first = (int)nums[J];
nums.RemoveAt(J);//删除(记录当前牌组中的牌数"J")
int R = ran.Next(index--);
int second = (int)nums[R];
nums.RemoveAt(R);//删除(记录当前牌组中的牌数"R")
sum += first + second;
while (sum <= 15) // 当总和>15时自动退出继续抽牌的操作
{
int k = ran.Next(index--);
sum += (int)(nums[k]);
nums.RemoveAt(k);
}
return sum; // 返回电脑最终抽中的牌的总点数
}
切记随机抽到的数一定要从nums变量上删除对应的数,随机抽到的两个数大于15就停止抽取,否则继续抽;
继续写玩家的抽牌操作
///
/// 玩家抽牌操作
///
/// name="name">玩家名称
/// name="nums">
///
public static int Play(string name, ArrayList nums)
{
int sum = 0;
Random ran = new Random();
int J = ran.Next(index--);//获取数组中的索引
int first = (int)nums[J];//根据索引查出对应的数据
nums.RemoveAt(J);//删除对应的索引和索引值
int R = ran.Next(index--);
int second = (int)nums[R];
nums.RemoveAt(R);
sum += first + second;//数值相加
Console.Write($"{name} : 第一张牌:{first}\n第二张牌:{second}\n");
if (sum > 21)
{
Console.WriteLine($"{name}输了!");
return 1;
}
else
{
Console.WriteLine($"当前总和为:{sum}");
Console.WriteLine($"{name}需要再抽一张牌吗?(需要请输入:1/不需要请输入:2)");
while (Console.ReadLine() == "1")
{
int k = ran.Next(index--);
sum += (int)nums[k];
Console.WriteLine($"{name}抽到的卡牌是:{nums[k]},当前总和为:{sum}");
nums.Remove(k);
Console.WriteLine($"{name}需要再抽一张牌吗?(需要请输入:1/不需要请输入:2)");
//如果输入"1"随即回到while上继续随机获取一个0到13的数字,如果输入"2"就继续执行下面操作
}
if (sum == 21)
{
Console.WriteLine($"{name}赢了!");
return 0;
}
else if (sum > 21)
{
Console.WriteLine($"{name}你输了!");
return 1;
}
}
return sum;//结束后跳转到操作面板的do语句
}
玩家抽牌跟电脑抽牌大同小异。
游戏开始玩家和电脑一样随机抽两张牌,不过不同的是玩家的点数自己决定,抽完一开始的两张牌你觉得点数不满意可以输入“1”继续抽。