2012-09-24 1 views
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(); 


} 
} 

답변

0

당신은 init() 방법으로 이동하는 actionPerformed 방법에 이름을 할당하지만, 더 나은된다. 또한 ArrayList은 고정 된 크기의 배열보다 유연성을 제공합니다. 추가 보너스로 Collections.shuffle()을 사용하여 다음 추측을 위해 임의의 사용자를 선택할 수 있습니다.

게임이 끝나면 새로운 Second 개체를 만들 때 점수와 실수가 사라집니다. 이미 가지고있는 인스턴스를 재사용하고 필요에 따라 구성 요소를 숨기거나 표시하는 것이 좋습니다.

+0

hmmm ... 실제로 코드와 물건을 넣는 위치에 대해 생성자를 사용하는 데 실제로 사용되었습니다. ArrayList를 사용하면 나에게 새로운 것입니다. 물건을 초기화하는 것은 그다지 큰 일이 아닙니다. 하지만 네, 제 프로그램을 치울 것입니다. :) 또한, for 루프를 사용하여 시도했다. 그러나 다시 나는 어디에 넣어야할지 모른다. 나는 버튼에 넣으려고하지만 올바른 답을 얻더라도. 그것은 나에게 문장을 읽거나 계속한다. – ChaseMeNot

+0

나는 내 프로그램을 실험 해 보았습니다. 실제로 그것에서 무언가를 얻었다. 그러나. 내 실험 도중 이미지 질문 대신 String 질문을 사용했습니다. 실제로 작동했습니다. 내 프로그램의 문제는 새 이미지가 나타나기 위해 프레임이나 레이블을 새로 고쳐야한다는 것입니다. 나는 repaint() 메서드를 사용하여 시도했다. 그러나 아직도 아무것도 일어나지 않고있다. 나는 또한 dispose()를 시도한 다음 객체를 다시 호출했지만 여전히 아무 일도 일어나지 않았다. – ChaseMeNot

관련 문제