java - 第一次编码(Java 刽子手游戏)- 从基于控制台到 GUI

标签 java user-interface stringbuffer

完全不熟悉编程,我必须用 Java 完成一些任务(我使用的是 Eclipse)。这是一款刽子手游戏。我的代码如下。我写了一个基于控制台的程序,基本上可以工作(计算生命而不是绘制刽子手图形)。

我认为这个问题对大多数人来说似乎很简单,但我真的很感谢你的帮助。

我正在尽最大努力在网上寻找答案,但作为一个完全的新手,很难知道从哪里开始。我真的很想知道我是否在正确的轨道上,这样我就不会浪费太多时间。

我应该(并且想要!)自己做这件事,所以理想情况下,我希望得到关于应该关注什么的提示。

我的问题是:

  1. 我现在需要创建一个 GUI(我以前从未做过): 我已经算出的这段代码有多大用处?一旦我开始使用 GUI 创建游戏,一切就完全不同了吗?
  2. 我使用了一个StringBuffer 来存储之前猜测的字母。我 想要搜索这个以便显示所有的单词 先前猜测的字母填写(因为它只打印 在所有其他字母被遮盖的情况下得出当前的猜测)。就是它 可能吗?

public static void main(String[] args) {
    Scanner myScanner = new Scanner(System.in);
    StringBuffer buffer = new StringBuffer();

    String secretWord;
    int secretWordLength;
    int position;
    int livesLost = 0;
    int totalLives = 10;
    int lettersRemaining;
    boolean guessInWord;
    char guess;
    StringBuffer prevGuessedLetters;

    //prompt user to enter a word and set as an instance of the secretWord variable
    System.out.println("Enter a word:");
    secretWord = myScanner.next();

    //determine the length of the word entered
    secretWordLength = secretWord.length();
    System.out.println(secretWordLength);
    lettersRemaining = secretWordLength;

    for (position = 0; position < secretWordLength; position++) {
        System.out.print("*");
    }
    System.out.println();

    //loop starts
    while (lettersRemaining > 0 && livesLost < 10) {
        //prompt user to guess a letter
        System.out.println("Guess a letter:");
        guess = myScanner.findWithinHorizon(".", 0).charAt(0);

        //check if the letter guessed is in the secretWord  
        guessInWord = (secretWord.indexOf(guess)) != -1;

        if (guessInWord == false) {
            livesLost++;
            System.out.print("Sorry, you have lost a life. You still have ");
            System.out.print(totalLives -= livesLost);
            System.out.println(" life/lives left. Keep trying.");
        } else {
            System.out.println("That was a good guess, well done!");

            for (position = 0; position < secretWordLength; position++) {
                if (secretWord.charAt(position) == guess) {
                    System.out.print(guess);
                    lettersRemaining--;
                } else {
                    System.out.print("*");
                }
            }
        }
        System.out.println();
        prevGuessedLetters = buffer.append(guess);
        System.out.print("Previously guessed letters: ");
        System.out.println(prevGuessedLetters);
        System.out.print("Letters remaining: ");
        System.out.println(lettersRemaining);
    }

    if (livesLost == totalLives) {
        System.out.println("Sorry, you lose!");
    } else {
        System.out.print("Well done, you win! The word was ");
        System.out.println(secretWord);
    }
}

最佳答案

Java 带有一个名为 Swing 的 GUI 工具包,您应该学会将其用于手头的任务。

就搜索之前猜测的字母而言, Set 可能更适合您,这是一个 Collection的独特元素。你可以使用 Set Character s ,即 Set<Character> .

一个粗略的例子:

Set<Character> guesses = new HashSet<Character>();
Character guess;
// etc.

while (lettersRemaining > 0 && livesLost < 10)
{
    //prompt user to guess a letter
    System.out.println("Guess a letter:");
    guess = myScanner.findWithinHorizon(".",0).charAt(0);

    if (guesses.contains(guess)) {
        System.out.println("You have already guessed this character!");
    } else {
        guesses.add(guess);
        //check if the letter guessed is in the secretWord
        guessInWord = (secretWord.indexOf(guess))!= -1;
        // etc.
    }
}

实际上,您可以从 add 中获得更多里程方法利用它返回 true 的事实如果元素不在集合中:

    if (guesses.add(guess)) {
        //check if the letter guessed is in the secretWord
        guessInWord = (secretWord.indexOf(guess))!= -1;
        // etc.
    } else {
        System.out.println("You have already guessed this character!");
    }

关于java - 第一次编码(Java 刽子手游戏)- 从基于控制台到 GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22768544/

相关文章:

javascript - 为什么我无法禁用按钮?

java - 如果我有足够的内存,我应该使用 stringBuilder 重写字符串连接吗?

java - 为什么 Maven 3.3 不包含 'javax.inject' 但 Maven 3.2 包含?

java - 为什么 Octave 构建看不到 Qscintilla 或 jni.h?

c++ - 用于基于语音的命令激活的开源库

python - 如何在 PyQt4 创建的 GUI 中以丰富的格式显示一些不可编辑的文本?

java - java中如何从字符串中获取正确的特殊字符?

java - 重新审视 Jon Skeet 在他的文章中发布的 Java 中的按值传递语义

java - 用户之间的Paypal java API应用程序

java - AWS S3 响应失败,即使文件已完全上传