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

一个使用数组和循环的简单的主谋游戏

白宏大
2023-03-14

这是我为一个班级做的一个项目。我还是一个初学者,所以这个主题只应该涵盖到字符串、循环和数组。如果你对游戏不熟悉的话,进阶版就是这个。然而,我的任务是一个更简单的版本。以下是这个版本的规则。

程序开始时要求第一个玩家,即代码制造者,输入一个用于游戏的模式。图案长4个字母,每个字母代表一种颜色(R为红色,G为绿色)。
为了简化游戏,只有两种颜色可以使用,红色和绿色。因此,例如,用户可以输入RRGR来表示Red Red Green Red,或者他们可以输入GGGG来表示Green Green Green Green。为简化起见,您可以假设模式将仅由R和/或G组成,代码生成器将不会输入不正确的字符或符号。但是,您必须检查代码生成器输入的是4个字符(它是4个字符长,而不是5个字符长,也不是3个字符长)。如果他们没有,您需要提示直到他们做到。代码生成器可以输入大小写字母,您应该能够处理它。

Code maker, please enter a pattern of 4 colors (the possible colors are R=red and G=green):

GGGR

What is the maximum number of guesses allowed for this game?

4

Okay, now it's the code breaker's turn. You have 4 chances to guess the pattern. Enter a guess:

RRRR

The code maker sets out 1 black pegs and 0 white pegs. 

Enter a guess:

GGRG

The code maker sets out 2 black pegs and 2 white pegs

Enter a guess:

GGGR

You got the pattern! The code breaker wins!

这是我正在关注的代码(计算黑色引脚)。到目前为止,我的问题是,我无法使插针与每一个数组内容相匹配。基本上,它总是导致4个引脚,即使有的时候它应该是3个引脚或2个。如果需要,整个未完成的代码在此部分下面。

String pattern = keys.nextLine().toUpperCase(); // this is used to enter the original pattern
String attempt = keys.nextLine().toUpperCase(); // this is to enter an attempt

String pattern_array [] = new String [5];
String attempt_array [] = new String [5];

int i;          
int black_pegs = 0;
for (i=0; i<pattern.length(); i++) {
    pattern_array[i] = pattern.substring(i,(i+1)); 
}
for ( i=0; i<attempt.length();i++) {
    attempt_array[i] = attempt.substring(i,i+1);
}
for (int x=0; x<4; x++) {
    if (pattern_array[i]==attempt_array[i]) {
        black_pegs++;
    }
}

这是我的代码,我已经到目前为止(请随意看一看,并指出其他事情,如果你愿意)

import java.util.Scanner;
public class CopyOfAssignment5 {
    public static void main(String[] args) {
        Scanner keys = new Scanner(System.in);
        System.out.println("Codemaker, please enter a pattern of 4 colors (the possible colors are R=red and G=green");
        String pattern = keys.nextLine().toUpperCase();
        System.out.println("What is the maximum number of guesses for this game?");
        int number_of_guesses = keys.nextInt();
        int turns = number_of_guesses + 1;
        System.out.println();
        System.out.println();
        System.out.println();
        System.out.println();
        System.out.println("Okay, now its the codebreaker's turn. You have " + number_of_guesses
                + " chances to guess the pattern");
        System.out.println("Enter a Guess:");

        int white_pegs = 0, black_pegs = 0;
        String pattern_array[] = new String[5];
        String attempt_array[] = new String[5];
        String attempt = null;

        while (turns > 0) { // while turns are not zero
            attempt = keys.nextLine().toUpperCase(); // then keep displaying the scanner input for an attempt.
            turns--;
        }
        if (attempt.equals(pattern)) { // if you get the correct patter, then you win. Loops stops.
            System.out.println("You got the pattern! The codebreaker wins!");
        }
        if (turns == 0 && !(attempt.equals(pattern))) {
            System.out
                    .println("The codemaker sets out " + black_pegs + " black pegs and " + white_pegs + " white pegs.");
            System.out.println("Sorry, that was your last chance. You lost.");
        } else if (turns < turns) {
            System.out
                    .println("The codemaker sets out " + black_pegs + " black pegs and " + white_pegs + " white pegs.");
            System.out.println("Enter a Guess:");
        }

        int i;
        for (i = 0; i < pattern.length(); i++) {
            pattern_array[i] = pattern.substring(i, (i + 1));
        }
        for (i = 0; i < attempt.length(); i++) {
            attempt_array[i] = attempt.substring(i, i + 1);
        }
        for (int x = 0; x < 4; x++) {
            if (pattern_array[i] == attempt_array[i]) {
                black_pegs++;
            }
        }
    }
}

共有1个答案

解宏扬
2023-03-14

下面是我的实现。我不会解释代码,因为你已经接受了一个答案。也许你还是想比较一下你的代码和我的。也许其他人会在这个问题上找到答案,并从下面的代码中得到一些好处。

