You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.");
}
关键修改说明
  1. 将分数初始值设为0,启动时同步到文本框,匹配需求。
  2. 新增guessedLetters集合记录已猜字母,避免重复点击同一字母多次加分。
  3. 猜中字母时先执行scoreInt++,再更新文本框显示,确保分数随猜中次数递增。
  4. 简化分支逻辑,移除冗余的else if (letterFound),代码更简洁。

内容的提问来源于stack exchange,提问作者Pektra Mom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 04:53:21