Java Hangman-用字符替换下划线
所以我正在为我的java类创建一个hangman游戏,但是我在用字母替换单词中的下划线时遇到了麻烦。我用下划线把单词打印出来,比如:Java Hangman-用字符替换下划线,java,arrays,char,stringbuilder,Java,Arrays,Char,Stringbuilder,所以我正在为我的java类创建一个hangman游戏,但是我在用字母替换单词中的下划线时遇到了麻烦。我用下划线把单词打印出来,比如: for(int i = 0; i < GuessWord.length(); i++) { if (guesses[GuessWord.charAt(i) - 'a']) { mainword.append(words[i].charAt(i));
for(int i = 0; i < GuessWord.length(); i++) {
if (guesses[GuessWord.charAt(i) - 'a']) {
mainword.append(words[i].charAt(i));
}
else {
mainword.append("_");
}
mainword.append(" ");
}
for(inti=0;i
剩下的就是我代码的其余部分。我应该提到的是,我正在使用Netbeans IDE 7.2,并且我正在使用JLayeredPane来显示所有内容,而不是System.out.print。谢谢
import java.util.Random;
import java.util.Scanner;
import javax.swing.JOptionPane;
public class MainFrame extends javax.swing.JFrame {
public MainFrame() {
initComponents();
}
//declare variables
static String SecretWord = "";
static String Letters = "";
double Result = 0;
String SetMain = null;
StringBuilder mainword = new StringBuilder();
StringBuilder gletters = new StringBuilder();
boolean[] guesses = new boolean[26];
String[] words = {"technology", "computer", "camera", "graphic design", "digital", "media", "technician", "photography", "troubleshoot", "pixels", "application", "download"};
Random r = new Random();
int randvalue = r.nextInt(11);
String GuessWord = words[randvalue];
private void GoButtonActionPerformed(java.awt.event.ActionEvent evt) {
mainword.append(SecretWord);
//make word in underscore form
for(int i = 0; i < GuessWord.length(); i++) {
if (guesses[GuessWord.charAt(i) - 'a']) {
mainword.append(words[i].charAt(i));
}
else {
mainword.append("_");
}
mainword.append(" ");
}
//put in label
SetMain = mainword.toString();
WordLabel.setText(SetMain);
GuessButton.setEnabled(true);
GoButton.setEnabled(false);
}
private void GuessButtonActionPerformed(java.awt.event.ActionEvent evt) {
//declare variables
String strGuess = GuessText.getText();
String SetMain = null;
String GuessedLetters = null;
Result = 1;//(int)(Math.random() * 11) + 1;
int errors = 0;
int i = 0;
char guess2 = strGuess.charAt(i);
gletters.append(Letters);
//*******MAJOR PROBLEM AREA FOCUS HERE*******
do{
//replace underscore with guessed letter
for(i = 0; i < GuessWord.length(); i++) {
if (GuessWord.charAt(i) == guess2) {
mainword.replace(0,i,strGuess.toUpperCase());
}
else {
mainword.append("_");
}
mainword.append(" ");
}
//put in labels
SetMain = mainword.toString();
GuessedLetters = gletters.toString();
WordLabel.setText(SetMain);
GuessedLabel.setText(GuessedLetters);
GuessText.setText(null);
GuessText.requestFocusInWindow();
}//end of do
while(SetMain == null);
if (SetMain.equalsIgnoreCase(GuessWord)){
//show winning message to user and reset game
JOptionPane.showMessageDialog(null, "Congrats!");
GuessButton.setEnabled(false);
GoButton.setEnabled(true);
WordLabel.setText(null);
GuessedLabel.setText(null);
WinsLabel.setText("1");
}
//if too many errors show lost message
else if (errors >= 5){
JOptionPane.showMessageDialog(null, "You Lost!");
GuessButton.setEnabled(false);
GoButton.setEnabled(true);
WordLabel.setText(null);
GuessedLabel.setText(null);
LossesLabel.setText("1");
}
}//end of 1GAME
}
import java.util.Random;
导入java.util.Scanner;
导入javax.swing.JOptionPane;
公共类大型机扩展了javax.swing.JFrame{
公共主机(){
初始化组件();
}
//声明变量
静态字符串SecretWord=“”;
静态字符串字母=”;
双结果=0;
字符串SetMain=null;
StringBuilder mainword=新建StringBuilder();
StringBuilder gletters=新的StringBuilder();
布尔[]猜测=新布尔[26];
String[]words={“技术”、“计算机”、“相机”、“平面设计”、“数字”、“媒体”、“技术人员”、“摄影”、“疑难解答”、“像素”、“应用程序”、“下载”};
随机r=新随机();
int randvalue=r.nextInt(11);
字符串猜测词=单词[randvalue];
私有void GoButtonActionPerformed(java.awt.event.ActionEvent evt){
主词。附加词(SecretWord);
//将单词做成下划线形式
对于(inti=0;i=5){
showMessageDialog(null,“您丢失了!”);
GuessButton.setEnabled(假);
GoButton.setEnabled(真);
WordLabel.setText(空);
GuessedLabel.setText(空);
LossesLabel.setText(“1”);
}
}//游戏结束
}
任何帮助都会很好!请不要太复杂。另外,我在上面的代码中标记了我的主要问题区域。这里有一种不同的方法。我们不尝试用占位符替换未猜测的字母。在这里,我们记住迄今为止猜到的所有字母(在一组中),并为每个回合重新创建秘密单词的“视图”。演示代码包括一个愚蠢的玩家,他只是随机猜测字母表中的所有字母
public static void main(final String[] args) {
String secretWord = "fibonacci";
Set<Character> guessedLetters = new HashSet<>();
// (1) create some test input (all letters randomized)
List<Character> chars = new ArrayList<>();
for (char c = 'a'; c <= 'z'; c++) {
chars.add(c);
}
Collections.shuffle(chars);
// (2) Let's guess
for (char guessedLetter : chars) {
// (3) memorize all letters that have been guessed
guessedLetters.add(guessedLetter);
// (4) print the display version of the secret word
boolean guessedCompletely = true;
System.out.print("My guess: [" + guessedLetter + "] -> ");
for (char letterOfSecretWord : secretWord.toCharArray()) {
if (guessedLetters.contains(letterOfSecretWord)) {
// (4a) - we already guessed this letter
System.out.print(letterOfSecretWord);
} else {
// (4b) - we haven't guessed it so far
guessedCompletely = false;
System.out.print('_');
}
}
System.out.println();
// (5) check, if the game is won
if (guessedCompletely) {
System.out.println("Yeah!");
break;
}
}
}
publicstaticvoidmain(最终字符串[]args){
字符串secretWord=“fibonacci”;
Set guessedLetters=新HashSet();
//(1)创建一些测试输入(所有字母随机化)
列表字符=新的ArrayList();
对于(char c='a';c,我会尝试一种更简单的方法,在这种方法中,您可以保存一个可以根据输入进行更改的字符数组
char guess[] = {'_', '_', '_', '_', '_', ' ', '_', '_', '_', '_', '_'};
// It's "Hello World" :)
if(input == answer.getCharAt(inputIndex))
guess[inputIndex] = answer.getCharAt(inputIndex);
//replace the underscore with the correct character
else
//Add it to a list of used characters, ignore it or do as you've been asked to
在您的情况下,通过调用answer.toCharArray()
来创建这个guess
数组,其中answer
是具有正确单词的字符串。您需要使用replaceAll(“[A-Za-z0-9]”,“”)
将该字符串中的所有字符替换为下划线(请记住也保留原始答案)。第一个参数是一个正则表达式,表示“从a到Z、从a到Z和从0到9的所有字符的组”,您需要检查一些字符以适应它们,相信我,您会比以后更快地使用它们
然后,您只需将guess[i]
替换为answer.getCharAt(i)
每次正确完成猜测,就可以避免一个字符一个字符地构建字符串的繁琐工作,这可能会很棘手
这是对另一种方法的简要描述,因为这是一种帮助,您可以决定是否尝试,一般的实现取决于您。我只描述一个想法。向我们展示错误的整个堆栈跟踪。已更新。但这不是主要重点“这不是主要重点”!?您想解决吗