1

首先,我不是要代码...我刚刚到了不知道如何进步的地步...有人可以向我解释如何开始刽子手的这一步吗?我已经有一系列按钮:

String  b[]={"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
for(i = 0; i < buttons.length; i++) {
    buttons[i] = new JButton(b[i]);        
    panel.add(buttons[i]);
}

然后我试图隐藏的词来自一个列表:

public String readWord() {
  try {
    BufferedReader reader = new BufferedReader(new FileReader("Words.txt"));
    String line = reader.readLine();
    List<String> words = new ArrayList<String>();
    while(line != null) {
      String[] wordsLine = line.split(" ");
      boolean addAll = words.addAll(Arrays.asList(wordsLine));
      line = reader.readLine();
    }
    Random rand = new Random(System.currentTimeMillis());
    String randomWord = words.get(rand.nextInt(words.size()));
    return randomWord;
  } catch (Exception e) {
    return null;
  }
}

现在有人可以指点我正确的方向来用“-”隐藏这个词。当用户点击正确的按钮时,字母必须出现......

如果它没有像以前那么清楚,我很抱歉。

4

3 回答 3

7

只需使用一个对象来解决这种情况:

public class HangmanWord {

    private static final char HIDECHAR = '_';

    private String original;     
    private String hidden;  

    public HangmanWord(String original) {
        this.original = original;
        this.hidden = this.createHidden();
    }

    private String createHidden() {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < this.original.length; i++) {
            sb.append(HIDECHAR);
        }
        return sb.toString();
    }

    public boolean check(char input) {
        boolean found = false;
        for (int i = 0; i < this.original.length; i++) {
            if (this.original[i].equals(input)) {
                found = true;
                this.hidden[i] = this.original[i];
            }
        }
        return found;
    }

    //getter and setter
}

单击按钮时,您会检查原始单词是否包含您的字母。然后你把隐藏词中的字符变为可见。hidden[i] = original[i]. 我希望通过这种封装,解决方案应该更清晰。

可能的用途:

public class TestClass() {

    public static void main(String[] args) {
        String secret = "stackoverflow";
        int wrongGuesses = 0;
        HangmanWord hngm = new HangmanWord(secret);
        System.out.println(hngm.getHidden()); // _____________
        if (hngm.check('a')) {
            System.out.println(hngm.getHidden()); // __a_________
        }
        else {
           wrongGuesses++;
        }
        //... and so on...
    }
}

如果您需要帮助理解这一点,请告诉我。

于 2012-08-22T13:12:40.057 回答
0

我实际上不确定我是否解决了这个问题,但是如果您的问题是替换字符串中需要按下的字母的一个字段,我会在开始时创建两个字符串,原始单词和一个(下文中称为“隐藏字符串”)只要是原始单词,仅由“_”组成。然后你需要一些逻辑来检查按下的字母是否在单词中的位置(这应该不难,使用StringBuilder),然后将“隐藏字符串”中的相应字段更改为字母。为了在您的 GUI 上显示字符(我假设您有一个,因为您有按钮),您在其上使用某种 TextField/-View 来显示“隐藏字符串”,我只需删除 TextField 的先前内容,并且写出新的“隐藏字符串”。

希望有帮助...

编辑:实际上保存两个字符数组而不是两个字符串会更加优雅,并且也可以很容易地转换为要写出的字符串。

于 2012-08-22T13:20:28.303 回答
0

保留 2 份字符串、单词和混淆的一份(包含“-”的一份)(最好作为 char 数组或字符串生成器)。当用户猜出一个字母时,在非混淆版本中搜索该字母的所有实例。每次找到匹配项时,将混淆字符串中该索引处的“-”更改为正确的字母。

于 2012-08-22T13:13:45.197 回答