2015-08-09 2 views
0

У меня есть JTextPane, чтобы отображать вопросы, звонящие Qus, у меня есть 4 JLabel, A, B, C, D. И пять вопросов на разных страницах. Когда вы выбираете правильный ответ a, b, c или d, добавляется 10 баллов к вызову JLabelCounter.Нажмите только один

Но моя проблема в том, что это время, когда вы нажимаете a, b, c, d, он продолжает добавлять 10 снова, снова и снова. Я просто хочу, чтобы он добавлял 10 раз на каждой странице, если на следующей странице правильный ответ, он должен добавить еще 10 не несколько 10 на странице или ответ, это будет чит.

Вот код

// To display the result 
string preval = Counter.get text()+" "; 
Counter.setText("0"); 

//Pls note Counter is to display result in the GUI 
//Now the question method 
Public void init() { 
    Call question==0; 
} 

//First Question 
If(callquestion==1) { 
    Qus.setText(" 1+1"); 
    A.setText("A) 2"); 
    B.setText("A) 8"); 
    C.setText("A) 9"); 
    D.setText("A) 10"); 
} 

//Answer, let's assume the answer is A// note A, B, C, D are all JLables 
Private void AmouseClicked(java.awt.event.MouseEvent evt) { 
    If(callquestion==1 && D.isFocusable()) { 
     Int d= Integer.parseInt(Counter.getText()); 
     Int e= 10; 
     Int f=d+10; 
     Counter.setText(f+" "); 
    } 
} 

Пожалуйста, обратите внимание, что это только один вопрос и ответ. В моем проекте у меня 20 таких. Я просто хочу, чтобы каждая кнопка добавляла 10 раз и добавляла их по нескольким щелчкам. Спасибо

+0

Я действительно не понимаю, что вы имеете в виду. Можете ли вы привести еще один пример – CMPS

ответ

0

Поскольку вы собираетесь по одному вопросу за раз, почему бы не повторно использовать страницу? :)

Во-первых, мы создаем класс Вопрос ...

class Question{ 
    String question; 
    String answer1, answer2, answer3, answer4; 
    int userAnswer; 
    int correctAnswer; 
    boolean scoredPoints; 
    Question(String q, int correct, String a1, String a2, String a3, String a4){ 
     this.question = q; 
     this.correctAnswer = correct; 
     this.answer1 = a1; 
     this.answer2 = a2; 
     this.answer3 = a3; 
     this.answer4 = a4; 

    } 
} 

Тогда мы можем создать вопрос ...

Question q1 = new Question("1+1",1,"2","4","6","8"); 
//constructor is question, correct answer, ans 1, 2, 3, 4. 

Затем создайте список вопросов ...

ArrayList<Question> questions = new ArrayList<>(); 

И добавить вопросы в список ...

questions.add(q1); 

Затем вы делаете то же самое, что делали бы, чтобы представить вопрос, однако вы должны ссылаться на questions.get (x), где x - номер вопроса (минус один, поскольку индекс массива 0 равен объект 1).

Когда пользователь нажимает на кнопку, например, A, вы называете ActionListener и вызывать:

questions.get(x).scoredPoints = true; //prevents cheating 
questions.get(x).userAnswer = buttonNumber; //sets user question answer 

х в этом случае текущий номер вопроса.

Таким образом, у вас может быть непрерывный поток вопросов, их ответы будут записаны и проверены, и они не смогут «обмануть».

+0

Возможно, я должен добавить, что это только определяет поведение вопросов/ответов, оно не определяет результат. Это можно сделать, просто перебирая вопросы и проверяя, соответствует ли каждый ответ правильному ответу, и если да, добавляет 10 баллов. – Catch44

0

Я предполагаю, в чем проблема: метод AmouseClicked вызывается всякий раз, когда происходит мышь (mouse_pressed, mouse_down, mouse_release). Так что это должно сделать трюк.

If(callquestion==1 && D.isFocusable()) 

должен быть

If(callquestion==1 && D.isFocusable() && evt.getModifiersEx()==MouseEvent.MOUSE_PRESSED) 
+0

Хорошо. Я строию слово Кто хочет стать миллионером с 20 вопросами. Когда вы получаете каждый ответ, добавляется точка в 10, после чего вы переходите к следующему вопросу и получаете ответ, еще 10 - это адды. Но мой код дает мне 10 вэнь, когда мышь нажата, и когда вы снова нажимаете на ту же кнопку, не переходя к следующему вопросу, добавляется еще 10. Поэтому я хочу добавить 10 раз, независимо от того, как пользователь нажал на эту же кнопку, пока он не перейдет на следующую страницу, чтобы получить следующие вопросы еще за 10 баллов. – chopsticks

+0

Можете ли вы включить ответ в мои коды, это довольно запутывает , – chopsticks

+0

Boschma Я пробовал, но он не позволял кнопку нажимать больше, 10 не было добавлено вообще – chopsticks

0

Вместо того чтобы хранить точки непосредственно использовать карту (вопрос, ответ) для хранения, в котором вопрос, что ответ пользователь дал:

// somewhere in your main programme 
List<Integer> userAnswers; 
List<Integer> correctAnswers; 

... 

// at programme startup initialise to #answers 
userAnswers = Arrays.toList(new Integer[20]); // create list full of null 
correctAnswers = new ArrayList<Integer>(); 
for(int i = 0; i < 20; ++i) 
    correctAnswers.add(0); // set all correct answers to #a (change this accordingly) 

... 

// when user answers question #q with answer #a 
userAnswers.set(q, a); // set answer at #q to #a 
Counter.setText(getScore() + " "); // update the counter every time the list changes! 

... 

// getScore counts up the awarded points for all questions 
private int getScore() { 
    int sum = 0; 
    for(int q = 0; q < correctAnswers.size(); ++q) { 
     int expected = correctAnswers.get(q); // assume initialised 
     Integer actual = userAnswers.get(q); // may be null 
     if(actual != null && actual == expected) 
      sum += 10; // or have a third list indicating how many points each question awards 
    } 
} 

Этот имеет другие преимущества, такие как вы в состоянии рассказать пользователю в конце концов, какие ответы он получил правильно и какие из них он ошибался.

0

Если я вас правильно понял, я считаю, что это лучшее решение для вашей проблемы:

Что вы делаете в вашей установке:

JLabel a = new JLabel() 
a.addMouseListener(new MouseAdapter() 
{ 
    public void mouseClicked(MouseEvent e) 
    { 
     aclicked(); 
    } 
}); 

JLabel b = new JLabel() 
b.addMouseListener(new MouseAdapter() 
{ 
    public void mouseClicked(MouseEvent e) 
    { 
     bclicked(); 
    } 
}); 
//do this for c and d as well 

Методы, aclicked и bclicked где вы проверить, если дается правильный ответ, и если да, то присуждайте баллы.

+0

Это хорошее направление, но это не мешает им нажимать кнопку несколько раз. :) – Catch44

+0

@Psychrom это должно работать (еще не проверял его). Изменение метода mouseClicked в методе mousePressed будет работать точно. Возможно, я неправильно понял этот вопрос, но я понимаю, что игрок нажимает кнопку (один раз) и несколько раз добавляет счет. –

+0

Если вы поняли правду, то да, ваш ответ правильный. Из того, что я понял, проблема в том, что они могут нажимать кнопку несколько раз, а счет увеличивается несколько раз. Так что щелчок четыре раза дал бы им сорок очков. В моем случае ваш ответ по-прежнему требует булев/флагов или удаления мужеуловителя, чтобы предотвратить множественные щелчки. – Catch44

Смежные вопросы