0

ここでやろうとしているのは、ユーザーが写真に写っている人を推測するクイズのようなゲームを作成しようとしていることです。そして、送信ボタンをクリックしてユーザーが画像を正しく推測するたびに、それが必要になります。次の質問に進む必要があります。配列を使用してみましたが、構文をどこに置くべきかわかりません。と私は混乱しています。また、ポリモーフィズムを使用してみました。しかし、送信ボタンをクリックするたびに。次の画像が表示されますが、スコアとミスは消えます。-_-

これが私のコードです。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class Second extends JFrame{

    private int number, score;
    private String answer;
    private String[] answers;
    private ImageIcon[] questions;

    private JLabel lblQuestion, lblMistakes, lblScore;
    private JButton btnSubmit;
    private SubmitButtonHandler sbhandler;
    private JTextField txtAnswer;

    public Second(){

        setTitle("Guess Who");

        btnSubmit = new JButton("Submit");
        sbhandler = new SubmitButtonHandler();
        btnSubmit.addActionListener(sbhandler);

        txtAnswer = new JTextField(20);
        txtAnswer.setFont(new Font("Tekton Pro Ext", Font.BOLD, 20));
        txtAnswer.setHorizontalAlignment(JTextField.CENTER);

        lblMistakes = new JLabel("", JLabel.CENTER);
        lblMistakes.setForeground(Color.blue);
        lblMistakes.setFont(new Font("Tekton Pro Ext", Font.BOLD, 30));
        lblMistakes.setOpaque(true);

        lblScore = new JLabel("", JLabel.CENTER);
        lblScore.setForeground(Color.white);
        lblScore.setBackground(Color.black);
        lblScore.setFont(new Font("Tekton Pro Ext", Font.BOLD, 30));
        lblScore.setOpaque(true);

        questions = new ImageIcon[10];

        questions[1] = new ImageIcon("C:\\Users\\ACER\\Desktop\\mario.jpeg");
        questions[2] = new ImageIcon("C:\\Users\\ACER\\Desktop\\ss.jpg");
        questions[3] = new ImageIcon("C:\\Users\\ACER\\Desktop\\dora.jpg");
        questions[4] = new ImageIcon("C:\\Users\\ACER\\Desktop\\vegeta.jpg");
        questions[5] = new ImageIcon("C:\\Users\\ACER\\Desktop\\kirby.jpg");

        lblQuestion = new JLabel(questions[1]);
        lblQuestion.setFont(new Font("Tekton Pro Ext", Font.BOLD, 18));

        Container pane = getContentPane();

        pane.setLayout(new GridLayout(5,1));

        pane.add(lblQuestion);
        pane.add(txtAnswer);
        pane.add(btnSubmit);
        pane.add(lblScore);
        pane.add(lblMistakes);

        setBounds(500,200,500,500);
        setResizable(false);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);

    }

private class SubmitButtonHandler implements ActionListener{

    public void actionPerformed(ActionEvent e){

        answers = new String[10];

        answers[1] = "Mario";
        answers[2] = "Spongebob Squarepants";
        answers[3] = "Dora the Explorer";
        answers[4] = "Vegeta";
        answers[5] = "Kirby";

        if(txtAnswer.getText().equalsIgnoreCase(answers[1])){
            JOptionPane.showMessageDialog(null, "You got the correct answer.");
            number = number;
            score = score + 1;
            lblScore.setText("Score: " + Integer.toString(score));
            txtAnswer.setText("");
            txtAnswer.requestFocusInWindow();

        }else{
            number = number + 1;
            lblMistakes.setText("Mistakes: " + Integer.toString(number));
            txtAnswer.setText("");

            if(number == 1){
                JOptionPane.showMessageDialog(null, "Try again.");
                lblMistakes.setBackground(Color.yellow);
                txtAnswer.requestFocusInWindow();
            }else if(number == 2){
                lblMistakes.setBackground(Color.orange);
                JOptionPane.showMessageDialog(null,"Careful. You only have one chance.");
                txtAnswer.requestFocusInWindow();
            }else if(number == 3){
                lblMistakes.setBackground(Color.red);
                JOptionPane.showMessageDialog(null,"Game Over.");
                dispose();
                Second s = new Second();
            }

        }
        }

    }


public static void main(String[]args){

    Second s = new Second();


}
}
4

1 に答える 1

0

メソッドで名前を割り当てていますが、actionPerformedメソッドに移動することをお勧めしinit()ます。また、ArrayList固定サイズの配列よりも柔軟性が高くなります。追加のボーナスとしてCollections.shuffle()、次の推測のためにランダムなユーザーを選択するために使用できます。

Secondゲームが終了すると、新しいオブジェクトを作成しているため、スコアとミスが消えています。既存のインスタンスを再利用し、必要に応じてコンポーネントを非表示/表示することをお勧めします。

于 2012-09-24T16:12:09.370 に答える