0

絞首刑執行人プログラムで推測された文字を表示できるようにしたいと考えています。たとえば、単語が hello の場合、プレーヤーには次のように表示されます。h はプレーヤーによって推測されますが、そのように「はい」と表示されますが、文字列 h *** が表示されます。これを達成する方法を知っている人はいますか? これが私のコードです:

ハングマンクラス:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package hangman;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import java.util.Scanner;

/**
 *
 * @author Adam2_000
 */
public class Hangman {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {


        String player = "";
        String selection;
        int turn = 12;
        List<String> wordBox = new ArrayList<String>();
        boolean hangman = false;
        Scanner scan = new Scanner(System.in);

        //New instances of class and arrays
        words words = new words();
        String easyWords1[] = words.easyWords;
        String mediumWords1[] = words.mediumWords;
        String hardWords1[] = words.hardWords;
        Random random = new Random();


        System.out.println("Welcome to Hangman version 1");
        System.out.println("Please choose a difficulty");
        System.out.println("A: Easy");
        System.out.println("B: Medium");
        System.out.println("C: Hard");

        System.out.println(" _________     ");
        System.out.println("|         |    ");
        System.out.println("|         0    ");
        System.out.println("|        /|\\  ");
        System.out.println("|        / \\  ");
        System.out.println("|              ");
        System.out.println("|              ");


        char iChoice;

        do {
            selection = scan.nextLine().toUpperCase();
        } while (selection.isEmpty());
        iChoice = selection.charAt(0);
        if (iChoice != 'X') {
            switch (iChoice) {

                case 'A':
                    System.out.println("You have choosen easy:");
                    //Get and print random string from easyWords                   
                    int selectA = random.nextInt(easyWords1.length);
                    String replaceAllEasy = easyWords1[selectA].replaceAll("\\S", "*");
                    // Print the randomly selected word and its length
                    System.out.println("Random String selected: " + replaceAllEasy);
                    System.out.println("This word contains " + easyWords1[selectA].length() + " letters");

                    //while hangman == false continue to ask player for letters
                    while (hangman == false) {
                        System.out.println("Turns remaining: " + turn);
                        System.out.println("Please choose a letter A-Z :");
                        String easyChosenLetter = scan.next();

                        if (wordBox.contains(easyChosenLetter)) {
                            System.out.println("Letter alreay choosen please choose another letter");
                        } else {
                            wordBox.add(easyChosenLetter);
                        }

                        if (easyWords1[selectA].contains(easyChosenLetter)) {

                            System.out.println("Wordbox letters are: " + wordBox);
                            System.out.println("Yes!");
                            turn--;
                        } else {
                            System.out.println("Wordbox letters are: " + wordBox);
                            System.out.println("No!");
                            turn--;
                        }

                        if (turn == 0) {
                            hangman = true;
                        }

                        while (hangman == true) {
                            System.out.println("You lose!");
                            System.exit(0);
                        }

                        //unstarredString = "Bee", you can do unstarredString.substring(0,1) + oldstr.substring(1,2)
                    }
                    break;

                case 'B':
                    System.out.println("You have choosen Medium");
                    //Get and print random string from mediumWords
                    int selectB = random.nextInt(mediumWords1.length);
                    String replaceAllMedium = mediumWords1[selectB].replaceAll("\\S", "*");
                    // Print the randomly selected word and its length
                    System.out.println("Random String selected: " + replaceAllMedium);
                    System.out.println("This word contains " + mediumWords1[selectB].length() + " letters");

                    //while hangman == false continue to ask player for letters
                    while (hangman == false) {
                        System.out.println("Turns remaining: " + turn);
                        System.out.println("Please choose a letter A-Z :");
                        String mediumChosenLetter = scan.next();

                        if (wordBox.contains(mediumChosenLetter)) {
                            System.out.println("Letter alreay choosen please choose another letter");
                        } else {
                            wordBox.add(mediumChosenLetter);
                        }

                        wordBox.add(mediumChosenLetter);
                        if (easyWords1[selectB].contains(mediumChosenLetter)) {
                            System.out.println("Wordbox letters are: " + wordBox);
                            System.out.print("Yes!");
                            turn--;

                        } else {
                            System.out.println("Wordbox letters are: " + wordBox);
                            System.out.println("No!");
                            turn--;
                        }

                        if (turn == 0) {
                            hangman = true;
                        }

                        while (hangman == true) {
                            System.out.println("You lose!");
                            System.exit(0);
                        }

                    }
                    break;

                case 'C':
                    System.out.println("You have choosen Hard");
                    //Get and print random string from hardWords
                    int selectC = random.nextInt(hardWords1.length);
                    String replaceAllHard = hardWords1[selectC].replaceAll("\\S", "*");
                    // Print the randomly selected word and its length  
                    System.out.println("Random String selected: " + replaceAllHard);
                    System.out.println("This word contains " + hardWords1[selectC].length() + " letters");

                    //while hangman == false continue to ask player for letters
                    while (hangman == false) {
                        System.out.println("Turns remaining: " + turn);
                        System.out.println("Please choose a letter A-Z :");
                        String hardChosenLetter = scan.next();

                        if (wordBox.contains(hardChosenLetter)) {
                            System.out.println("Letter alreay choosen please choose another letter");
                        } else {
                            wordBox.add(hardChosenLetter);
                        }

                        wordBox.add(hardChosenLetter);
                        if (easyWords1[selectC].contains(hardChosenLetter)) {
                            System.out.println("Wordbox letters are: " + wordBox);
                            System.out.print("Yes!");
                            turn--;

                        } else {
                            System.out.println("Wordbox letters are: " + wordBox);
                            System.out.println("No!");
                            turn--;
                        }

                        if (turn == 0) {
                            hangman = true;
                        }

                        while (hangman == true) {
                            System.out.println("You lose!");
                            System.exit(0);
                        }


                    }
                    break;



            }

        }
    }
}

