我是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;
}
}
而不是:
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();
}
其中轮()
将调用函数,这些函数将捕获用户的建议,将其与秘密字进行比较,并减少尝试
的值(可以是类的属性,也可以是参数中传递的变量)并在向用户提示结果后返回游戏结束。
离开循环时,您可以询问用户是否希望重试,并调用设置函数重新初始化游戏。
您可以像这样更改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) {
...
}
还有一件事(因为你关于布尔返回值的问题似乎得到了回答):每次调用轮()
,你都会创建一个新的字符串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个字母,但当我猜正确时,上一个字母会被覆盖。 那么,有谁能伸出援助之手呢? 这是我的检查代码: }