Java 初学者:完成游戏有困难
我很难完成这个“可怜的人”的绞刑,那是我班的一部分。我已经基本完成了,但有一件事阻止我完成 我的问题是,我认为我的Java 初学者:完成游戏有困难,java,Java,我很难完成这个“可怜的人”的绞刑,那是我班的一部分。我已经基本完成了,但有一件事阻止我完成 我的问题是,我认为我的 nextGuess = nextGuess.concat(String.valueOf( guess.charAt(i) )); 正在用空格替换我的“*”占位符。这个词必须用星号遮住并隔开,所以“pizza”应该是“***” 然而,每当按下一个字母,单词中的一些字符就会从游戏中消失。有什么想法吗 package hang; import javax.swing.*; impo
nextGuess = nextGuess.concat(String.valueOf( guess.charAt(i) ));
正在用空格替换我的“*”占位符。这个词必须用星号遮住并隔开,所以“pizza”应该是“***”
然而,每当按下一个字母,单词中的一些字符就会从游戏中消失。有什么想法吗
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);
}
}
包挂;
导入javax.swing.*;
导入java.awt.*;
导入java.awt.event.*;
导入java.util.*;
公开课{
JButton stopButton=null;
JButton startButton=null;
JLabel gameField=null;
JLabel messageArea=null;
java.util.List keysArray=new ArrayList();
迭代器keyIterator=null;
布尔重置=真;
布尔禁用=假;
字符串[]应答字={
“比萨饼”
};
字符串猜测;
字符串当前字;
字符串新字母;
int numberWrong=0;
int next=0;
公共游戏{
numberWrong=0;
迭代器keyIterator=KeyArray.Iterator();
while(keyIterator.hasNext()){
((JButton)keyIterator.next()).setEnabled(重置);
}
启动按钮。设置启用(禁用);
游戏场。挫折背景(颜色。浅灰色);
double numb=Math.random();
next=(int)(numb*answerWord.length);
currentWord=应答词[下一步];
猜一猜“*”;
对于(int i=0;i这是一个将模型/数据与演示/视图混合的经典示例
guess
的字符数比currentWord
多,但您正试图根据currentWord
的索引将guess
中的值连接到其中,该索引不匹配
相反,我只需在guess
和currentWord
之间保持1-1的关系,这样它们的字符数就相同,并且只需更改它的显示方式
因此,当您调用gameField.setText(猜测);
时,您需要先格式化文本,例如gameField.setText(pad(猜测));
其中,pad
可能看起来像
protected String pad(String value) {
StringJoiner sj = new StringJoiner(" ");
for (char c : value.toCharArray()) {
sj.add(Character.toString(c));
}
return sj.toString();
}
在每个角色之间注入一个空格
这也意味着当你这么做的时候
if (guess.equals(currentWord)) {
实际上,您将得到一个有效的结果(因为piza
不等于pizza
:p)这确实应该减少:看。它甚至格式不好,比如1/5的空格是无用的。guess
比currentWord
有更多的字符,但是你试图将guess
中的值连接到其中…这是不匹配的。似乎不能将构造函数用于StringJoiner…我会调查原因。谢谢这是给你的建议!你在使用Java8吗?它只在Java8中可用+