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 AskMeaning() io.write(Colorize("Q: ",COLOR.HighBlue).."What does "..CurrentKanji.Symbol.." mean? \n") io.write("\n") for i=1, 4 do if i == Solution then io.write(Colorize(" ("..i..") ",COLOR.HighYellow)..CurrentKanji.Meaning) io.write("\n") else lRandomKanji = GetUnrepeatedKanji(AvoidList) table.insert(AvoidList,lRandomKanji) io.write(Colorize(" ("..i..") ",COLOR.HighYellow)..lRandomKanji.Meaning) io.write("\n") end end end function AskKanji() io.write(Colorize("Q: ",COLOR.HighBlue).."Which is the kanji for \""..CurrentKanji.Meaning.."\"? \n") io.write("\n") for i=1, 4 do if i == Solution then io.write(Colorize(" ("..i..") ",COLOR.HighYellow)..CurrentKanji.Symbol) io.write("\n") else lRandomKanji = GetUnrepeatedKanji(AvoidList) table.insert(AvoidList,lRandomKanji) io.write(Colorize(" ("..i..") ",COLOR.HighYellow)..lRandomKanji.Symbol) io.write("\n") end end end function Ask(Type) Solution = math.random(4) AvoidList = {} table.insert(AvoidList,CurrentKanji) if Type == QuestionType.KANJI then AskKanji() elseif Type == QuestionType.MEANING then AskMeaning() end io.write("\n") io.write(Colorize("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(Colorize("Correct!",COLOR.HighGreen)) io.write(Colorize(" [Streak +1]",COLOR.HighCyan,nil,COLORMODE.BlinkFast)) Streak = Streak + 1 Correct = Correct + 1 else io.write(Colorize("Wrong!",COLOR.HighRed).." Answer is ("..Solution..")") if Streak >= 5 then io.write(Colorize(" [Streak Lost]",COLOR.Cyan,nil,COLORMODE.BlinkFast)) end Streak = 0 Wrong = Wrong + 1 end UpdateProgress() io.write("\n") io.read() end Total = Total + 1 end QuestionType = Enum { "KANJI", "MEANING", "ON", "KUN" } function ShowProgress() io.write("#"..tostring(Total+1).."\t") io.write("Right: "..Colorize(tostring(Correct),COLOR.HighGreen).."\t") io.write("Wrong: "..Colorize(tostring(Wrong),COLOR.HighRed).."\t") if Streak >= 5 then io.write(Colorize("CURRENT STREAK: ", COLOR.HighCyan,nil,COLORMODE.BlinkFast)..Colorize(Streak,COLOR.White,nil,COLORMODE.BlinkFast)) end io.write("\n\n") end function UpdateProgress() io.write("\027[s") io.write("\027[1;1H") ShowProgress(true) io.write("\027[u") end Correct = 0 Total = 0 Streak = 0 Wrong = 0 while 1 do os.execute("clear") CurrentKanji = KanjiData[math.random(#KanjiData)] ShowProgress() --Ask(math.random(#QuestionType)) Ask(math.random(2)) --Ask(QuestionType.KANJI) response = io.read() Check(response) end