双人Java骰子游戏循环无法终止问题求助
解决双人骰子游戏的无限循环问题
嘿,我看你在开发这款双人骰子游戏时碰到了无限循环的问题,别慌,咱们一起来捋清楚怎么解决~
问题分析
你提到每轮玩家要扣除10点积分才能掷骰子,那合理的终止逻辑应该是:当任意一位玩家的积分不足10点,没法支付下一轮的成本时,游戏结束。你遇到的无限循环大概率是因为do-while循环的终止条件没设置对——毕竟这种循环是先执行代码块,再判断要不要继续跑,如果终止条件永远为真,循环就会停不下来。
具体解决方案
我给你整理了修正后的代码,重点补全了循环的终止条件,同时完善了每轮的积分逻辑:
public class DiceGameC { private static Die die = new Die(12); private static Player p1 = new Player("Wasi"); private static Player p2 = new Player("Pruthvi"); public static void main(String[] args) { // 初始化两位玩家的初始积分都是100 p1.setScore(100); p2.setScore(100); do { // 处理玩家1的回合:先扣10点,再掷骰子加积分 p1.setScore(p1.getScore() - 10); int diceSum1 = die.roll() + die.roll(); p1.setScore(p1.getScore() + diceSum1); System.out.println(p1.getName() + "掷出了" + diceSum1 + ",当前积分:" + p1.getScore()); // 处理玩家2的回合:同样先扣后加 p2.setScore(p2.getScore() - 10); int diceSum2 = die.roll() + die.roll(); p2.setScore(p2.getScore() + diceSum2); System.out.println(p2.getName() + "掷出了" + diceSum2 + ",当前积分:" + p2.getScore()); // 核心终止条件:只有两位玩家都有≥10点积分时,才继续下一轮 } while (p1.getScore() >= 10 && p2.getScore() >= 10); // 循环结束后,判断最终胜负 if (p1.getScore() > p2.getScore()) { System.out.println(p1.getName() + "获胜!最终积分:" + p1.getScore()); } else if (p2.getScore() > p1.getScore()) { System.out.println(p2.getName() + "获胜!最终积分:" + p2.getScore()); } else { System.out.println("平局!两位玩家最终积分都是:" + p1.getScore()); } } } // 补充Die类的基础实现(假设你之前的Die类逻辑类似) class Die { private int sides; public Die(int sides) { this.sides = sides; } // 生成1到sides之间的随机点数 public int roll() { return (int) (Math.random() * sides) + 1; } } // 补充Player类的基础实现(假设你之前的Player类逻辑类似) class Player { private String name; private int score; public Player(String name) { this.name = name; } public String getName() { return name; } public int getScore() { return score; } public void setScore(int score) { this.score = score; } }
关键说明
- 循环的终止条件
while(p1.getScore() >=10 && p2.getScore() >=10):只有当两个玩家都能支付下一轮的10点成本时,才继续循环;只要有一个玩家积分不够,循环就立刻终止。 - 每轮的积分逻辑:先扣除10点(符合你设定的规则),再根据骰子总和添加对应积分,流程更清晰不易出错。
内容的提问来源于stack exchange,提问作者Wasi Rehman
相关产品推荐
相关产品推荐

