nikanquiz/kanji_learner.lua

136 lines
2.9 KiB
Lua

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