刽子手作业:需要帮助揭示这个秘密词

时间:2016-01-21 00:08:46

标签: java

我有一份学校作业,而且在刽子手中你会慢慢地透露这个词,因为用户猜测并且我遇到了麻烦。

例如,这就是我想要的(例如appleauce):

猜猜:' a'

显示:' a ***** a ***'

猜猜:' p'

显示:' app *** a ***'

这就是我目前所拥有的:

猜猜:' a'

显示:' a ***** a ***'

猜猜:' p'

显示:' * pp *******'

以下是我的代码,如果它有帮助:

import java.util.Scanner;
import java.util.Random;

public class HangmanAssignment
{  
  static Scanner numIn = new Scanner(System.in);
  static Scanner strIn = new Scanner(System.in);

  // Used to hold the user's previous guesses into a string.
  static StringBuffer buffer = new StringBuffer();

  public static void main(String[] args)
  {
    String category;
    int wordLength;
    int position;
    int lettersRemaining;
    int totalLives = 10;
    boolean isGuessInWord;
    StringBuffer prevGuessedLetters;
    String word;
    String displayWord = "";
    char guess;

    category = getCategory();
    word = getWord(category);

    // Gets the length of the word.
    wordLength = word.length();
    lettersRemaining = wordLength;
    System.out.println("The length of your word is: " + wordLength + " characters.");

    // Generates as many '*' as long as word's length and stores it in 'displayWord'.
    for (int i = 0; i < wordLength; i++)
    {
      displayWord += "-";
      // System.out.println(displayWord); /* Testing */
    }

    while (lettersRemaining > 0 && totalLives > 0) 
    {
      // Prompts user to guess a letter.
      System.out.println("Guess a letter (Note: there are " + wordLength + " letters)");
      guess = strIn.findWithinHorizon(".", 0).charAt(0);

      // Checks if the letter guessed in within 'word'.
      isGuessInWord = (word.indexOf(guess)) != -1;

      // Checks if the guess is in within 'word'.
      if (isGuessInWord == false) 
      {
        totalLives--;
        System.out.println("Sorry, but '" + guess + "' was not in the word."); 

        if (totalLives < 1)
        {
          System.out.println("It seems like you have no lives left! :(");
        }
        else if (totalLives == 1)
        {
          System.out.println("Careful! You only have 1 life left!");
        }
        else
        {
          System.out.println("You still have " + (totalLives) + " lives left!");
        }
      } 

      else 
      {
        System.out.println("Nice one! The letter '" + guess + "' was in the word!");

        for (position = 0; position < wordLength; position++) 
        {
          String newDisplayWord = "";

          for (position = 0; position < wordLength; position++) 
          {
            if (word.charAt(position) == guess) 
            {
              /* displayWord.charAt(position).equals(word.charAt(position)); */
              System.out.print(guess);
              lettersRemaining--;
            } 
            else 
            {
              System.out.print("*");
            }
          } 
        }
      }

      // Holds the user's previously guessed letters and the number of letters in the word that are still unknown.
      System.out.println();
      prevGuessedLetters = buffer.append(guess);
      System.out.println("Previously guessed letters: " + (prevGuessedLetters));
      System.out.println("Letters remaining: " + (lettersRemaining));
      System.out.println("");

      // Checks win/lose conditions.
      if (lettersRemaining == 0)
      {
        System.out.println("Congratulations, '" + word + "' was the correct answer!");
      }
      if (totalLives < 1) 
      {
        System.out.println("Sorry, you lose!");
        System.out.println("The correct answer was '" + word + "'.");
        {
          break;
        }
      }
    }
  }

  public static String getCategory()
  {
    String category;

    System.out.println("=====================================");
    System.out.println("Welcome to the Hangman Game!");
    System.out.println("=====================================");

    while (true)
    {
      System.out.println("Choose from the following categories:");
      System.out.println("1. Car Brands");
      System.out.println("2. Countries");
      System.out.println("3. Animals");
      System.out.println("4. Fruit");
      System.out.println("");
      category = strIn.nextLine();

      if (category.toLowerCase().equals("1") || (category.toLowerCase().equals("one")))
      {
        category = "car brands";
      }
      else if (category.toLowerCase().equals("2") || (category.toLowerCase().equals("two")))
      {
        category = "countries";
      }
      else if (category.toLowerCase().equals("3") || (category.toLowerCase().equals("three")))
      {
        category = "animals";
      }
      else if (category.toLowerCase().equals("4") || (category.toLowerCase().equals("four")))
      {
        category = "fruit";
      }

      if (category.toLowerCase().equals("car brands") || category.toLowerCase().equals("countries") || category.toLowerCase().equals("animals") || category.toLowerCase().equals("fruit"))
      {
        System.out.println("");
        System.out.println("Nice Choice! You have chosen the '" + category + "' category!");
        System.out.println("");
        break;
      }
      else
      {
        System.out.println("Sorry, but '" + category + "' is not a valid input. Try Again!");
        System.out.println("");
      }
    }
    return category;
  }

