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中可用+