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())