  public static String getWord(String category)
  {
    String[] carBrandsWord = {"toyota", "ferrari", "honda", "hyundai", "lamborghini", "dodge", "ford", "chevrolet", "fiat", "lexus", "volkswagen", "acura", "audi", "bentley", "bugatti", "buick", "cadillac"};
    String[] countriesWord = {"canada", "england", "france", "switzerland", "australia", "sweden", "greece", "italy", "mexico", "brazil", "india", "china", "russia", "japan", "spain", "ireland"};
    String[] animalsWord = {"cat", "dog", "parrot", "bear", "tiger", "monkey", "zebra", "hippopotamus", "chicken", "horse", "cow", "starfish", "squid", "wolf", "hyena", "cheetah", "penguin"};
    String[] fruitsWord = {"apple", "banana", "orange", "grapes", "grapefruit", "apricot", "cherry", "guava", "kiwi", "mango", "melon", "olive", "pineapple", "strawberry", "watermelon"};

    String word = "";

    if (category.toLowerCase().equals("car brands"))
    {
      Random random = new Random();
      int index = random.nextInt(carBrandsWord.length);
      word = (carBrandsWord[index]);
    }

    else if (category.toLowerCase().equals("countries"))
    {
      Random random = new Random();
      int index = random.nextInt(countriesWord.length);
      word = (countriesWord[index]);
    }

    else if (category.toLowerCase().equals("animals"))
    {
      Random random = new Random();
      int index = random.nextInt(animalsWord.length);
      word = (animalsWord[index]);
    }

    else
    {
      Random random = new Random();
      int index = random.nextInt(fruitsWord.length);
      word = (fruitsWord[index]);
    }

    return word;
  }
}

2 个答案:

答案 0 :(得分:0)

在main方法中,你需要在word下声明另一个变量,这将保持字符序列显示的最后状态,如:

String displayWord;

该变量需要在每个游戏开头时用字大小的****初始化;

之后你需要更改代码:

else 
  {
    System.out.println("Nice one! The letter '" + guess + "' was in the word!");
    for (position = 0; position < wordLength; position++) 
    {
      for (position = 0; position < wordLength; position++) 
      {
        if (word.charAt(position) == guess) 
        {
          //replacing every time * with guessed letter
          displayWord = displayWord.substring(0,position)+ guess +displayWord.substring(position + 1);
          lettersRemaining--;
        }
      } 
    }
    System.out.print(displayWord); // here we display it
  }

答案 1 :(得分:0)

只需使用数组:

import java.util.Scanner;
import java.util.Random;

public class HangmanAssignment
{  
  static Scanner numIn = new Scanner(System.in);
  static Scanner strIn = new Scanner(System.in);

  // Used to hold the user's previous guesses into a string.
  static StringBuffer buffer = new StringBuffer();

