当前位置: 首页 > 知识库问答 >
问题:

为刽子手游戏创建布尔值。卡住了

杨起运
2023-03-14

我是java新手,我正在尝试创建一个基本的刽子手游戏,我已经为这一轮创建了方法,但我一直在创建一个布尔值,该值将使游戏进入下一轮(如果玩家输入了错误的字母,他将失去一次猜测字母的尝试;他可能只会出错10次;如果猜测,他将继续游戏)。我的代码到目前为止,我甚至尝试通过if/else语句排除布尔值,但对我来说它似乎非常愚蠢。任何帮助都是有用的。非常感谢。

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

public class assignmenTwo {
    public static void main(String[] args) {
        welcomeMessage();
        String myWord = randomizeWord();
        char[] hiddenWord = hideWord(myWord);
        printArr(hiddenWord);
        char guess = userLine();
        game(guess, myWord);
        //
        // indexOfGuessed(guess,myWord,hiddenWord);
        // printArr(hiddenWord);
    }

    public static void game (char userGuess, String word) {
        int attempts = 10;
        while (attempts > 0) {
            round();
            for (int i = 0; i < word.length(); i++) {
                if (userGuess != word.charAt(i)) {
                    attempts--;
                    System.out.println("You have"+attempts+"attempts. Try again!");
                }
            }
        }
    }

    public static void round () {
        String myWord = randomizeWord();
        char[] hiddenWord = hideWord(myWord);
        printArr(hiddenWord);
        char guess = userLine();

        indexOfGuessed(guess,myWord,hiddenWord);
        printArr(hiddenWord);
        return;
    }


    public static void welcomeMessage() {
        String welcome = "Welcome";
        System.out.println(welcome);
    }// say hi

    public static String randomizeWord() {
        Random r = new Random();
        String[] dictionary = {"hello", "dear", "Universe"};
        int wordIndex = r.nextInt(dictionary.length);
        String myWord = dictionary[wordIndex];
        return myWord;
    }

    public static char[] hideWord(String myString) {
        char[] hidWord = new char[myString.length()];
        for (int i = 0; i < myString.length(); i++) {
            hidWord[i] = '*';
        }
        return hidWord;
    }

    public static char userLine() {
        Scanner in = new Scanner(System.in);

        System.out.println("\nYour word is above. Guess a letter!");
        char userInput = in.next().charAt(0);
        return userInput;
    }

    public static String stars(String word) {
        String stars = "";
        for (int i = 0; i < word.length(); i++) {
            stars += '*';
        }
        return stars;
    }

    public static void  printArr (char [] arr) {
        System.out.println();
       for (int i = 0; i < arr.length; i++) {

            System.out.print(arr[i]);
        }
    }

    public static void indexOfGuessed(char userGuess, String word, char[] hiddenWord) {
        for (int i = 0; i < word.length(); i++) {
            if (userGuess == word.charAt(i)) {
                hiddenWord[i] = userGuess;
            }
        }
        return;
    }
}

共有3个答案

秦弘亮
2023-03-14

而不是:

while (attempts > 0) {
    round();
    for (int i = 0; i < word.length(); i++) {
        if (userGuess != word.charAt(i)) {
            attempts--;
            System.out.println("You have"+attempts+"attempts. Try again!");
        }
    }
}

您应该使用一个布尔值创建一个唯一的循环,该布尔值定义游戏是否结束,如:

boolean over = false;

while(!over){
    over = round();
}

其中轮()将调用函数,这些函数将捕获用户的建议,将其与秘密字进行比较,并减少尝试的值(可以是类的属性,也可以是参数中传递的变量)并在向用户提示结果后返回游戏结束。

离开循环时,您可以询问用户是否希望重试,并调用设置函数重新初始化游戏。

松波
2023-03-14

您可以像这样更改IndexOfGuessed函数,使其返回搜索状态:

public static void findGuessed(char userGuess, String word, char[] hiddenWord) {
    boolean found = false;
    for (int i = 0; i < word.length(); i++) {
        if (userGuess == word.charAt(i)) {
            hiddenWord[i] = userGuess;
            found = true;
        }
    }
    return found;
}

然后,您可以使也返回一个布尔值,该值表示是否赢了:

public static void round () {
    String myWord = randomizeWord();
    char[] hiddenWord = hideWord(myWord);
    printArr(hiddenWord);
    char guess = userLine();

    return findGuessed(guess, myWord, hiddenWord);
}

