Trivia Game

<< Timer Applicaiton | Applications | Ten Apples Puzzle >>

This is a beginning of a trivia game. Click the Q for a new question.

To Do:

  1. Check to see if the answer is correct
  2. Keep score
  3. Make the questions an ArrayList rather than an array, so you can remove a question once it has been asked.

Question.java


public class Question
{
    // instance variables - replace the example below with your own
    private String question, answer;
    private String[] distractors;

    /**
     * Constructor for objects of class Question
     */
    public Question(String q, String a, String d1, String d2, String d3 )
    {
        question = q;
        answer= a;
        distractors = new String[3];
        distractors[0] = d1;
        distractors[1] = d2;
        distractors[2] = d3;       
    }
    public void assignChoices(Choice[] cArray){
        String[] arr=new String[4];
        arr[3]=answer;
        for(int i=0; i<distractors.length; i++)
            arr[i]=distractors[i];
        //shuffle 5 to 25 times
        int n = 5+(int)(20*Math.random());
        for(int i=0;i<n;i++){
            swap(arr); 
        }
        // load up choice array
        for (int i=0; i< arr.length; i++)
            cArray[i].setText(arr[i]);
    }
    public void swap(String[] arr){
        int a = (int)(arr.length*Math.random());
        int b = (int)(arr.length*Math.random());  
        String temp=arr[a];
        arr[a]=arr[b];
        arr[b]=temp;
    }
    public String getQuestion(){
        return question;
    }
    public String getAnswer(){
        return question;
    }
    public boolean isCorrect(String s){
        return s.equals(answer);
    }
}

Choice.java

import java.awt.*;
public class Choice
{
    // instance variables - replace the example below with your own
    private int x, y, size;
    private String letter, text;
    private Rectangle box;

    /**
     * Constructor for objects of class Choice
     */
    public Choice(int x, int y, int size, String letter)
    {
        // initialise instance variables
        this.x = x;
        this.y =y;
        this.letter=letter;
        box = new Rectangle (x,y, size, size);
        text="";
    }
    public void draw(Graphics g){
        g.setColor(Color.BLACK);
        g.fillRect(box.x, box.y, box.width, box.height);
        g.setColor(Color.YELLOW);
        g.fillRect(box.x+5, box.y+5, box.width-10, box.height-10);
        g.setColor(Color.BLACK);
        g.setFont(new Font("Sans", Font.BOLD, 20));
        g.drawString(letter, box.x+30, box.y+45);
        g.setFont(new Font("Sans", Font.BOLD, 18));
        g.drawString(text, box.x+box.width+20, box.y+45);
    }
    public boolean contains(int x, int y){
        return box.contains(x,y);
    }
    public String getLetter(){return letter;}
    public String getText(){return text;}
    public void setText(String t){ text=t;}

}

TriviaGame.java

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class TriviaGame extends JPanel implements MouseListener
{
    public static int WIDTH=800;
    public static int HEIGHT=600;


    private Font titleFont, regularFont;
    private int x,y;
    private Choice[] choices;
    private Choice nextButton;
    private String chosen;
    private Question[] questions;


    public TriviaGame()
    {

        //initialize variables here...
        titleFont = new Font("Roman", Font.BOLD, 18);
        regularFont = new Font("Helvetica", Font.PLAIN, 12);
        x=0;
        y=0;
        chosen="";
        nextButton = new Choice (30, 50, 75, "Q");
        choices = new Choice[4];
        for (int i=0; i<choices.length; i++){
            choices[i]=new Choice(30, 155+i*100, 75, "ABCD".substring(i, i+1) );          
        }
        loadQuestions();
    }
    public void loadQuestions(){
        questions = new Question[3];
        questions[0]=new Question("What is 2 + 2?",
            "4", 
            "0", "1", "2" );
        questions[1]=new Question("What is 2 squared?",
            "4", 
            "0", "1", "2" );
        questions[2]=new Question("What is 54 % 10?",
            "4", 
            "0", "1", "2" );

    }
    public static void main(String[] args) {
        TriviaGame app= new TriviaGame();
        JFrame window = new JFrame("Trivia Game");
        window.setSize(WIDTH, HEIGHT);
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.getContentPane().add(app);

        window.getContentPane().addMouseListener(app);

        window.setVisible(true);

    }
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, getWidth(),getHeight());
        g.setColor(Color.BLUE);
        g.setFont(titleFont);
        g.drawString("Trivia Game", 20, 20);
        g.drawString("X = "+x+"   Y = "+y+" CHOSEN ="+chosen, 20, 560);
        g.setColor(Color.BLACK);
        g.setFont(regularFont);
        g.drawString("Click on 'Q' for a new question", 20, 40);
        g.setColor(Color.BLACK);
        g.setFont(titleFont);
        for (Choice c:choices){
            c.draw(g);
        }
        nextButton.draw(g);

    }
    // update is a workaround to cure Windows screen flicker problem
    public void update(Graphics g){
        paint(g);
    }
    /**
     * These are the Methods needed to implement the MouseListener Interface
     */
    @Override
    public void mouseClicked(MouseEvent e) {

    }
    @Override
    public void mousePressed(MouseEvent e) {

    }
    @Override
    public void mouseReleased(MouseEvent e) {
        x=e.getX();
        y=e.getY();
        chosen ="";
        for(Choice c :choices)
            if (c.contains(x, y))
                chosen=c.getLetter();
        if (nextButton.contains(x,y) ){
            // get new question
            int r = (int)(questions.length*Math.random());
            nextButton.setText(questions[r].getQuestion() );
            questions[r].assignChoices(choices);
        }
        repaint();
    }
    @Override
    public void mouseEntered(MouseEvent e) {

    }
    @Override
    public void mouseExited(MouseEvent e) {

    }



}