単語クラス:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package hangman;

import java.lang.reflect.Array;
import java.util.Random;

/**
 *
 * @author Adam2_000
 */
public class Words extends Hangman {

    String[] easyWords = {"Bee", "Car", "Fish", "Shed"};
    String[] mediumWords = {"House", "Sheep", "Castle", "Phone"};
    String[] hardWords = {"Octagon", "Crocodile", "Chocolate", "Motorbike"};

    public String[] getEasyWords() {
        return easyWords;
    }

    public void setEasyWords(String[] easyWords) {
        this.easyWords = easyWords;
    }

    public String[] getMediumWords() {
        return mediumWords;
    }

    public void setMediumWords(String[] mediumWords) {
        this.mediumWords = mediumWords;
    }

    public String[] getHardWords() {
        return hardWords;
    }

    public void setHardWords(String[] hardWords) {
        this.hardWords = hardWords;
    }

    @Override
    public String toString() {
        return "words{" + "easyWords=" + easyWords + ", mediumWords=" + mediumWords + ", hardWords=" + hardWords + '}';
    }
}
4

2 に答える 2

1

まず、Hangman コードを 2 つのファイルに分割することをお勧めします。元。

ハングマン.java

package hangman;

import java.util.Scanner;

/**
 *
 * @author Adam2_000
 */
public class Hangman {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

        String selection;
        Scanner scan = new Scanner(System.in);

        /*
         *  I moved the variables found here to the Game class 
         */

        //New instances of class and arrays
        Words words = new Words();


        System.out.println("Welcome to Hangman version 1");
        System.out.println("Please choose a difficulty");
        System.out.println("A: Easy");
        System.out.println("B: Medium");
        System.out.println("C: Hard");
        System.out.println("X: Exit");      // Just for user friendlyness

        System.out.println(" _________     ");
        System.out.println("|         |    ");
        System.out.println("|         0    ");
        System.out.println("|        /|\\  ");
        System.out.println("|        / \\  ");
        System.out.println("|              ");
        System.out.println("|              ");

        char iChoice;

        do {
            selection = scan.nextLine().toUpperCase();
        } while (selection.isEmpty());

