JavaFX猜单词游戏:猜中字母后分数无法逐次加1的问题求助
问题根源分析
- 分数初始化错误:你把
score初始为"1",导致scoreInt初始值为1,和游戏启动显示0的需求矛盾,且后续没有修正这个初始错误。 - 猜中时未执行分数递增:当前代码仅把现有
scoreInt的值显示到文本框,完全没有scoreInt++的逻辑,所以分数不会随猜中次数增加。 - 未处理重复猜字母的情况:用户重复点击已猜中的字母时,会重复触发加分逻辑,需要额外限制。
修正后的代码
第一步:修正分数初始化
// 初始化分数为0,匹配游戏启动显示0的需求 int scoreInt = 0; // 启动时同步分数到文本框 scoreTxtField.setText(Integer.toString(scoreInt));
第二步:修改猜字母核心逻辑
// 新增类成员变量,存储已猜过的字母(避免重复加分) private Set<Character> guessedLetters = new HashSet<>(); // 猜字母的处理逻辑 char guessedChar = letterClicked.charAt(0); // 先判断是否已猜过该字母 if (guessedLetters.contains(guessedChar)) { // 可添加提示:"该字母已猜过",或直接跳过 return; } guessedLetters.add(guessedChar); boolean letterFound = false; for (int i = 0; i < actualWord.length(); i++) { if (actualWord.charAt(i) == guessedChar) { hiddenWordChars[i] = guessedChar; letterFound = true; } } // 更新隐藏单词显示 findWordTxtField.setText(new String(hiddenWordChars)); wordLabel.setText(new String(hiddenWordChars)); // 处理猜中/未猜中的逻辑 if (!letterFound) { lifeRemaining--; drawBodyParts(); } else { // 猜中时先递增分数,再更新文本框 scoreInt++; scoreTxtField.setText(Integer.toString(scoreInt)); } // 检查是否猜完所有字母 if (!new String(hiddenWordChars).contains("_")) { wordLabel.setText("Congratulations! You found the word."); }
关键修改说明
- 将分数初始值设为0,启动时同步到文本框,匹配需求。
- 新增
guessedLetters集合记录已猜字母,避免重复点击同一字母多次加分。 - 猜中字母时先执行
scoreInt++,再更新文本框显示,确保分数随猜中次数递增。 - 简化分支逻辑,移除冗余的
else if (letterFound),代码更简洁。
内容的提问来源于stack exchange,提问作者Pektra Mom
相关产品推荐
相关产品推荐

