//Java core packages
import java.io.*;
import java.awt.*;
import java.util.*;
import java.awt.event.*;
import java.text.SimpleDateFormat;
//Java extended packages
import javax.swing.*;
public class Calculator extends JFrame
{
private JLabel amountLabel = new JLabel("Amount", JLabel.CENTER);
private JLabel digitLabel = new JLabel("Digit", JLabel.CENTER);
private JLabel parameterLabel = new JLabel("parameter", JLabel.CENTER);
private JTextField amountField = new JTextField();
private JTextField digitField = new JTextField();
private JTextField parameterField = new JTextField();
private JTextArea quizArea = new JTextArea();
private static JButton startButton = new JButton("Start");
private static JButton nextButton = new JButton("Next");
private static JButton enterButton = new JButton("Enter");
private JTextField submitBox = new JTextField();
private GridBagLayout gridBag = new GridBagLayout();
private Container container;
Date timeBegin;
Date timeEnd;
Random r;
int[][] testArray;
boolean[][] testOperator;
char[][] testOperator2;
static int amount;
static int digit;
static int parameter;
static int count = 0;
static int correct = 0;
static long timerBegin = 0;
static long timerEnd = 0;
public Calculator(String title)
{
super(title);
container = getContentPane();
container.setLayout(gridBag);
GridBagConstraints constraints = new GridBagConstraints();
constraints.fill = GridBagConstraints.BOTH;
constraints.weightx = 1.0;
constraints.weighty = 1.0;
//Row 1:
//题目数量
constraints.gridx = 0;
constraints.gridy = 0;
constraints.ipadx = 0;
constraints.ipady = 0;
gridBag.setConstraints(amountLabel, constraints);
container.add(amountLabel);
//位数
constraints.gridx = 1;
constraints.gridy = 0;
constraints.ipadx = 0;
constraints.ipady = 0;
gridBag.setConstraints(digitLabel, constraints);
container.add(digitLabel);
//笔数
constraints.gridx = 2;
constraints.gridy = 0;
constraints.ipadx = 0;
constraints.ipady = 0;
gridBag.setConstraints(parameterLabel, constraints);
container.add(parameterLabel);
//Row 2:
//题目数量输入区
constraints.gridx = 0;
constraints.gridy = 1;
constraints.ipadx = 0;
constraints.ipady = -50;
gridBag.setConstraints(amountField, constraints);
container.add(amountField);
//位数输入区
constraints.gridx = 1;
constraints.gridy = 1;
constraints.ipadx = 0;
constraints.ipady = -50;
gridBag.setConstraints(digitField, constraints);
container.add(digitField);
//笔数输入区
constraints.gridx = 2;
constraints.gridy = 1;
constraints.ipadx = 0;
constraints.ipady = -50;
gridBag.setConstraints(parameterField, constraints);
container.add(parameterField);
//Row 3: 测验区域
quizArea.setFont(new Font("SansSerif", Font.PLAIN, 24));
quizArea.setText("\n Enjoy This Game!\n");
quizArea.setEditable(false);
nextButton.setEnabled(false);
enterButton.setEnabled(false);
constraints.gridwidth = 3;
constraints.gridx = 0;
constraints.gridy = 2;
constraints.ipadx = 0;
constraints.ipady = 50;
gridBag.setConstraints(quizArea, constraints);
container.add(quizArea);
//Row 4:功能按钮
//开始
startButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
try
{
count = 0;
correct = 0;
timeBegin = new Date();
timerBegin = timeBegin.getTime();
r = new Random();
amount = Integer.parseInt(amountField.getText());
digit = Integer.parseInt(digitField.getText());
parameter = Integer.parseInt(parameterField.getText());
testArray = new int[amount][parameter + 1];
testOperator = new boolean[amount][parameter - 1];
testOperator2 = new char[amount][parameter - 1];
for(int i = 0; i < amount; i ++)
{
testArray[i][parameter] = 0;
for(int j = 0; j < parameter; j ++)
{
testArray[i][j] = (int)(Math.pow(10, digit)*r.nextFloat());
if(j == 0)
{
testArray[i][parameter] = testArray[i][0];
}
if(j > 0)
{
testOperator[i][j - 1] = r.nextBoolean();
if(testOperator[i][j - 1] == true)
{
testArray[i][parameter] += testArray[i][j];
testOperator2[i][j - 1] = '+';
}
else
{
testArray[i][parameter] -= testArray[i][j];
testOperator2[i][j - 1] = '-';
}
}
}
if(testArray[i][parameter] < 0)
{
for(int m = 0; m < parameter - 1; m ++)
{
testOperator[i][m] = true;
}
i --;
}
}
quizArea.setText("\n Question Number 1 \n");
for(int n = 0; n < parameter; n ++)
{
if(n == 0)
{
quizArea.append(" "
+ testArray[0][0] + " ");
continue;
}
quizArea.append(testOperator2[0][n - 1] + " " + testArray[0][n] + " ");
}
quizArea.append("= ?");
enterButton.setEnabled(true);
}
catch(Exception e)
{
quizArea.setFont(new Font("SansSerif", Font.PLAIN, 20));
quizArea.append("\n\nPlease input the right parameter!");
e.printStackTrace();
}
}
});
startButton.setToolTipText("Start Game");
constraints.gridwidth = 1;
constraints.gridx = 0;
constraints.gridy = 3;
constraints.ipadx = 0;
constraints.ipady = 0;
gridBag.setConstraints(startButton, constraints);
container.add(startButton);
//下一题
nextButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
try
{
quizArea.setText("\n Question Number " + ++count + "\n");
-- count;
for(int n = 0; n < parameter; n ++)
{
if(n == 0)
{
quizArea.append(" "
+ testArray[count][0] + " ");
continue;
}
quizArea.append(testOperator2[count][n - 1] + " "
+ testArray[count][n] + " ");
}
quizArea.append("= ?");
nextButton.setEnabled(false);
enterButton.setEnabled(true);
}
catch(Exception e)
{
e.printStackTrace();
}
}
});
nextButton.setToolTipText("Go to next question");
constraints.gridx = 1;
constraints.gridy = 3;
constraints.ipadx = 0;
constraints.ipady = 0;
gridBag.setConstraints(nextButton, constraints);
container.add(nextButton);
//提交
enterButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
try
{
if(Integer.parseInt(submitBox.getText()) == testArray[count][parameter])
{
quizArea.setText("\n Congratulations!" +
"\n You are right!");
++ correct;
}
else
{
quizArea.setText("\n Sorry, you are wrong!\n" +
" Correct answer is: " + testArray[count][parameter]);
}
++ count;
submitBox.setText("");
nextButton.setEnabled(true);
enterButton.setEnabled(false);
if(count == amount)
{
timeEnd = new Date();
timerEnd = timeEnd.getTime();
timerEnd -= timerBegin;
quizArea.setText("\n Game Ends! Score : " + correct
+ "\n Time elapsed: " + (int)(timerEnd/1000)+ " seconds");
nextButton.setEnabled(false);
enterButton.setEnabled(false);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
});
enterButton.setToolTipText("Submit your answer and check");
constraints.gridx = 2;
constraints.gridy = 3;
constraints.ipadx = 0;
constraints.ipady = 0;
gridBag.setConstraints(enterButton, constraints);
container.add(enterButton);
//Row 5:输入区域
constraints.gridwidth = 3;
constraints.gridx = 0;
constraints.gridy = 4;
constraints.