-2

我做了一个刽子手,它基本上是完整的,但是我似乎无法让一个循环工作,所以当用户获胜时,他们会被问到如果他们说是,他们是否想要另一个游戏,然后它会重新开始?谁能帮帮我?

刽子手类:

/*
 * 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 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 choosen 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 choosen 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 choosen Hard");
                    new Game(words.hardWords, scan);
                    break;

            }
        }
    }
}

游戏类:

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

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

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

    String player = "";
    int turn = 12;
    List<String> wordBox = new ArrayList<String>();
    boolean hangman = false;
    boolean win = false;
    String loop;
    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: " + "\n" + 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 alreay choosen please choose another letter");
                turn++;
            } 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!" + "\n" + mask);                      // Prints mask after Yes!

                turn--;

                if (mask.contains(words[selectA])) {
                    System.out.println("You win!");

                    System.out.println("would you like another game?");
                    loop = scan.next();

                    while ("Yes".equals(loop) ||"yes".equals(loop));

                }

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

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

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


            }
        }
    }
}

词类:

/*
 * 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 + '}';
    }
}

我试过这个?

 if (mask.contains(words[selectA])) {
                    System.out.println("You win!");

                    System.out.println("would you like another game?");
                    loop = scan.next();

                    while ("Yes".equals(loop) ||"yes".equals(loop));

                }

没啥事儿。

4

1 回答 1

1

最简单的方法是这样的:

if("Yes".equals(loop) || "yes".equals(loop)) {
    new Game(words, scanner);
}

或者如果玩家再次选择关卡更好,你应该在 Hangman 类中放置一个真正的循环(你只需要改变这个:

if(hangman == true) {    <- why there was while ??
    System.out.println("You lose!");
    //System.exit(0);    <- remove this
}

并允许 Game 类完成,返回 Hangman 类,所有代码都应该在一个循环中(仅当用户想要退出时才结束)。试试这个并询问是否有任何问题。

于 2013-04-07T11:02:17.987 回答