Advertisement
Guest User

Untitled

a guest
May 25th, 2019
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.77 KB | None | 0 0
  1. package com.duplxey.nquiz.quiz;
  2.  
  3. public class Answer {
  4.  
  5.     private String text;
  6.  
  7.     public Answer(String text) {
  8.         this.text = text;
  9.     }
  10.  
  11.     public String getText() {
  12.         return text;
  13.     }
  14. }
  15. package com.duplxey.nquiz.quiz;
  16.  
  17. import java.net.URL;
  18.  
  19. public class Question {
  20.  
  21.     private String text;
  22.     private Answer[] answers;
  23.     private URL imageURL;
  24.     private int correct;
  25.  
  26.     public Question(String text, Answer[] answers, URL imageURL, int correct) {
  27.         this.text = text;
  28.         this.answers = answers;
  29.         this.imageURL = imageURL;
  30.         this.correct = correct;
  31.     }
  32.  
  33.     public Question(String text, Answer[] answers, int correct) {
  34.         this(text, answers, null, correct);
  35.     }
  36.  
  37.     public boolean isCorrect(int i) {
  38.         return i == correct;
  39.     }
  40.  
  41.     public String getText() {
  42.         return text;
  43.     }
  44.  
  45.     public Answer[] getAnswers() {
  46.         return answers;
  47.     }
  48.  
  49.     public URL getImageURL() {
  50.         return imageURL;
  51.     }
  52.  
  53.     public int getCorrect() {
  54.         return correct;
  55.     }
  56. }
  57. package com.duplxey.nquiz.quiz;
  58.  
  59. public enum QuizCategory {
  60.     TRIVIA("Random questions."),
  61.     MATH("Math related questions."),
  62.     ENGLISH("English related questions."),
  63.     FUN("Are these even fun?"),
  64.     TECH("Computers, programming, net?"),
  65.     ;
  66.  
  67.     private String description;
  68.  
  69.     QuizCategory(String description) {
  70.         this.description = description;
  71.     }
  72.  
  73.     public String getDescription() {
  74.         return description;
  75.     }
  76. }
  77. package com.duplxey.nquiz.quiz;
  78.  
  79. public enum QuizDifficulty {
  80.     EASY(0),
  81.     MEDIUM(1),
  82.     HARD(2),
  83.     EXTREME(3),
  84.     ;
  85.  
  86.     private int level;
  87.  
  88.     QuizDifficulty(int level) {
  89.         this.level = level;
  90.     }
  91.  
  92.     public int getLevel() {
  93.         return level;
  94.     }
  95. }
  96. package com.duplxey.nquiz.quiz;
  97.  
  98. import com.duplxey.nquiz.util.FileUtil;
  99. import com.duplxey.nquiz.util.GsonUtil;
  100.  
  101. import java.io.File;
  102. import java.io.IOException;
  103. import java.util.LinkedList;
  104.  
  105. public class Quiz {
  106.  
  107.     private String name;
  108.     private String description;
  109.     private QuizCategory category;
  110.     private QuizDifficulty difficulty;
  111.     private LinkedList<Question> questions;
  112.  
  113.     // Transient to prevent serialization
  114.     private transient File quizDirectory;
  115.     private transient File file = null;
  116.  
  117.     public Quiz(QuizManager quizManager, String name, String description, QuizCategory category, QuizDifficulty difficulty, LinkedList<Question> questions) {
  118.         this.name = name;
  119.         this.description = description;
  120.         this.category = category;
  121.         this.difficulty = difficulty;
  122.         this.questions = questions;
  123.  
  124.         quizDirectory = quizManager.getQuizDirectory();
  125.     }
  126.  
  127.     public Quiz(QuizManager quizManager, String name, String description, QuizCategory category, QuizDifficulty difficulty) {
  128.         this(quizManager, name, description, category, difficulty, new LinkedList<Question>() {});
  129.     }
  130.  
  131.     public Quiz(QuizManager quizManager, String name) {
  132.         this(quizManager, name, "No description given.", QuizCategory.FUN, QuizDifficulty.EASY, new LinkedList<Question>() {});
  133.     }
  134.  
  135.     private void fileSetup() {
  136.         if (file == null) {
  137.             file = new File(quizDirectory, name + ".json");
  138.             try {
  139.                 file.createNewFile();
  140.             } catch (IOException e) {
  141.                 e.printStackTrace();
  142.             }
  143.         }
  144.     }
  145.  
  146.     public void save() {
  147.         fileSetup();
  148.         FileUtil.writeToFile(file.getPath(), GsonUtil.getInstance().getGson().toJson(this));
  149.     }
  150.  
  151.     public void delete() {
  152.         fileSetup();
  153.         file.delete();
  154.     }
  155.  
  156.     public String getName() {
  157.         return name;
  158.     }
  159.  
  160.     public String getDescription() {
  161.         return description;
  162.     }
  163.  
  164.     public QuizCategory getCategory() {
  165.         return category;
  166.     }
  167.  
  168.     public QuizDifficulty getDifficulty() {
  169.         return difficulty;
  170.     }
  171.  
  172.     public LinkedList<Question> getQuestions() {
  173.         return questions;
  174.     }
  175.  
  176.     public void setDescription(String description) {
  177.         this.description = description;
  178.     }
  179.  
  180.     public void setCategory(QuizCategory category) {
  181.         this.category = category;
  182.     }
  183.  
  184.     public void setDifficulty(QuizDifficulty difficulty) {
  185.         this.difficulty = difficulty;
  186.     }
  187.  
  188.     public void addQuestion(Question question) {
  189.         questions.add(question);
  190.     }
  191.  
  192.     public void removeQuestion(int questionId) {
  193.         questions.remove(questionId);
  194.     }
  195.  
  196.     public void setQuestions(LinkedList<Question> questions) {
  197.         this.questions = questions;
  198.     }
  199.  
  200.     public void clearQuestions() {
  201.         questions.clear();
  202.     }
  203.  
  204.     public String info() {
  205.         return name + " (" + description + ") " + "(" + category + ") " + "(" + difficulty + ")";
  206.     }
  207. }
  208. package com.duplxey.nquiz.quiz;
  209.  
  210. import com.duplxey.nquiz.util.FileUtil;
  211. import com.duplxey.nquiz.util.GsonUtil;
  212. import org.jsoup.Jsoup;
  213.  
  214. import java.io.File;
  215. import java.io.IOException;
  216. import java.util.Collection;
  217. import java.util.HashMap;
  218.  
  219. public class QuizManager {
  220.  
  221.     private File quizDirectory;
  222.     private HashMap<String, Quiz> quizzes = new HashMap<>();
  223.  
  224.     public QuizManager() {
  225.         setup();
  226.     }
  227.  
  228.     private void setup() {
  229.         quizDirectory = new File("quizzes");
  230.         if (!quizDirectory.mkdir()) {
  231.             File[] files = quizDirectory.listFiles();
  232.             if (files != null) {
  233.                 for (File file : files) {
  234.                     registerQuiz(GsonUtil.getInstance().getGson().fromJson(FileUtil.getFileContent(file.getPath()), Quiz.class));
  235.                 }
  236.             }
  237.         }
  238.     }
  239.  
  240.     public void registerQuiz(Quiz quiz) {
  241.         quizzes.put(quiz.getName(), quiz);
  242.     }
  243.  
  244.     public void unregisterQuiz(String name) {
  245.         quizzes.remove(name);
  246.     }
  247.  
  248.     public Quiz getQuiz(String name) {
  249.         return quizzes.get(name);
  250.     }
  251.  
  252.     public Quiz getWebQuiz(String url) throws IOException {
  253.         return GsonUtil.getInstance().getGson().fromJson(Jsoup.connect(url).get().body().text(), Quiz.class);
  254.     }
  255.  
  256.     public boolean existsQuiz(String name) {
  257.         return quizzes.containsKey(name);
  258.     }
  259.  
  260.     public Collection<Quiz> getQuizzes() {
  261.         return quizzes.values();
  262.     }
  263.  
  264.     public File getQuizDirectory() {
  265.         return quizDirectory;
  266.     }
  267. }
  268. package com.duplxey.nquiz.quiz;
  269.  
  270. import java.util.Scanner;
  271.  
  272. public class QuizPlay {
  273.  
  274.     private Quiz quiz;
  275.  
  276.     private Scanner sc;
  277.     private int current = 0;
  278.     private int[] results = new int[] {0, 0}; // 0 = correct, 1 = wrong
  279.     private long startTime;
  280.  
  281.     public QuizPlay(Quiz quiz) {
  282.         this.quiz = quiz;
  283.  
  284.         sc = new Scanner(System.in);
  285.     }
  286.  
  287.     public void play() {
  288.         System.out.println("-*-*-*-*-*-*- NQuiz -*-*-*-*-*-*-");
  289.         System.out.println("Quiz name: '" + quiz.getName());
  290.         System.out.println("Description: " + quiz.getDescription());
  291.         System.out.println("Category: " + quiz.getCategory());
  292.         System.out.println("Difficulty: " + quiz.getDifficulty());
  293.         System.out.println("Number of questions: " + quiz.getQuestions().size());
  294.         startTime = System.currentTimeMillis();
  295.         for (Question question : quiz.getQuestions()) {
  296.             System.out.println("---------------------------------");
  297.             System.out.println("#" + current + " " + question.getText());
  298.             for (int i = 0; i < question.getAnswers().length; i++) {
  299.                 System.out.println(i + ") " + question.getAnswers()[i].getText());
  300.             }
  301.             try {
  302.                 int answer = sc.nextInt();
  303.                 if (question.isCorrect(answer)) {
  304.                     System.out.println("Correct!");
  305.                     results[0]++;
  306.                 } else {
  307.                     System.out.println("Wrong!");
  308.                     results[1]++;
  309.                 }
  310.                 current++;
  311.             } catch (Exception e) {
  312.                 System.out.println("Wrong input. Cancelled.");
  313.                 break;
  314.             }
  315.         }
  316.         double correctPercentage = (100*results[0])/quiz.getQuestions().size();
  317.         double wrongPercentage = 100 - correctPercentage;
  318.  
  319.         System.out.println("-*-*-*-*-*-*- NQuiz -*-*-*-*-*-*-");
  320.         System.out.println("You've completed the quiz!");
  321.         System.out.println();
  322.         System.out.println("Results");
  323.         System.out.println("Correct: " + results[0] + " (" + correctPercentage + "%)");
  324.         System.out.println("Wrong: " + results[1] + " (" + wrongPercentage + "%)");
  325.         System.out.println("Time needed: " + (System.currentTimeMillis() - startTime)/1000 + "s");
  326.         System.out.println("---------------------------------");
  327.     }
  328. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement