我正忙于完成这个“穷人”Hang子手,这是我班的一部分。我已经完成了大部分工作,但我有一件事阻止了我完成。初学者:无法完成游戏
我的问题是,我觉得我的
nextGuess = nextGuess.concat(String.valueOf(guess.charAt(i)));
用空格代替我的 “*” 占位符。这个词必须用星号和间隔来掩盖,所以“披萨”将是“* * * * *”。
但是,当有人按下字母时,单词中的某些字符会从游戏区域中消失。有任何想法吗?
package hang;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class Hang {
JButton stopButton = null;
JButton startButton = null;
JLabel gameField = null;
JLabel messageArea = null;
java.util.List keysArray= new ArrayList();
Iterator keyIterator = null;
boolean reset = true;
boolean disable = false;
String[] answerWord = {
"pizza"
};
String guess;
String currentWord;
String newLetter;
int numberWrong = 0;
int next = 0;
public void setUpNewGame() {
numberWrong = 0;
Iterator keyIterator = keysArray.iterator();
while(keyIterator.hasNext()) {
((JButton)keyIterator.next()).setEnabled(reset);
}
startButton.setEnabled(disable);
gameField.setBackground(Color.lightGray);
double numb = Math.random();
next = (int)(numb * answerWord.length);
currentWord = answerWord[next];
guess = "*";
for(int i=0; i<currentWord.length()-1; i++) {
guess = guess.concat(" " + "*");
}
gameField.setText(guess);
}
public void processAnswer(String answer) { // Have Vanna turn the correct letters over
char newCharacter = answer.charAt(0);
String nextGuess = "";
boolean foundAMatch = false;
for(int i=0; i<currentWord.length(); i++) {
char characterToMatch = currentWord.charAt(i);
if(characterToMatch == newCharacter) {
nextGuess = nextGuess.concat(String.valueOf(newCharacter));
foundAMatch = true;
}
else {
nextGuess = nextGuess.concat(String.valueOf
(guess.charAt(i)));
}
}
guess = nextGuess;
gameField.setText(guess);
if(guess.equals(currentWord)) {
Iterator keyIterator = keysArray.iterator();
while(keyIterator.hasNext()) {
((JButton)keyIterator.next()).setEnabled(disable);
}
startButton.setEnabled(reset);
stopButton.setEnabled(reset);
}
else {
if(!foundAMatch) {
numberWrong++;
}
}
}
public Component wordPane() {
JPanel pane = new JPanel();
pane.setLayout(new BoxLayout(pane, BoxLayout.X_AXIS));
pane.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
pane.add(Box.createHorizontalGlue());
gameField = new JLabel("Welcome to Hangman");
gameField.setFont(new Font("Helvetica", Font.PLAIN, 24));
gameField.setBackground(Color.lightGray);
gameField.setForeground(Color.black);
pane.add(gameField);
pane.add(Box.createHorizontalGlue());
return pane;
}
public Component keyboardPane() {
ActionListener alphabetButtonAction = new ActionListener() {
public void actionPerformed(ActionEvent e) {
JButton buttonPushed = (JButton)e.getSource();
buttonPushed.setEnabled(disable);
processAnswer(buttonPushed.getText());
}
};
JPanel pane = new JPanel();
pane.setBorder(BorderFactory.createLoweredBevelBorder());
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
pane.setLayout(gridbag);
c.fill = GridBagConstraints.BOTH;
JButton button = new JButton("a");
c.gridx = 0;
c.gridy = 0;
c.gridheight = 1;
gridbag.setConstraints(button, c);
button.addActionListener(alphabetButtonAction);
pane.add(button);
keysArray.add(button);
button = new JButton("b");
c.gridx = 1;
c.gridy = 0;
gridbag.setConstraints(button, c);
button.addActionListener(alphabetButtonAction);
pane.add(button);
keysArray.add(button);
button = new JButton("c");
c.gridx = 2;
c.gridy = 0;
gridbag.setConstraints(button, c);
button.addActionListener(alphabetButtonAction);
pane.add(button);
keysArray.add(button);
button = new JButton("d");
c.gridx = 3;
c.gridy = 0;
gridbag.setConstraints(button, c);
button.addActionListener(alphabetButtonAction);
pane.add(button);
keysArray.add(button);
button = new JButton("e");
c.gridx = 4;
c.gridy = 0;
gridbag.setConstraints(button, c);
button.addActionListener(alphabetButtonAction);
pane.add(button);
keysArray.add(button);
button = new JButton("f");
c.gridx = 5;
c.gridy = 0;
gridbag.setConstraints(button, c);
button.addActionListener(alphabetButtonAction);
pane.add(button);
keysArray.add(button);
button = new JButton("g");
c.gridx = 6;
c.gridy = 0;
gridbag.setConstraints(button, c);
button.addActionListener(alphabetButtonAction);
pane.add(button);
keysArray.add(button);
button = new JButton("h");
c.gridx = 7;
c.gridy = 0;
gridbag.setConstraints(button, c);
button.addActionListener(alphabetButtonAction);
pane.add(button);
keysArray.add(button);
button = new JButton("i");
c.gridx = 8;
c.gridy = 0;
gridbag.setConstraints(button, c);
button.addActionListener(alphabetButtonAction);
pane.add(button);
keysArray.add(button);
button = new JButton("j");
c.gridx = 9;
c.gridy = 0;
gridbag.setConstraints(button, c);
button.addActionListener(alphabetButtonAction);
pane.add(button);
keysArray.add(button);
button = new JButton("k");
c.gridx = 0;
c.gridy = 1;
gridbag.setConstraints(button, c);
button.addActionListener(alphabetButtonAction);
pane.add(button);
keysArray.add(button);
button = new JButton("l");
c.gridx = 1;
c.gridy = 1;
gridbag.setConstraints(button, c);
button.addActionListener(alphabetButtonAction);
pane.add(button);
keysArray.add(button);
button = new JButton("m");
c.gridx = 2;
c.gridy = 1;
gridbag.setConstraints(button, c);
button.addActionListener(alphabetButtonAction);
pane.add(button);
keysArray.add(button);
button = new JButton("n");
c.gridx = 3;
c.gridy = 1;
gridbag.setConstraints(button, c);
button.addActionListener(alphabetButtonAction);
pane.add(button);
keysArray.add(button);
button = new JButton("o");
c.gridx = 4;
c.gridy = 1;
gridbag.setConstraints(button, c);
button.addActionListener(alphabetButtonAction);
pane.add(button);
keysArray.add(button);
button = new JButton("p");
c.gridx = 5;
c.gridy = 1;
gridbag.setConstraints(button, c);
button.addActionListener(alphabetButtonAction);
pane.add(button);
keysArray.add(button);
button = new JButton("q");
c.gridx = 6;
c.gridy = 1;
gridbag.setConstraints(button, c);
button.addActionListener(alphabetButtonAction);
pane.add(button);
keysArray.add(button);
button = new JButton("r");
c.gridx = 7;
c.gridy = 1;
gridbag.setConstraints(button, c);
button.addActionListener(alphabetButtonAction);
pane.add(button);
keysArray.add(button);
button = new JButton("s");
c.gridx = 8;
c.gridy = 1;
gridbag.setConstraints(button, c);
button.addActionListener(alphabetButtonAction);
pane.add(button);
keysArray.add(button);
button = new JButton("t");
c.gridx = 9;
c.gridy = 1;
gridbag.setConstraints(button, c);
button.addActionListener(alphabetButtonAction);
pane.add(button);
keysArray.add(button);
button = new JButton("u");
c.gridx = 2;
c.gridy = 3;
gridbag.setConstraints(button, c);
button.addActionListener(alphabetButtonAction);
pane.add(button);
keysArray.add(button);
button = new JButton("v");
c.gridx = 3;
c.gridy = 3;
gridbag.setConstraints(button, c);
button.addActionListener(alphabetButtonAction);
pane.add(button);
keysArray.add(button);
button = new JButton("w");
c.gridx = 4;
c.gridy = 3;
gridbag.setConstraints(button, c);
button.addActionListener(alphabetButtonAction);
pane.add(button);
keysArray.add(button);
button = new JButton("x");
c.gridx = 4;
c.gridy = 3;
gridbag.setConstraints(button, c);
button.addActionListener(alphabetButtonAction);
pane.add(button);
keysArray.add(button);
button = new JButton("y");
c.gridx = 5;
c.gridy = 3;
gridbag.setConstraints(button, c);
button.addActionListener(alphabetButtonAction);
pane.add(button);
keysArray.add(button);
button = new JButton("z");
c.gridx = 6;
c.gridy = 3;
gridbag.setConstraints(button, c);
button.addActionListener(alphabetButtonAction);
pane.add(button);
keysArray.add(button);
keyIterator = keysArray.iterator();
while(keyIterator.hasNext()) {
((JButton)keyIterator.next()).setEnabled(disable);
}
return pane;
}
public Component menuPane() {
ActionListener controlButtonListener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
JButton buttonPushed = (JButton)e.getSource();
if(buttonPushed.getText().equals("Start")) {
setUpNewGame();
}
else {
System.exit(0);
}
}//actionPerformed
};//controlButtonListener
JPanel pane = new JPanel();
pane.setBorder(BorderFactory.createLoweredBevelBorder());
pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS));
startButton = new JButton("Start");
startButton.setFont(new Font("Helvetica", Font.PLAIN, 18));
startButton.setAlignmentX(Component.CENTER_ALIGNMENT);
startButton.addActionListener(controlButtonListener);
pane.add(startButton);
pane.add(Box.createVerticalGlue());
stopButton = new JButton("Stop");
stopButton.setFont(new Font("Helvetica", Font.PLAIN, 18));
stopButton.setAlignmentX(Component.CENTER_ALIGNMENT);
stopButton.addActionListener(controlButtonListener);
pane.add(stopButton);
return pane;
}
public Component createComponents() {
JPanel pane = new JPanel();
pane.setBorder(BorderFactory.createLoweredBevelBorder());
pane.setLayout(new BorderLayout());
pane.add(wordPane(), BorderLayout.NORTH);
pane.add(keyboardPane(), BorderLayout.CENTER);
pane.add(menuPane(), BorderLayout.SOUTH);
return pane;
}
public static void main(String[] args) {
String lookAndFeel;
lookAndFeel=UIManager.getCrossPlatformLookAndFeelClassName();
if (args.length == 1)
{
if (args[0].equals("motif"))
lookAndFeel =
"com.sun.java.swing.plaf.motif.MotifLookAndFeel";
if (args[0].equals("metal"))
lookAndFeel =
"javax.swing.plaf.metal.MetalLookAndFeel";
else if (args[0].equals("system"))
lookAndFeel=
UIManager.getSystemLookAndFeelClassName() ;
}
try {
UIManager.setLookAndFeel(lookAndFeel);
} catch (Exception e) { }
//Create the top-level container and add contents to it.
JFrame frame = new JFrame("Hangman");
frame.setSize(new Dimension(800,480));
Hang game = new Hang();
Component contents = game.createComponents();
frame.getContentPane().add(contents);
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
frame.pack();
frame.setVisible(true);
}
}
这确实应该减少:参见[MCVE] 。 –
它甚至没有格式化好,就像1/5它是无用的空格 – redFIVE
'guess'有更多的字符,然后'currentWord',但是你试图连接来自'guess'的值到它里面......这是不匹配 – MadProgrammer