2

我是 Java 新手,所以这听起来很傻。

我正在尝试从 Java 创建一个基于 GUI 的刽子手游戏。我已经从数组中创建了按钮列表,并在单击时将单个字母作为字符返回。我有要猜测的单词列表,每次按下按钮时,它都需要将单词与按下的字母进行比较,如果匹配则替换。

我的一个朋友建议使用数组来拆分和检查字母,但我不熟悉这些东西。由于我需要跟踪错误输入以及计数错误,我不确定使用 StringBuilder 是否是最好的主意。如果 StringBuilder 对我来说是最佳选择,请帮助我解决以下问题:

 String word = retWord; // The actual word  
 String s = "" + guessed; //Changing guessed letter to string 
 StringBuilder gletters = new StringBuilder(s);  
 String mainword = word.replaceAll("[^" + gletters + "]", "_"); //Replacing the matching letters  
 a.setText(mainword);

代码在FOR按钮按下循环内执行,但输出需要是“苹果”。每次按下按钮时,输出看起来像这样:

按下 A 时 : A _ _ _ _
按下 P 时 : _ pp _ _
按下 L 时 : _ _ _ L _
按下 E 时 : _ _ _ _ E

我的问题是我应该如何让它记住以前正确的猜测,而不仅仅是当前的猜测?另外,我如何计算错误按钮按下的错误?

任何帮助,将不胜感激。

4

4 回答 4

1

将先前猜测的字母保存在一个数组中

ArrayList<String> lettersGuessed;

一些伪代码

When button pressed then
    added letter to list of letters guessed
    if the letter guessed is wrong then
        increment wrong guesses count
        end game it too many wrong guesses
    end if
    reveal all letters in the list of letters guessed
end when 
于 2013-09-20T16:51:49.960 回答
1

你的问题是你一直gletters用 for 循环覆盖。这意味着您的正则表达式会覆盖除猜测的字母之外的所有内容,而不是之前的。

要更改尽可能少的代码(即使用StringBuilder),只需在 for 循环之外进行初始化gletters(容量至少为正确字的大小)。然后在循环内,附加到它。

你应该可以从这里弄清楚。JavaDocs 是你的朋友!http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html

于 2013-09-20T17:07:56.847 回答
0

将正确的猜测存储在一个数组/列表/集合中,将错误的猜测存储在另一组中。然后你可以调用你使用的任何结构的 count 方法来获取错误猜测的数量。

于 2013-09-20T16:58:24.617 回答
0

您可以使用布尔数组存储以前猜测的字母。

boolean lettersGuessed = new boolean[26];

从那里取出按下的字母(一个字符,而不是字符串)并将其转换为大写;然后减去 65。使用你得到的数字作为数组中的位置,并检查它是否已经被猜到;如果没有将那里的条目设置为 true 并显示正确的字母,或者将错误猜测的计数加 1。

转换为大写的代码如下所示:

// See if a lower case letter was entered
// Convert it to uppercase
if (guessed >= 97 && guessed <= 122) guessed -= 32;

// Subtract 65 to get array index
guessed -= 65;

// Make sure the guess is a letter
if (guessed <= 0 && guessed <= 25) {
    if (lettersGuessed[guessed]) {
        // The user already guessed this letter, do nothing
    } else {
        lettersGuessed[guessed] = true;
        // See if the letter guessed was right, if it was show the letters
        // If it wasn't, incorrectGuesses+1
} 

它使用的关键思想是在内部,计算机使用数字来表示字母(在这种情况下,查找 ascii 值);知道了这一点,我们可以使用这些数字将它们转换为适用于数组中位置的范围(0 到 25)。

为了检查一个字母是否正确,你可以这样做(这不是最好的方法,但应该足够简单):

boolean correct = false;
for (int i = 0; i < word.length(); i++) {
    if (word.charAt(i) == guessed) {
        correct = true;
    }
}

运行之后,如果猜到的字母是单词中的字母,则为correct真。否则correct会是假的。

为了记住以前的猜测,而不是String s = "" + guessed;,您每次都重新声明 String s,而只需声明一次 String s。然后,要在其末尾添加一个字母,请使用s.concat("" + guessed).

于 2013-09-20T17:00:13.283 回答