然后在游戏中可以查看回合:

boolean won = round();
if (won) {
   ...
}
农飞星
2023-03-14

还有一件事(因为你关于布尔返回值的问题似乎得到了回答):每次调用轮(),你都会创建一个新的字符串myWord

此字符串仅对round()方法可见,与在main方法中初始化的String myWord不同。

我建议您将myWord设置为全局变量,设置一次,如果需要,让其他方法引用该变量。

现在,每次调用round()都会从字典中随机获得一个新单词。

我还想说,如果你没有仅仅因为eclipse(或其他一些IDE)告诉你你不能在静态的main方法中做非静态引用就把所有东西都变成静态的,你会做得更好:

String myWord;

    public static void main(String[] args) {

        AssignmenTwo a2 = new AssignmenTwo();
        a2.runGame();
        //
        // indexOfGuessed(guess,myWord,hiddenWord);
        // printArr(hiddenWord);
    }

    public void runGame(){
        welcomeMessage();
        myWord = randomizeWord();
        char[] hiddenWord = hideWord(myWord);
        printArr(hiddenWord);
        char guess = userLine();
        game(guess, myWord);
    }

    public void game(char userGuess, String word) {
        int attempts = 10;
        while (attempts > 0) {
            round();
            for (int i = 0; i < word.length(); i++) {
                if (userGuess != word.charAt(i)) {
                    attempts--;
                    System.out.println("You have" + attempts + "attempts. Try again!");
                }
            }
        }
    }

    public void round() {

        char[] hiddenWord = hideWord(myWord);
        printArr(hiddenWord);
        char guess = userLine();

        indexOfGuessed(guess, myWord, hiddenWord);
        printArr(hiddenWord);
        return;
    }  ...
 类似资料:
  • 在我的游戏中出现的问题是,当我试图在游戏中插入单词时,它不显示字母,它应该在正确的时候显示字母,如果它是错误的,它应该通过增加刽子手的一部分来惩罚我。 我创建了惩罚函数和函数,当它正确时显示用户输入的字母,请帮助!! 这是我的代码:http://pastebin.com/du98i88G 我认为在pygame中的函数` 中可能存在问题,而不是gameQuit:for event。事件get():i

  • 当我通过卡布局切换到另一个JPanel时,我遇到了一个卡住的精灵的问题。 现在..从屏幕切换的角度来看,一切都正常..但我的播放器精灵在切换后会卡在屏幕上,但在初始加载时,我可以用箭头键移动精灵。我不确定在新的视图上忽略播放器是否是罪魁祸首..但是我有一种感觉..想不出我做错了什么.. 玩家是这样的: 导入导入 java.awt.Rectangle;import java.awt.event.Ke

  • 我在做一个2D跑步者游戏,我用它做了框架 每次我创建一个类时,我每次都是这样制作JFrames,没有重新调用这个类或其他任何东西。我用连接到其他类的按钮完成了菜单,但我现在需要做一个关卡。它包括一个玩家左右向上移动,与平台和敌人发生碰撞。有点像超级马里奥。我是Java的初学者,所以我还没有找到任何遵循我的结构的示例,因为它们都基于JFrame 1。我不知道如何制作互动程序并将其连接到类的JFram

  • 我已经被这段代码困扰了一段时间,非常感谢您的帮助。因此,基本上我的刽子手代码运行良好,但控制台中的显示,破折号应该反映哪些字母猜对了,哪些字母仍然需要猜对,这是完全错误的。我将在这里发布我的代码。由于时间很长,我将只发布相关的方法。我觉得问题似乎出在显示数组列表上,我无法持续更新它。

  • 我正在做一个刽子手游戏。我几乎完成了,但我编写的代码,无论何时,只要隐藏的单词中有两个或两个以上的点需要用猜测的字母替换,都只适用于第一个。例如,如果要查找的单词是“ball”,用户输入“b”和“l”,而不是“b_ll”,那么他将返回的隐藏单词是“b_l_”。这是一种奇怪的练习,因为用户首先键入字母,每次猜测后都没有得到反馈。这是密码。 先谢谢你。

  • 嗨,我是编程新手,我们的任务是制作一个刽子手游戏。现在我面临的问题是猜测。程序猜对了一切,并且工作正常。虽然它不会打印出中的字母,或者它会打印出1个字母,但当我猜正确时,上一个字母会被覆盖。 那么,有谁能伸出援助之手呢? 这是我的检查代码: }