public class MstrMind {
    private static final char  BLACK = 'B';
    private static final char  WHITE = 'W';
    private static final int  CODE_LENGTH = 4;

    private static String getCode(Scanner stdin) {
        System.out.println("Code maker, please enter a pattern of " + CODE_LENGTH + " colors (the possible colors are R=red and G=green):");
        String code = stdin.nextLine();
        while (!isCodeValid(code)) {
            System.out.println("Entered code does not contain " + CODE_LENGTH + " colors.");
            System.out.println("Code maker, please enter a pattern of " + CODE_LENGTH + " colors (the possible colors are R=red and G=green):");
            code = stdin.nextLine();
        }
        return code.toUpperCase();
    }

    private static int getGuesses(Scanner stdin) {
        System.out.print("What is the maximum number of guesses allowed for this game? ");
        int guesses = stdin.nextInt();
        stdin.nextLine();
        return guesses;
    }

    private static boolean guess(Scanner stdin, String code) {
        System.out.print("Enter a guess: ");
        String guess = stdin.nextLine();
        char[] flags = new char[CODE_LENGTH];
        int blackCount = 0;
        int whiteCount = 0;
        for (int i = 0; i < CODE_LENGTH; i++) {
            if (guess.charAt(i) == code.charAt(i)) {
                flags[i] = BLACK;
                blackCount++;
            }
            else {
                for (int j = 0; j < CODE_LENGTH; j++) {
                    if (guess.charAt(j) == code.charAt(i)  &&  flags[j] == 0  &&  i != j) {
                        flags[j] = WHITE;
                        whiteCount++;
                    }
                }
            }
        }
        boolean guessed = blackCount == CODE_LENGTH;
        if (!guessed) {
            System.out.printf("The code maker sets out %d black pegs and %d white pegs.%n",
                              blackCount,
                              whiteCount);
        }
        else {
            System.out.println("You got the pattern! The code breaker wins!");
        }
        return guessed;
    }

    private static boolean isCodeValid(String code) {
        return code != null && code.length() == CODE_LENGTH;
    }

    private static void playGame(Scanner stdin, String code, int guesses) {
        int guess = guesses;
        boolean guessed = false;
        while (guess > 0  &&  !guessed) {
            guessed = guess(stdin, code);
            guess--;
        }
        if (!guessed) {
            System.out.println("Code breaker failed to break the code. Code maker wins.");
        }
    }

    public static void main(String[] args) {
        Scanner stdin = new Scanner(System.in);
        String code = getCode(stdin);
        int guesses = getGuesses(stdin);
        System.out.printf("Okay, now it's the code breaker's turn. You have %d chances to guess " +
                                                                                  "the pattern.%n",
                          guesses);
        playGame(stdin, code, guesses);
    }
}
 类似资料:
  • 我是C编程的初学者,我需要一些关于数字猜测游戏中的右位计数器的帮助。在这个游戏中,会生成一个4位的随机秘密数字,用户必须通过输入不同的数字来猜测它。在此代码中,用户输入的每个数字都会被扫描和检查。如果在输入中找到秘密数字的数字,计数器k会添加1,因此它应该给出猜测的数字数。顺序并不重要(在这个阶段)。问题:游戏给出的猜测数字较少。 } 输出示例: 输入数字:2015猜测数字为2个秘密数字=4901

  • 问题内容: 我写一个游戏循环,我发现在例如下面的代码在这里。我还研究了进行游戏循环的其他方法,例如本文。但是我无法让这些工作。因此,我保留了第一个链接中的那个。 我想知道的是: 我编写游戏循环的方式是否是实现此目标的好方法? 有什么建议? 我应该在游戏循环中使用吗? 这是我当前的代码: 问题答案: 最终,您将想要移至LWJGL之类的地方,但让我强调一下,请继续做您现在在这里所做的事情。它将教您基本

  • 我刚开始使用Haskell,希望在不安装额外库的情况下制作一个简单的实时游戏。我需要写一个循环,扫描键盘输入,但如果没有输入,游戏也必须运行。我该怎么做?

  • 本文向大家介绍JS简单循环遍历json数组的方法,包括了JS简单循环遍历json数组的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS简单循环遍历json数组的方法。分享给大家供大家参考,具体如下: 例如数据库里面的json字符串是这样的 上面的是js的,下面的是jquery来解析json字符串, 循环的话,和上面一样 更多关于JavaScript相关内容可查看本站专题:《Java

  • 问题内容: 这是Java代码的片段: 它显示5。但是为什么声明了for循环的声明部分,却没有声明? 在uu上,您将引用2D数组…这不是一项作业。我正在准备Java认证。干杯 问题答案: 由于你是一个。因此,当您对其进行迭代时,您将首先获得,然后可以对该数组进行迭代以获取单个元素。 因此,您的外部循环具有as类型,因此具有该声明。如果您在另一个内循环中进行迭代,则将得到以下类型:-