В настоящее время я создаю викторину. После ответа на каждый вопрос я хочу, чтобы у пользователя был 15-секундный перерыв, пока не появится следующий вопрос. Я также хочу, чтобы у пользователя была возможность перейти к следующему вопросу до истечения времени. Если возможно, возможно, в окне может отображаться обратный отсчет с 15. Вот копия кода (который начинается в начале программы и заканчивается после кода для первого вопроса. Я не буду добавлять другие 19 вопросов, так как код для них почти идентичен). Может кто-нибудь, пожалуйста, покажите мне, как они это сделают, поскольку я не знаю, как использовать Java-таймеры. Все мои исследования и попытки выяснить, что делать, на самом деле не помогли.Использование таймера Java в викторине
package quiz;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.util.Scanner;
import javax.swing.AbstractButton;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.Icon;
import java.util.Timer;
import java.applet.*;
import java.net.*;
public class Main {
BufferedImage img = null;
BufferedImage img2 = null;
Image dbImage;
Graphics dbg;
private ImageIcon image;
private JLabel label;
public static void main(String[] args) {
int score = 0;
int seconds = 0;
int loop1 = 0;
int loop2 = 0;
int loop3 = 0;
int loop4 = 0;
int loop5 = 0;
int loop6 = 0;
int loop7 = 0;
int loop8 = 0;
int loop9 = 0;
int loop10 = 0;
int loop11 = 0;
int loop13 = 0;
int loop14 = 0;
int loop15 = 0;
int loop16 = 0;
int loop17 = 0;
int loop18 = 0;
int loop19 = 0;
int loop20 = 0;
int loop21 = 0;
int loop22 = 0;
long begin = 0;
long end = 0;
long SECbegin = 0;
long SECend = 0;
String name = JOptionPane.showInputDialog(null, "What is your name? ");
while (loop1 < 100) {
JOptionPane.showMessageDialog(null, "Hello " + name + ". Welcome to the Game Show. In this quiz, you will be given $1 to start with.");
JOptionPane.showMessageDialog(null, "There will be 20 multiple choice questions. \n" +
"You will have 30 seconds to answer each question. Answer each question with the letter (A, B, C or D) corresponding with that answer.");
JOptionPane.showMessageDialog(null, "If you fail to answer in that time, or if you give an incorrect answer, you will be sent home with $1. \nIf you give a correct answer, your money will double.");
JOptionPane.showMessageDialog(null, "If you do not know the answer to a question, you may choose to leave the game show with half of your current prize money. You can do this by typing 'Leave' instead of an answer.");
JOptionPane.showMessageDialog(null, "After each question, you will have 15 seconds until the next question is automatically displayed. \nYou may choose to proceed to the next question before this time runs out.");
int start = JOptionPane.showConfirmDialog(null, "Would you like to begin? Yes or no?");
if (start == JOptionPane.NO_OPTION) {
JOptionPane.showMessageDialog(null, "Ok. Get ready, and when you feel you are ready to begin, click 'Ok'.");
loop1++;
break;
}
if (start == JOptionPane.YES_OPTION) {
break;
} else {
System.exit(0);
break;
}
}
while (loop2 < 1) {
// start timer
begin = System.currentTimeMillis();
String Q1 = JOptionPane.showInputDialog(null, "Question 1: What was the original name of the Java programming language? \n A) Coffee B) JCode C) Oak D) Green");
// play Countdown.wav here!
if (Q1.equalsIgnoreCase("C")) {
// end timer
end = System.currentTimeMillis();
JOptionPane.showMessageDialog(null, "Correct!");
if (end - begin < 30000) {
score = 2;
} else {
JOptionPane.showMessageDialog(null, "You took too long to answer the question! YOU ARE OUT OF THE GAME WITH $1!");
System.exit(0);
}
String L1 = JOptionPane.showInputDialog(null, "You now have $" + score + "! You will automatically proceed to the next question in 15 seconds. \n If you want to proceed to the next question early, type: 'Proceed'.");
{
if (L1.equalsIgnoreCase("proceed")) {
// This is where the user chooses to proceed to the next question!
JOptionPane.showMessageDialog(null, "You may now proceed to the next question. Good luck!");
} else {
// This is where I want the program to wait 15 seconds before automatically displaying the next question!
JOptionPane.showMessageDialog(null, "You may now proceed to the next question. Good luck!");
}
break;
}
}
if (Q1.equalsIgnoreCase("leave")) {
score /= 2;
JOptionPane.showMessageDialog(null, "You have decided to leave the game show with $" + score + "! Congratulations!");
} else {
JOptionPane.showMessageDialog(null, "That is not correct! \n YOU ARE OUT OF THE GAME WITH $1!");
System.exit(0);
}
loop2++;
}
... Вот то, что я пытался, но Thread.Sleep (1000); line имеет ошибку: «недостижимый код». Если я запустить программу без этой линии, ничего не происходит после 15 секунд:
...
SECbegin = System.currentTimeMillis();
String L1 = JOptionPane.showInputDialog(null, "You now have $" + score + "! You will automatically proceed to the next question in 15 seconds. \n If you want to proceed to the next question early, type: 'Proceed'.");
{
while (System.currentTimeMillis() - SECbegin < 15000) {
if (L1.equalsIgnoreCase("proceed")) {
JOptionPane.showMessageDialog(null, "You may now proceed to the next question. Good luck!");
break; // if there is an answer we stop waiting
Thread.sleep(1000); // error: unreachable code
} else {
JOptionPane.showMessageDialog(null, "You may now proceed to the next question. Good luck!");
}
break;
}
}
if (Q1.equalsIgnoreCase("leave")) {
score /= 2;
JOptionPane.showMessageDialog(null, "You have decided to leave the game show with $" + score + "! Congratulations!");
} else {
JOptionPane.showMessageDialog(null, "That is not correct! \n YOU ARE OUT OF THE GAME WITH $1!");
System.exit(0);
}
loop2++;
}
Я попытался решить эту проблему, но она не работает :(Ничего не происходит после 15 секунд :
package quiz;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.util.Scanner;
import javax.swing.AbstractButton;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.Icon;
import java.util.Timer;
import java.applet.*;
import java.net.*;
public class Main {
BufferedImage img = null;
BufferedImage img2 = null;
Image dbImage;
Graphics dbg;
private ImageIcon image;
private JLabel label;
public static void main(String[] args) {
int score = 0;
int seconds = 0;
int loop1 = 0;
int loop2 = 0;
int loop3 = 0;
int loop4 = 0;
int loop5 = 0;
int loop6 = 0;
int loop7 = 0;
int loop8 = 0;
int loop9 = 0;
int loop10 = 0;
int loop11 = 0;
int loop13 = 0;
int loop14 = 0;
int loop15 = 0;
int loop16 = 0;
int loop17 = 0;
int loop18 = 0;
int loop19 = 0;
int loop20 = 0;
int loop21 = 0;
int loop22 = 0;
long begin = 0;
long end = 0;
long SECbegin = 0;
long SECend = 0;
String name = JOptionPane.showInputDialog(null, "What is your name? ");
while (loop1 < 100){
JOptionPane.showMessageDialog(null, "Hello " + name + ". Welcome to the Game Show. In this quiz, you will be given $1 to start with.");
JOptionPane.showMessageDialog(null, "There will be 20 multiple choice questions. \n" +
"You will have 30 seconds to answer each question. Answer each question with the letter (A, B, C or D) corresponding with that answer.");
JOptionPane.showMessageDialog(null, "If you fail to answer in that time, or if you give an incorrect answer, you will be sent home with $1. \nIf you give a correct answer, your money will double.");
JOptionPane.showMessageDialog(null, "If you do not know the answer to a question, you may choose to leave the game show with half of your current prize money. You can do this by typing 'Leave' instead of an answer.");
JOptionPane.showMessageDialog(null, "After each question, you will have 15 seconds until the next question is automatically displayed. \nYou may choose to proceed to the next question before this time runs out.");
int start = JOptionPane.showConfirmDialog(null, "Would you like to begin? Yes or no?");
if(start == JOptionPane.NO_OPTION) {
JOptionPane.showMessageDialog(null, "Ok. Get ready, and when you feel you are ready to begin, click 'Ok'.");
loop1++;
break;
}
if(start == JOptionPane.YES_OPTION) {
break;
}
else{
System.exit(0);
break;
}
}
while (loop2 < 1){
// start timer
begin = System.currentTimeMillis();
String Q1 = JOptionPane.showInputDialog(null, "Question 1: What was the original name of the Java programming language? \n A) Coffee B) JCode C) Oak D) Green");
// play Countdown.wav here!
if(Q1.equalsIgnoreCase("C")) {
// end timer
end = System.currentTimeMillis();
JOptionPane.showMessageDialog(null, "Correct!");
if(end - begin < 30000){
score = 2;
}
else {
JOptionPane.showMessageDialog(null, "You took too long to answer the question! YOU ARE OUT OF THE GAME WITH $1!");
System.exit(0);
}
SECbegin = System.currentTimeMillis();
String L1 = JOptionPane.showInputDialog(null, "You now have $" + score + "! You will automatically proceed to the next question in 15 seconds. \n If you want to proceed to the next question early, type: 'Proceed'.");
if(L1.equalsIgnoreCase("proceed")) {
JOptionPane.showMessageDialog(null, "You may now proceed to the next question. Good luck!");
}
if(System.currentTimeMillis() - SECbegin < 15000){
}
break;
}
else{
JOptionPane.showMessageDialog(null, "You may now proceed to the next question. Good luck!");
}
if(Q1.equalsIgnoreCase("leave")) {
score /= 2;
JOptionPane.showMessageDialog(null, "You have decided to leave the game show with $" + score + "! Congratulations!");
}
else{
JOptionPane.showMessageDialog(null, "That is not correct! \n YOU ARE OUT OF THE GAME WITH $1!");
System.exit(0);
}
loop2++;
}
JOptionPane.showMessageDialog(null, "Congratulations " + name + "! You have won the game!");
System.exit(0);
}
}
ПОЖАЛУЙСТА ПОМОГИТЕ МНЕ
Теперь вся программа просто глючит и дерьмовый:
package quiz;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.util.Scanner;
import javax.swing.AbstractButton;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.Icon;
import java.util.Timer;
import java.applet.*;
import java.net.*;
public class Main {
BufferedImage img = null;
BufferedImage img2 = null;
Image dbImage;
Graphics dbg;
private ImageIcon image;
private JLabel label;
public static void main(String[] args) {
int score = 0;
int seconds = 0;
int loop1 = 0;
int loop2 = 0;
int loop3 = 0;
int loop4 = 0;
int loop5 = 0;
int loop6 = 0;
int loop7 = 0;
int loop8 = 0;
int loop9 = 0;
int loop10 = 0;
int loop11 = 0;
int loop13 = 0;
int loop14 = 0;
int loop15 = 0;
int loop16 = 0;
int loop17 = 0;
int loop18 = 0;
int loop19 = 0;
int loop20 = 0;
int loop21 = 0;
int loop22 = 0;
int loopw = 0;
long begin = 0;
long end = 0;
long SECbegin = 0;
long SECend = 0;
String name = JOptionPane.showInputDialog(null, "What is your name? ");
while (loop1 < 100){
JOptionPane.showMessageDialog(null, "Hello " + name + ". Welcome to the Game Show. In this quiz, you will be given $1 to start with.");
JOptionPane.showMessageDialog(null, "There will be 20 multiple choice questions. \n" +
"You will have 30 seconds to answer each question. Answer each question with the letter (A, B, C or D) corresponding with that answer.");
JOptionPane.showMessageDialog(null, "If you fail to answer in that time, or if you give an incorrect answer, you will be sent home with $1. \nIf you give a correct answer, your money will double.");
JOptionPane.showMessageDialog(null, "If you do not know the answer to a question, you may choose to leave the game show with half of your current prize money. You can do this by typing 'Leave' instead of an answer.");
JOptionPane.showMessageDialog(null, "After each question, you will have 15 seconds until the next question is automatically displayed. \nYou may choose to proceed to the next question before this time runs out.");
int start = JOptionPane.showConfirmDialog(null, "Would you like to begin? Yes or no?");
if(start == JOptionPane.NO_OPTION) {
JOptionPane.showMessageDialog(null, "Ok. Get ready, and when you feel you are ready to begin, click 'Ok'.");
loop1++;
break;
}
if(start == JOptionPane.YES_OPTION) {
break;
}
else{
System.exit(0);
break;
}
}
while (loop2 < 1){
// start timer
begin = System.currentTimeMillis();
String Q1 = JOptionPane.showInputDialog(null, "Question 1: What was the original name of the Java programming language? \n A) Coffee B) JCode C) Oak D) Green");
// play Countdown.wav here!
if(Q1.equalsIgnoreCase("C")) {
// end timer
end = System.currentTimeMillis();
JOptionPane.showMessageDialog(null, "Correct!");
if(end - begin < 30000){
score = 2;
}
else {
JOptionPane.showMessageDialog(null, "You took too long to answer the question! YOU ARE OUT OF THE GAME WITH $1!");
System.exit(0);
}
// start
SECbegin = System.currentTimeMillis();
String L1 = JOptionPane.showInputDialog(null, "You now have $" + score + "! You will automatically proceed to the next question in 15 seconds. \n If you want to proceed to the next question early, type: 'Proceed'.");
while(loopw < 10000){
if(L1.equalsIgnoreCase("proceed")) {
JOptionPane.showMessageDialog(null, "You may now proceed to the next question. Good luck!");
break;
}
if(System.currentTimeMillis() - SECbegin > 15000){
JOptionPane.showMessageDialog(null, "You may now proceed to the next question. Good luck!");
}
else{
}
loopw++;
}
// end
if(Q1.equalsIgnoreCase("leave")) {
score /= 2;
JOptionPane.showMessageDialog(null, "You have decided to leave the game show with $" + score + "! Congratulations!");
}
else{
JOptionPane.showMessageDialog(null, "That is not correct! \n YOU ARE OUT OF THE GAME WITH $1!");
System.exit(0);
}
loop2++;
}
JOptionPane.showMessageDialog(null, "Congratulations " + name + "! You have won the game!");
System.exit(0);
}
}}
Вы заявили, что хотите, но на самом деле вы не задали конкретный вопрос. Если вы попытались это сделать, каковы были результаты по сравнению с тем, что вы ожидали? – csmckelvey
Я провел много часов исследований и пытался выяснить, какой таймер использовать, и как использовать его в моей викторине. Мне просто нужен кто-то, чтобы показать мне, как это сделать. – JavaPr0grammer
FYI: Любой код после заявления о перерыве никогда не может быть достигнут. Это точка разрыва. – csmckelvey