对于我的刽子手游戏,我想有一堆错误信息来检查输入的不止一个字母,猜测同一个字母两次,等等。到目前为止我的完整代码:
import java.awt.Color;
import java.awt.Font;
import java.util.Random;
import javax.swing.JOptionPane;
import javax.swing.UIManager;
import javax.swing.plaf.FontUIResource;
public class MainFrame extends javax.swing.JFrame {
public MainFrame() {
initComponents();
}
//declare variables
static String secretWord = "";
double result = 0;
StringBuilder mainWord = new StringBuilder();
StringBuilder xletters = new StringBuilder(); // letters guessed
String[] words = {"technology", "computer", "camera", "graphic", "digital", "media", "technician",
"photography", "troubleshoot", "pixels", "application", "download"};
Random r = new Random();
int randValue = r.nextInt(12);
String guessWord = words[randValue];
int errors = 0;
public static int wins = 0, losses = 0;
String foundWord = null;
private void GuessButtonActionPerformed(java.awt.event.ActionEvent evt) {
String strGuess = GuessText.getText(); //user input
String letter = strGuess;
xletters.append(strGuess.toUpperCase());
String GuessedLetters = xletters.toString();
try {
//replace underscores with letters as they are guessed
do {
for (int i = 0; i < 1; i++) {
secretWord = secretWord + letter.charAt(0);
foundWord = words[randValue].replaceAll("[^" + secretWord + "]", "_ ");
//if user entered more than one letter
if (strGuess.length() > 1) {
JOptionPane.showMessageDialog(null, "Only one letter at a time!");
xletters.append("");
GuessedLetters = null;
GuessText.setText(null);
GuessText.requestFocusInWindow();
} //if letter isn't in word
else if (guessWord.indexOf(strGuess) == -1) {
JOptionPane.showMessageDialog(null, "Sorry, that wasn't in the word.");
errors++;
if (errors == 1) {
Hangman0.setVisible(false);
}
if (errors == 2) {
Hangman1.setVisible(false);
}
if (errors == 3) {
Hangman2.setVisible(false);
}
if (errors == 4) {
Hangman3.setVisible(false);
}
if (errors == 5) {
Hangman4.setVisible(false);
}
if (errors == 6) {
Hangman5.setVisible(false);
}
if (errors == 7) {
Hangman6.setVisible(false);
}
if (errors == 8) {
Hangman7.setVisible(false);
}
if (errors == 9) {
Hangman8.setVisible(false);
}
if (errors == 10) {
Hangman9.setVisible(false);
JOptionPane.showMessageDialog(null, "You lost! The word was: " + guessWord);
losses++;
DirectionsFrame DFrame = new DirectionsFrame();
DFrame.setVisible(true);
setVisible(false);
MainFrame MFrame = new MainFrame();
MFrame.dispose();
xletters.delete(0, 100);
secretWord = "";
foundWord = null;
strGuess = null;
String strLosses = Integer.toString(losses);
String strWin = Integer.toString(wins);
DirectionsFrame.WinsLabel.setText(strWin);
DirectionsFrame.LossesLabel.setText(strLosses);
}
}
}
WordLabel.setText(foundWord.toUpperCase());
GuessedLabel.setText(GuessedLetters);
GuessText.setText(null);
GuessText.requestFocusInWindow();
} while (foundWord == null);
if (foundWord.equalsIgnoreCase(guessWord)) {
JOptionPane.showMessageDialog(null, "Yay!");
wins++;
DirectionsFrame DFrame = new DirectionsFrame();
DFrame.setVisible(true);
setVisible(false);
MainFrame MFrame = new MainFrame();
MFrame.dispose();
xletters.delete(0, 100);
secretWord = "";
foundWord = null;
String strWin = Integer.toString(wins);
String strLosses = Integer.toString(losses);
DirectionsFrame.WinsLabel.setText(strWin);
DirectionsFrame.LossesLabel.setText(strLosses);
}
} catch (StringIndexOutOfBoundsException e) {
JOptionPane.showMessageDialog(null, "Please enter a letter.");
GuessedLabel.setText(GuessedLetters);
GuessText.setText(null);
GuessText.requestFocusInWindow();
}
}
private void GetButtonActionPerformed(java.awt.event.ActionEvent evt) {
//print out underscores to begin game
for (int i = 0; i < guessWord.length(); i++) {
mainWord.append("_ ");
}
String SetMain = mainWord.toString();
mainWord.append(secretWord);
WordLabel.setText(SetMain);
GuessButton.setEnabled(true);
GetButton.setEnabled(false);
}
我遇到的最大问题是检查用户是否输入了相同的字母两次。所以你只能猜一次字母表中的一个字母。此外,它检查用户输入的多个字母是否有错误的代码,我相信,因为如果我不希望它将这些字母添加到猜测字母框中,它会以任何方式添加这些字母。(即,用户猜测“hf”,在猜测的字母中出现“hf”,在这里它应该是空的)
我觉得答案在于indexOf()方法,但我不完全确定if条件会说什么。。。
我正在使用Netbean IDE 7.2编译我的代码。请帮帮忙!谢谢。
我想为你的信件检查做的是:用用过的信件列一个清单。每次玩家尝试一个字母时,你都会用for循环检查该字母是否在你的列表中。如果不是,则将其添加到列表中。这是一个例子:
List<String> usedletters = new List<String>(26);
boolean checkLetterUsed(String input){
boolean tempvariable = false;
for(String letter: usedletters){
if(letter==input){
tempvariable = true;
}
}
if(tempvariable){
return true;
}else{
usedletters.add(input);
return false;
}
}
为了查看他们是否已经猜到了什么,您可以先猜一个空字符串,当他们猜到时,您可以将该字母添加到字符串中:
String guesses = "";
...
guesses+= letter;
看起来您已经在做类似的事情了,但请确保只添加字母,而不是为其创建新字符串。这样,您每次都可以检查猜测字符串是否已经包含新猜测的字母(if(guesss.contains(letter))。
另外,我不知道为什么你有一个只有一个迭代的for循环,但是在多字母的情况下,你可以尝试打破循环,或者如果你失败了,继续
如果您想知道某件东西是否已经被使用过,则会出现一个Set
。例如,在刽子手游戏中使用字母时,您需要设置
Set<String> lettersUsed = new HashSet<String>();
如果您想知道是否已经选择了某些内容:
String inputLetter = "Z"; // test for the letter Z
if (!lettersUsed.contains(inputLetter)) {
lettersUsed.add(inputLetter);
// process letter in word
} else {
// letter has already been used!
}
如果只允许初始设置的特定字母集,请执行以下操作:
if (lettersAllowed.contains(inputLetter)) {
lettersAllowed.remove(inputLetter);
// process letter in word
} else {
// letter is not allowed (anymore)
}
我几乎完成了一个基本的刽子手游戏,但我在课堂上遇到了“makeGuess”方法的困难。我试图测试用户输入(他们的一个字符猜测)与秘密单词,并更新伪装的单词,如果他们的猜测是正确的或不正确的。任何正确方向的建议或指点都将不胜感激。每次运行时都会出现以下错误: 这是刽子手课: } 这是我的演示课 }
问题内容: 假设您有一个像这样的函数: 而您通常以这种方式使用它: 在这里检查错误的惯用方式是什么?更具体的问题: 如果我们可以假设永远是零,反之亦然? 我们首先要检查什么:(无)或(确认不是零)? 在某些情况下可以是真的吗? 谢谢! 问题答案: 比较 《错误处理编程指南》中从方法返回的处理错误对象: 重要提示: 方法的返回值指示成功或失败。尽管在方法可通过直接返回nil或NO指示失败的情况下,保
我为跳棋游戏创建了两个类。一个是木板,另一个是碎片。我所面临的困难是,对于这些碎片,我似乎无法让它们移动,也无法让它们正确地停留在那个位置,事实上,由于我不了解这里到底出了什么问题,我无法再前进了。有人能纠正我做错了什么吗。 这是拼图课
My mechanic told me, I couldn’t repair your brakes, so I made your horn louder. — Steven Wright 通常,当出现问题时,我们会在继续运行前先停止它并修复错误。然而, 当以守护进程模式运行时,Puppet 会忽略配置清单的编译错误, 仅从缓存中应用最近一次已知可运行的版本。这个行为是由 usecacheonf
问题内容: 调用Web服务时,我使用以下方法检查超时,但是我想专门检查是否返回超时错误。我该怎么做:S 我有这个: 问题答案: 作为go1.6的,从超时所有错误应符合与正确设置。您需要检查的只是: 在旧版本中,通过http包检查超时更为困难。 如果您在基础连接上设置了“截止日期”,则可以使用Timeout()获得一个。 您可以获得一个(显然不会导出)实现该接口的文件。 如果url包内有问题(初始连
问题内容: 我想检查子流程是否成功完成执行或失败。目前,我已经提出了一个解决方案,但是我不确定它是否正确和可靠。是否保证每个进程仅将错误输出到stderr : 注意:我对仅重定向/打印输出不感兴趣。我已经知道该怎么做。 或者: 和: 问题答案: 您需要对流程的输出做任何事情吗? 该方法在这里可能有用。在这里查看python文档:https : //docs.python.org/2/library