from pyscript import document, window from random import randint from js import console, SpeechSynthesisUtterance import js from time import sleep import asyncio import time class Mission: mission = "" amount_1 = 0 amount_2 = 0 mission_type = "" mission_types = {"most": "Welke zijn de meeste?", "least": "Welke zijn de minste?"} amount_1_element = None amount_2_element = None chacked = False @staticmethod async def generate_mission(): if randint(0, 1) == 0: Mission.mission_type = "most" else: Mission.mission_type = "least" mission = Mission.mission_types[Mission.mission_type] Mission.amount_1 = randint(1, 5) Mission.amount_2 = randint(1, 5) while Mission.amount_1 == Mission.amount_2: Mission.amount_2 = randint(1, 5) mission_element = document.querySelector("#mission") mission_element.innerHTML = mission Mission.amount_1_element = document.querySelector("#amount_1") Mission.amount_1_element.innerHTML = "🚂" * Mission.amount_1 Mission.amount_1_element.className = "amount" Mission.amount_2_element = document.querySelector("#amount_2") Mission.amount_2_element.innerHTML = "🚃" * Mission.amount_2 Mission.amount_2_element.className = "amount" Mission.checked = False await Mission.speak(mission) @staticmethod async def count(amount_element): for index, value in enumerate(amount_element.children): console.log(index, value) value.style.fontSize = "2em" if index != 0: amount_element.children[index - 1].style.fontSize = "1em" await Mission.speak(str(index + 1)) amount_element.children[len(amount_element.children) - 1].style.fontSize = "1em" speak_done = True @staticmethod def end_speak(_): console.log("end speak") Mission.speak_done = True @staticmethod def start_speak(_): console.log("start speak") Mission.speak_done = False @staticmethod async def speak(message): mission_statement = SpeechSynthesisUtterance.new(message) mission_statement.lang = "nl-NL" mission_statement.onend = Mission.end_speak mission_statement.onstart = Mission.start_speak synth = window.speechSynthesis Mission.speak_done = False synth.speak(mission_statement) while Mission.speak_done is False: await asyncio.sleep(0.01) @staticmethod async def check_answer(answer_number): if Mission.checked: return Mission.checked = True for item in dir(Mission.amount_1_element): console.log(item) if Mission.mission_type == "most": if answer_number == 1: if Mission.amount_1 > Mission.amount_2: Mission.amount_1_element.classList.add("correct") await Mission.speak( f"Goed gedaan! {Mission.amount_1} is meer dan {Mission.amount_2}" ) else: Mission.amount_1_element.classList.add("false") await Mission.speak(f"Jammer!") await Mission.count(Mission.amount_1_element) await Mission.speak("is niet meer dan") await Mission.count(Mission.amount_2_element) else: if Mission.amount_2 > Mission.amount_1: Mission.amount_2_element.classList.add("correct") await Mission.speak( f"Goed gedaan! {Mission.amount_2} is meer dan {Mission.amount_1}" ) else: Mission.amount_2_element.classList.add("false") await Mission.speak(f"Jammer!") await Mission.count(Mission.amount_2_element) await Mission.speak("is niet meer dan") await Mission.count(Mission.amount_1_element) else: if answer_number == 1: if Mission.amount_1 < Mission.amount_2: Mission.amount_1_element.classList.add("correct") await Mission.speak( f"Goed gedaan! {Mission.amount_1} is minder dan {Mission.amount_2}" ) else: Mission.amount_1_element.classList.add("false") await Mission.speak(f"Jammer!") await Mission.count(Mission.amount_1_element) await Mission.speak("is niet minder dan") await Mission.count(Mission.amount_2_element) else: if Mission.amount_2 < Mission.amount_1: Mission.amount_2_element.classList.add("correct") await Mission.speak( f"Goed gedaan! {Mission.amount_2} is minder dan {Mission.amount_1}" ) else: Mission.amount_2_element.classList.add("false") await Mission.speak(f"Jammer!") await Mission.count(Mission.amount_2_element) await Mission.speak("is niet minder dan") await Mission.count(Mission.amount_1_element) await asyncio.sleep(2) await Mission.generate_mission() async def amount_1_clicked(_): await Mission.check_answer(1) async def amount_2_clicked(_): await Mission.check_answer(2) async def main(): console.log("Starting main function") await Mission.generate_mission() asyncio.get_running_loop().run_until_complete(main()) #asyncio.get_running_loop().run_until_complete(Mission.generate_mission())