コード例 #1
0
ファイル: main.py プロジェクト: tt-n-walters/python-tuesday
from url import URL
from quiz import Quiz

url_generator = URL()
url_generator.choose_category()
url_generator.choose_type()
url_generator.choose_difficulty()
url_generator.choose_number_of_questions()
# url_generator.number_of = 5
# url_generator.category = "any"
# url_generator.difficulty = "any"
# url_generator.type = "any"

api_url = url_generator.generate()

quiz = Quiz(api_url)
quiz.ask_question()
quiz.get_user_answer()
コード例 #2
0
ファイル: ui.py プロジェクト: janiaaltonen/quiz-master-game
class UI(tk.Tk):
    def __init__(self, title="QuizMaster"):
        super().__init__()
        self.title(title)
        self.geometry("720x300")
        self.__quiz = None
        self.question = tk.StringVar()
        self.info = tk.StringVar()
        self.question_frame = tk.Frame(self).grid(row=1,
                                                  sticky=tk.W + tk.E + tk.S +
                                                  tk.N)
        tk.Label(self.question_frame, textvariable=self.question).grid(
            padx=75, pady=20, sticky=tk.W + tk.E + tk.S + tk.N, columnspan=5)

        self.buttons = ButtonBlock(self, categories, 2, answers=False)
        self.info_frame = tk.Frame(self)
        self.info_frame.grid(row=6,
                             column=2,
                             padx=20,
                             pady=15,
                             sticky=tk.W + tk.E + tk.S + tk.N)
        tk.Label(self.info_frame, textvariable=self.info).pack(side=tk.LEFT,
                                                               padx=40)

        self.canvas = tk.Canvas(self, width=500, height=200)
        self.canvas.grid(row=12,
                         columnspan=9,
                         padx=120,
                         sticky=tk.W + tk.E + tk.S + tk.N)

        self.protocol("WM_DELETE_WINDOW", self.close)

        if os.path.exists('db/games/quiz.dat'):
            msq = messagebox.askquestion(
                "Lataa peli", "Haluatko jatkaa viimeksi tallennettua peliä?")
            if msq == 'yes':
                f = FileHandler()
                self.__quiz = f.deserialize()
                self.__quiz.loaded_game_question = self.__quiz.questionToAsk
                self.start_quiz()
            else:
                os.remove('db/games/quiz.dat')
                self.create_start_menu()
        else:
            self.create_start_menu()

    def create_start_menu(self):
        self.question.set(
            'Tervetuloa pelaamaan QuizMasteria.\nAloita valitsemalla kategoria.'
        )
        self.buttons = ButtonBlock(self, categories, 2, answers=False)
        self.buttons.grid(row=4, column=0, columnspan=3, padx=200, pady=5)

    def create_quiz(self, category):
        self.__quiz = Quiz(category)
        self.start_quiz()

    def start_quiz(self):
        self.buttons.destroy()
        self.question.set(self.__quiz.ask_question())
        self.buttons = ButtonBlock(self, self.__quiz.ansForQuestion, 2)
        self.buttons.grid(row=4, column=0, columnspan=3, padx=200, pady=5)
        self.create_circles()
        self.fill_circles(fill_many=True)

    def create_circles(self):
        start = 5
        end = 25
        for i in range(len(self.__quiz.questions)):
            self.canvas.create_oval(start, 5, end, 25, width=2)
            start += 30
            end += 30

    def fill_circles(self, fill_many=False):
        if not fill_many:
            start = 5 + 30 * self.__quiz.questionToAsk
            end = 25 + 30 * self.__quiz.questionToAsk
            if self.__quiz.result_map[self.__quiz.questionToAsk]:
                self.canvas.create_oval(start,
                                        5,
                                        end,
                                        25,
                                        width=2,
                                        fill='#1d5e2b')
            else:
                self.canvas.create_oval(start,
                                        5,
                                        end,
                                        25,
                                        width=2,
                                        fill='#b50b0b')
        else:
            for i in range(self.__quiz.questionToAsk):
                start = 5 + 30 * i
                end = 25 + 30 * i
                if self.__quiz.result_map[i]:
                    self.canvas.create_oval(start,
                                            5,
                                            end,
                                            25,
                                            width=2,
                                            fill='#1d5e2b')
                else:
                    self.canvas.create_oval(start,
                                            5,
                                            end,
                                            25,
                                            width=2,
                                            fill='#b50b0b')
            if self.__quiz.questionToAsk == len(self.__quiz.questions) - 1:
                self.fill_circles()

    def check_answer(self, is_correct):
        if is_correct:
            self.__quiz.corrects += 1
            self.__quiz.result_map[self.__quiz.questionToAsk] = True
            self.fill_circles()
        else:
            self.__quiz.result_map[self.__quiz.questionToAsk] = False
            self.fill_circles()
        if self.__quiz.questionToAsk < len(self.__quiz.questions) - 1:
            self.__quiz.questionToAsk += 1
            self.ask_new_question()
        else:
            self.info.set(
                f"Peli päättyi! Tiesit oikein {self.__quiz.corrects} / {len(self.__quiz.questions)}"
            )
            tk.Button(self.info_frame,
                      text='Aloita uusi peli',
                      command=self.new_game).pack(side=tk.LEFT, padx=40)
            self.buttons.destroy()
            self.question.set("")

    def ask_new_question(self):
        self.question.set(self.__quiz.ask_question())
        self.__quiz.get_answers_for_question(self.__quiz.questionToAsk)
        self.buttons.grid_forget()
        self.buttons = ButtonBlock(self, self.__quiz.ansForQuestion, 2)
        self.buttons.grid(row=4, column=0, columnspan=3, padx=200, pady=5)

    def close(self):
        """
        * game cannot be saved in:
            -"start menu"
            - if all the questions are answered
            - if player hasn't answered to any new question
        """
        if self.__quiz is not None:
            if self.__quiz.result_map.get(
                    len(self.__quiz.questions) - 1
            ) is None and self.__quiz.loaded_game_question != self.__quiz.questionToAsk:
                msg_box = messagebox.askquestion(
                    "Tallenna",
                    "Haluatko tallentaa pelin ennen sulkemista?",
                    icon='warning')
                if msg_box == "yes":
                    f = FileHandler()
                    f.serialize(self.__quiz)
        self.destroy()

    def new_game(self):
        self.info_frame = tk.Frame(self)
        self.info_frame.grid(row=6,
                             column=2,
                             padx=20,
                             pady=15,
                             sticky=tk.W + tk.E + tk.S + tk.N)
        tk.Label(self.info_frame, textvariable=self.info).pack(side=tk.LEFT,
                                                               padx=40)
        self.info.set('')
        self.canvas.destroy()
        self.canvas = tk.Canvas(self, width=500, height=200)
        self.canvas.grid(row=12,
                         columnspan=9,
                         padx=120,
                         sticky=tk.W + tk.E + tk.S + tk.N)
        self.create_start_menu()
        self.__quiz = None