136 lines
2.9 KiB
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
|