  public static void main(String[] args)
  {
    String category, word, displayWord = "";
    int wordLength, position, lettersRemaining, totalLives = 10;
    boolean isGuessInWord;
    char guess;
    StringBuffer prevGuessedLetters;
    char  temp []= new char [20];
    category = getCategory();
    word = getWord(category);

    // Gets the length of the word.
    wordLength = word.length();
    for(int i =0; i <wordLength;i++)
        temp[i]='*';
    lettersRemaining = wordLength;
    System.out.println("The length of your word is: " + wordLength + " characters.");

    // Generates as many '*' as long as word's length and stores it in 'displayWord'.
    for (int i = 0; i < wordLength; i++)
    {
      displayWord += "-";
      // System.out.println(displayWord); /* Testing */
    }


while (lettersRemaining > 0 && totalLives > 0) 
    {
      // Prompts user to guess a letter.
      System.out.println("Guess a letter (Note: there are " + wordLength + " letters)");
      guess = strIn.findWithinHorizon(".", 0).charAt(0);

      // Checks if the letter guessed in within 'word'.
      isGuessInWord = (word.indexOf(guess)) != -1;

      // Checks if the guess is in within 'word'.
      if (isGuessInWord == false) 
      {
        totalLives--;
        System.out.println("Sorry, but '" + guess + "' was not in the word."); 

        if (totalLives < 1)
        {
          System.out.println("It seems like you have no lives left! :(");
        }
        else if (totalLives == 1)
        {
          System.out.println("Careful! You only have 1 life left!");
        }
        else
        {
          System.out.println("You still have " + (totalLives) + " lives left!");
        }
      } 


      else 
      {
        System.out.println("Nice one! The letter '" + guess + "' was in the word!");

        for (position = 0; position < wordLength; position++) 
        {


          for (position = 0; position < wordLength; position++) 
          {
            if (word.charAt(position) == guess) 
            {
             temp[position]=guess;
              /* displayWord.charAt(position).equals(word.charAt(position)); */

              lettersRemaining--;
            } 



          } 
        }
      }
for(int i = 0;i<wordLength;i++){
    System.out.print(temp[i]);
}
      // Holds the user's previously guessed letters and the number of letters in the word that are still unknown.
      System.out.println();
      prevGuessedLetters = buffer.append(guess);
      System.out.println("Previously guessed letters: " + (prevGuessedLetters));
      System.out.println("Letters remaining: " + (lettersRemaining));
      System.out.println("");

      // Checks win/lose conditions.
      if (lettersRemaining == 0)
      {
        System.out.println("Congratulations, '" + word + "' was the correct answer!");
      }
      if (totalLives < 1) 
      {
        System.out.println("Sorry, you lose!");
        System.out.println("The correct answer was '" + word + "'.");
        {
          break;
        }
      }
    }
  }

  public static String getCategory()
  {
    String category;

    System.out.println("=====================================");
    System.out.println("Welcome to the Hangman Game!");
    System.out.println("=====================================");

    while (true)
    {
      System.out.println("Choose from the following categories:");
      System.out.println("1. Car Brands");
      System.out.println("2. Countries");
      System.out.println("3. Animals");
      System.out.println("4. Fruit");
      System.out.println("");
      category = strIn.nextLine();

      if (category.toLowerCase().equals("1") || (category.toLowerCase().equals("one")))
      {
        category = "car brands";
      }
      else if (category.toLowerCase().equals("2") || (category.toLowerCase().equals("two")))
      {
        category = "countries";
      }
      else if (category.toLowerCase().equals("3") || (category.toLowerCase().equals("three")))
      {
        category = "animals";
      }
      else if (category.toLowerCase().equals("4") || (category.toLowerCase().equals("four")))
      {
        category = "fruit";
      }

      if (category.toLowerCase().equals("car brands") || category.toLowerCase().equals("countries") || category.toLowerCase().equals("animals") || category.toLowerCase().equals("fruit"))
      {
        System.out.println("");
        System.out.println("Nice Choice! You have chosen the '" + category + "' category!");
        System.out.println("");
        break;
      }
      else
      {
        System.out.println("Sorry, but '" + category + "' is not a valid input. Try Again!");
        System.out.println("");
      }
    }
    return category;
  }

  public static String getWord(String category)
  {
    String[] carBrandsWord = {"toyota", "ferrari", "honda", "hyundai", "lamborghini", "dodge", "ford", "chevrolet", "fiat", "lexus", "volkswagen", "acura", "audi", "bentley", "bugatti", "buick", "cadillac"};
    String[] countriesWord = {"canada", "england", "france", "switzerland", "australia", "sweden", "greece", "italy", "mexico", "brazil", "india", "china", "russia", "japan", "spain", "ireland"};
    String[] animalsWord = {"cat", "dog", "parrot", "bear", "tiger", "monkey", "zebra", "hippopotamus", "chicken", "horse", "cow", "starfish", "squid", "wolf", "hyena", "cheetah", "penguin"};
    String[] fruitsWord = {"apple", "banana", "orange", "grapes", "grapefruit", "apricot", "cherry", "guava", "kiwi", "mango", "melon", "olive", "pineapple", "strawberry", "watermelon"};

    String word = "";

    if (category.toLowerCase().equals("car brands"))
    {
      Random random = new Random();
      int index = random.nextInt(carBrandsWord.length);
      word = (carBrandsWord[index]);
    }

    else if (category.toLowerCase().equals("countries"))
    {
      Random random = new Random();
      int index = random.nextInt(countriesWord.length);
      word = (countriesWord[index]);
    }

    else if (category.toLowerCase().equals("animals"))
    {
      Random random = new Random();
      int index = random.nextInt(animalsWord.length);
      word = (animalsWord[index]);
    }

    else
    {
      Random random = new Random();
      int index = random.nextInt(fruitsWord.length);
      word = (fruitsWord[index]);
    }

    return word;
  }
}