        iChoice = selection.charAt(0);
        if (iChoice != 'X') {
            switch (iChoice) {
                case 'A':
                    System.out.println("You have chosen easy:");
                    new Game(words.easyWords, scan);                //All three levels can be called from the same class with the same code.
                    break;                                          //This will help reduce amount of code, and help when you need to change all three at once.

                case 'B':
                    System.out.println("You have chosen Medium");
                    new Game(words.mediumWords, scan);              //Called with the String[] of words you want to use and the scanner to save memory.
                    break;

                case 'C':
                    System.out.println("You have chosen Hard");
                    new Game(words.hardWords, scan);
                    break;
            }
        }
    }
}

ゲーム.java

    package hangman;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;

public class Game {
    String player = "";
    int turn = 12;
    List<String> wordBox = new ArrayList<String>();
    boolean hangman = false;
    Scanner scan;
    Random random = new Random();

    String letters;     // For displaying letters
    String mask;        // For character Mask

    public Game(String[] words, Scanner scanner){
        scan = scanner;

        int selectA = random.nextInt(words.length);

        letters = words[selectA];               //Load word into String for display. This just makes the code more readable.        
        mask = letters.replaceAll("\\S", "*");  // Mask the words

        System.out.println("Random String selected: " + mask);
        System.out.println("This word contains " + letters.length() + " letters");

        while (hangman == false) {
            System.out.println("Turns remaining: " + turn);
            System.out.println("Please choose a letter A-Z :");
            String ChosenLetter = scan.next();

            if (wordBox.contains(ChosenLetter)) {
                System.out.println("Letter already chosen please choose another letter");
            } else {
                wordBox.add(ChosenLetter);
            }

            if (letters.contains(ChosenLetter)) {
                char[] cLetters = letters.toCharArray();    //Load letters and mask to char array for editing
                char[] cMask = mask.toCharArray();

                for(int i=0; i < cMask.length; i++){
                    if(cLetters[i] == ChosenLetter.charAt(0)){
                        cMask[i] = cLetters[i];
                    }
                }

                mask = new String(cMask);   //Load new mask into String

                System.out.println("Wordbox letters are: " + wordBox);
                System.out.println("Yes!" + mask);                      // Prints mask after Yes!

                turn--;
            } else {
                System.out.println("Wordbox letters are: " + wordBox);
                System.out.println("No!" + mask);                               //Prints mask after No!
                turn--;
            }

            if (turn == 0) {
                hangman = true;
            }

            while (hangman == true) {
                System.out.println("You lose!");
                System.exit(0);
            }
        }
    }
}

次に、私があなたの質問にどのように答えたかを示したいと思います。

mask上記のコードでは、単語をandという名前の変数にロードしたことがわかりますletters。次に、このコードでこれらの変数を使用しました

 char[] cLetters = letters.toCharArray();//Load letters and mask to char array for editing
 char[] cMask = mask.toCharArray();

 for(int i=0; i < cMask.length; i++){
      if(cLetters[i] == ChosenLetter.charAt(0)){
          cMask[i] = cLetters[i];
      }
  }

  mask = new String(cMask); //Load new mask into String

  System.out.println("Wordbox letters are: " + wordBox);
  System.out.println("Yes!" + mask);                        // Prints mask after Yes!

いいえ System.out.println("No!" + mask);

これがお役に立てば幸いです。そして、コードの素晴らしい仕事。メニューを設定する方法が大好きです。

于 2013-04-06T18:19:34.067 に答える
0

レベルごとにこれを行う必要があります。indexOf基本的に、単語内の文字の位置を見つけて置き換えることに依存しています。

            if (easyWords1[selectC].contains(hardChosenLetter)) {
                String word = easyWords1[selectC];
                char[] unMasked = replaceAllHard.toCharArray();
                unMasked[word.indexOf(hardChosenLetter)] = hardChosenLetter.charAt(0);
                replaceAllHard = new String(unMasked);
                System.out.println("Wordbox letters are: " + wordBox);
                System.out.print("Yes!");
                System.out.println(replaceAllHard);
                turn--;

            } else {
                System.out.println("Wordbox letters are: " + wordBox);
                System.out.println("No!");
                turn--;
            }
于 2013-04-06T17:34:19.300 に答える