require "kanji_data" require "helper_functions" function GetUnrepeatedKanji(lAvoid) lKanji = KanjiData[math.random(#KanjiData)] for i=1, #lAvoid do if lKanji == lAvoid[i] then lKanji = GetUnrepeatedKanji(lAvoid) break end end return lKanji end function GetOneFrom(Table) if type(Table) == "table" then return Table[math.random(#Table)] elseif type(Table) == "string" then return Table else return "oopsie" end end function AskMeaning4Kanji() CurrentKanji = KanjiData[math.random(#KanjiData)] table.insert(AvoidList,CurrentKanji) io.write(TextColor("Q: ",COLOR.HighBlue).."What does "..CurrentKanji.Symbol.." mean? \n") io.write("\n") for i=1, 4 do if i == Solution then io.write(TextColor(" ("..i..") ",COLOR.HighYellow)..GetOneFrom(CurrentKanji.Meaning)) io.write("\n") else lRandomKanji = GetUnrepeatedKanji(AvoidList) table.insert(AvoidList,lRandomKanji) io.write(TextColor(" ("..i..") ",COLOR.HighYellow)..GetOneFrom(lRandomKanji.Meaning)) io.write("\n") end end end function AskKanji4Meaning() CurrentKanji = KanjiData[math.random(#KanjiData)] table.insert(AvoidList,CurrentKanji) io.write(TextColor("Q: ",COLOR.HighBlue).."Which is the kanji for \""..GetOneFrom(CurrentKanji.Meaning).."\"? \n") io.write("\n") for i=1, 4 do if i == Solution then io.write(TextColor(" ("..i..") ",COLOR.HighYellow)..CurrentKanji.Symbol) io.write("\n") else lRandomKanji = GetUnrepeatedKanji(AvoidList) table.insert(AvoidList,lRandomKanji) io.write(TextColor(" ("..i..") ",COLOR.HighYellow)..lRandomKanji.Symbol) io.write("\n") end end end function Ask() local Type = math.random(#QuestionType) Solution = math.random(4) AvoidList = {} if Type == QuestionType.KANJI then AskKanji4Meaning() elseif Type == QuestionType.MEANING then AskMeaning4Kanji() end io.write("\n") io.write(TextColor("A: ",COLOR.HighPurple)) end function Check(answer) if answer == "" then io.write("\027[1F".."\027[3C") Check(io.read()) else io.write("\n") if answer == tostring(Solution) then io.write(TextColor("Correct!",COLOR.HighGreen)) io.write(TextEffect(TextColor(" [Streak +1]",COLOR.HighCyan),EFFECT.BlinkFast)) Streak = Streak + 1 Correct = Correct + 1 else io.write(TextColor("Wrong!",COLOR.HighRed).." Answer is ("..Solution..")") if Streak >= 5 then io.write(TextEffect(TextColor(" ["..Streak.." Streak Lost]",COLOR.Cyan),EFFECT.BlinkFast)) end Streak = 0 Wrong = Wrong + 1 end UpdateProgress() io.write("\n") io.read() end Total = Total + 1 end QuestionType = Enum { "KANJI", "MEANING" } function ShowProgress() io.write("\027[2K#"..tostring(Total+1).."\t") io.write("Right: "..TextColor(tostring(Correct),COLOR.HighGreen).."\t") io.write("Wrong: "..TextColor(tostring(Wrong),COLOR.HighRed).."\t") if Streak >= 5 then io.write( TextEffect(TextColor("CURRENT STREAK: ", COLOR.HighCyan),EFFECT.BlinkFast).. TextEffect(TextColor(Streak,COLOR.White),EFFECT.BlinkFast) ) end io.write("\n") end function UpdateProgress() io.write("\027[s") io.write("\027[1;1H") ShowProgress() io.write("\027[u") end Correct = 0 Total = 0 Streak = 0 Wrong = 0 math.randomseed(os.time()) while 1 do os.execute("clear") ShowProgress() --Ask() Ask() --Ask(QuestionType.KANJI) response = io.read() Check(response) end os.execute("clear")