这是我为一个班级做的一个项目。我还是一个初学者,所以这个主题只应该涵盖到字符串、循环和数组。如果你对游戏不熟悉的话,进阶版就是这个。然而,我的任务是一个更简单的版本。以下是这个版本的规则。
程序开始时要求第一个玩家,即代码制造者,输入一个用于游戏的模式。图案长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++;
}
}
}
}
下面是我的实现。我不会解释代码,因为你已经接受了一个答案。也许你还是想比较一下你的代码和我的。也许其他人会在这个问题上找到答案,并从下面的代码中得到一些好处。
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类型,因此具有该声明。如果您在另一个内循环中进行迭代,则将得到以下类型:-