C#骰子游戏对局结束后endgame()方法无法正常调用问题求助
问题根本原因
- 调用逻辑本身没有错误,
endgame()方法实际上已经正常执行了,你误认为无法调用的核心原因是:方法内所有结果输出完成后,没有设置任何等待用户操作的逻辑,程序执行完endgame()后会直接退出,控制台窗口瞬间闪退,导致你看不到endgame()输出的对局结果。 - 额外隐藏问题:你使用
Random.Next(1,6)生成骰子点数,该方法的第二个参数是不包含的上限值,所以当前代码最多只能生成1-5的点数,永远无法得到6,不符合骰子的数值规则。
修复方案
- 先修改
endgame()方法,在末尾添加等待输入逻辑,避免窗口闪退:
public void endgame() { if (sClass.player > sClass.com) { Console.WriteLine("Player Win! Player vs Computer"); Console.WriteLine($" ({sClass.player}) vs ({sClass.com})"); } else if (sClass.player < sClass.com) { Console.WriteLine("Computer Win! Player vs Computer"); Console.WriteLine($" ({sClass.player}) vs ({sClass.com})"); } else { Console.WriteLine("Its a draw! Player vs Computer"); Console.WriteLine($" ({sClass.player}) vs ({sClass.com})"); } // 新增该行,等待用户按回车后再关闭窗口 Console.ReadLine(); }
- 修复随机数生成范围错误,修改
sClass类中的两个随机数调用逻辑:
public static void playgame() { // 把上限从6改成7,才能生成1-6的点数 comguess = r.Next(1, 7); playerdie = rolldie(); } public static int rolldie() { // 把上限从6改成7,才能生成1-6的点数 int die = r.Next(1, 7); return die; }
- 可选优化:补全输入非法判断,避免用户输入0、负数或者非数字时报错或逻辑异常,把原来的输入判断修改为:
sClass.guess = 0; // 增加异常处理,避免非数字输入崩溃 if (!int.TryParse(Console.ReadLine(), out sClass.guess) || sClass.guess < 1 || sClass.guess >6) { Console.WriteLine("Only enter number ranges from 1 - 6"); Console.ReadLine(); Console.Clear(); goto start; }
内容的提问来源于stack exchange,提问作者Xm Par
相关产品推荐
相关产品推荐

