如何在C#编写的石头剪刀布游戏中实现电脑出拳随机化
电脑随机出拳实现原理
- 你用到的C#语言内置了
Random类用于生成伪随机数,这类伪随机生成器的底层逻辑是:以系统当前时间戳作为初始种子,输入固定的数学迭代算法,输出统计上均匀分布的整数序列,只要种子不重复,生成的数值序列就不会重复,足够满足石头剪刀布这类普通场景的随机需求。 - 你的场景只需要从1、2、3三个值中随机取一个,分别对应电脑出石头、布、剪刀即可。要注意
Random的Next(min, max)方法的取值范围是左闭右开,max值不会被包含在结果里,所以要生成1~3的整数,需要调用Next(1, 4)。
现有代码问题说明
你现在的代码把电脑出三种拳的判定逻辑全部硬编码按顺序执行,每次运行会同时触发三次胜负判定,分数计算也会重复出错,拿到随机的电脑出拳值后,只需要执行对应出拳的那一段判定逻辑即可。
修正后的完整代码
class Program { public static void Main(string[] args) { Console.WriteLine("你好!我是电脑,你叫什么名字?"); Console.Write("请在这里输入你的名字:"); string name = Console.ReadLine(); Console.WriteLine($"你好{name},很高兴认识你!"); Console.WriteLine(); Console.WriteLine("我们来玩石头剪刀布吧"); Console.WriteLine(); Console.Write("石头...剪刀...布...出!请输入1、2或3(1=石头,2=布,3=剪刀):"); Console.WriteLine(); string userInput = Console.ReadLine(); // 简单校验用户输入合法性 if (!int.TryParse(userInput, out int userChoice) || userChoice < 1 || userChoice > 3) { Console.WriteLine("输入不合法,请输入1、2或3"); Console.Read(); return; } // 生成电脑随机出拳 Random random = new Random(); int computerChoice = random.Next(1, 4); int userPoints = 0; int computerPoints = 0; // 输出双方选择 string[] choiceNames = { "", "石头", "布", "剪刀" }; Console.WriteLine($"用户出了{choiceNames[userChoice]}"); Console.WriteLine($"电脑出了{choiceNames[computerChoice]}"); // 胜负判定 if (userChoice == computerChoice) { Console.WriteLine("平局!"); } else if ((userChoice == 1 && computerChoice == 3) || (userChoice == 2 && computerChoice == 1) || (userChoice == 3 && computerChoice == 2)) { Console.WriteLine("用户获胜!"); userPoints++; } else { Console.WriteLine("电脑获胜!"); computerPoints++; } Console.WriteLine($"用户积分:{userPoints} - 电脑积分:{computerPoints}"); Console.Read(); } }
内容的提问来源于stack exchange,提问作者ponar
相关产品推荐
相关产品推荐

