From 0d2700d8b42cd72a17071bb9f8c9eb9adf95260d Mon Sep 17 00:00:00 2001 From: UndeadMaelys Date: Sun, 30 May 2021 10:00:01 +0200 Subject: [PATCH] Added question for ON readings and KUN readings! Needs testing to make sure it isnt giving false options or wrong ones. --- kanji_learner.lua | 102 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 89 insertions(+), 13 deletions(-) diff --git a/kanji_learner.lua b/kanji_learner.lua index dd8cd47..6f25459 100644 --- a/kanji_learner.lua +++ b/kanji_learner.lua @@ -12,6 +12,36 @@ function GetUnrepeatedKanji(lAvoid) return lKanji end +function GetUnrepeatedReadingON(lAvoid) + lKanji = KanjiData[math.random(#KanjiData)] + + for j=1, #lKanji.On do + for i=1, #lAvoid do + if lKanji.On[j] == lAvoid[i] then + lKanji = GetUnrepeatedKanji(lAvoid) + break + end + end + end + return GetOneFrom(lKanji.On) +end + +function GetUnrepeatedReadingKUN(lAvoid) + lKanji = KanjiData[math.random(#KanjiData)] + + if lKanji.Kun == nil then GetUnrepeatedKanji(lAvoid) end + + for j=1, #lKanji.Kun do + for i=1, #lAvoid do + if lKanji.Kun[j] == lAvoid[i] then + lKanji = GetUnrepeatedKanji(lAvoid) + break + end + end + end + return GetOneFrom(lKanji.Kun) +end + function GetOneFrom(Table) if type(Table) == "table" then return Table[math.random(#Table)] @@ -63,15 +93,70 @@ function AskKanji4Meaning() end end -function Ask() - local Type = math.random(#QuestionType) +function AskReadingON4Kanji() + CurrentKanji = KanjiData[math.random(#KanjiData)] + local Reading = GetOneFrom(CurrentKanji.On) + for i=1, #CurrentKanji.On do + table.insert(AvoidList,CurrentKanji.On[i]) + end + io.write(TextColor("Q: ",COLOR.HighBlue).."Which is a On reading of \""..GetOneFrom(CurrentKanji.Symbol).."\"? \n") + io.write("\n") + + for i=1, 4 do + if i == Solution then + io.write(TextColor(" ("..i..") ",COLOR.HighYellow)..Reading) + io.write("\n") + else + lRandomONReading = GetUnrepeatedReadingON(AvoidList) + table.insert(AvoidList,lRandomONReading) + io.write(TextColor(" ("..i..") ",COLOR.HighYellow)..lRandomONReading) + io.write("\n") + end + end +end + +function AskReadingKUN4Kanji() + CurrentKanji = KanjiData[math.random(#KanjiData)] + local Reading = GetOneFrom(CurrentKanji.Kun) + for i=1, #CurrentKanji.Kun do + table.insert(AvoidList,CurrentKanji.Kun[i]) + end + io.write(TextColor("Q: ",COLOR.HighBlue).."Which is a Kun reading of \""..GetOneFrom(CurrentKanji.Symbol).."\"? \n") + io.write("\n") + + for i=1, 4 do + if i == Solution then + io.write(TextColor(" ("..i..") ",COLOR.HighYellow)..Reading) + io.write("\n") + else + lRandomKUNReading = GetUnrepeatedReadingKUN(AvoidList) + table.insert(AvoidList,lRandomKUNReading) + io.write(TextColor(" ("..i..") ",COLOR.HighYellow)..lRandomKUNReading) + io.write("\n") + end + end +end + +QuestionType = Enum { + "KANJI4MEANING", + "MEANING4KANJI", + "READINGON4KANJI", + "READINGKUN4KANJI" +} + +function Ask(Ttpe) + local Type = Ttpe or math.random(#QuestionType) Solution = math.random(4) AvoidList = {} - if Type == QuestionType.KANJI then + if Type == QuestionType.KANJI4MEANING then AskKanji4Meaning() - elseif Type == QuestionType.MEANING then + elseif Type == QuestionType.MEANING4KANJI then AskMeaning4Kanji() + elseif Type == QuestionType.READINGON4KANJI then + AskReadingON4Kanji() + elseif Type == QuestionType.READINGKUN4KANJI then + AskReadingKUN4Kanji() end io.write("\n") @@ -102,11 +187,6 @@ function Check(answer) Total = Total + 1 end -QuestionType = Enum { - "KANJI", - "MEANING" -} - function ShowProgress() io.write("\027[2K#"..tostring(Total+1).."\t") @@ -138,11 +218,7 @@ while 1 do os.execute("clear") ShowProgress() - - --Ask() Ask() - --Ask(QuestionType.KANJI) - response = io.read() Check(response)