124 lines
3.5 KiB
Lua
124 lines
3.5 KiB
Lua
local gc=love.graphics
|
|
local Timer=love.timer.getTime
|
|
local rnd=math.random
|
|
local format=string.format
|
|
|
|
local mStr=mStr
|
|
|
|
local levels={
|
|
A_Z="ABCDEFGHIJKLMNOPQRSTUVWXYZ",
|
|
Z_A="ZYXWVUTSRQPONMLKJIHGFEDCBA",
|
|
Tech1="TECHMINOHAOWAN",
|
|
Tech2="TECHMINOISFUN",
|
|
KeyTest1="THEQUICKBROWNFOXJUMPSOVERALAZYDOG",
|
|
KeyTest2="THEFIVEBOXINGWIZARDSJUMPQUICKLY",
|
|
Hello="HELLOWORLD",
|
|
Roll1="QWERTYUIOPASDFGHJKLZXCVBNM",
|
|
Roll2="QAZWSXEDCRFVTGBYHNUJMIKOLP",
|
|
Roll3="ZAQWSXCDERFVBGTYHNMJUIKLOP",
|
|
ZZZ="ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ",
|
|
ZXZX="ZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZX",
|
|
ZMZM="ZMZMZMZMZMZMZMZMZMZMZMZMZMZMZMZMZMZMZMZMZMZMZMZMZMZMZMZMZMZMZMZM",
|
|
Stair="ZXCVZXCVZXCVZXCVZXCVZXCVZXCVZXCVZXCVZXCVZXCVZXCVZXCVZXCVZXCVZXCV",
|
|
Stair2="ZXCVCXZXCVCXZXCVCXZXCVCXZXCVCXZXCVCXZXCVCXZXCVCXZXCVCXZXCVCXZXCV",
|
|
Stair3="XZCVXZCVXZCVXZCVXZCVXZCVXZCVXZCVXZCVXZCVXZCVXZCVXZCVXZCVXZCVXZCV",
|
|
BPW="OHOOOOOOOOOAAAAEAAIAUJOOOOOOOOOOOAAEOAAUUAEEEEEEEEEAAAAEAEIEAJOOOOOOOOOOEEEEOAAAAAAA",
|
|
}
|
|
|
|
function sceneInit.mg_AtoZ()
|
|
BG.set("bg2")
|
|
BGM.play("way")
|
|
sceneTemp={
|
|
level="A_Z",
|
|
target=levels.A_Z,
|
|
count=1,
|
|
frameKeyCount=0,
|
|
error=0,
|
|
startTime=0,
|
|
time=0,
|
|
state=0,
|
|
}
|
|
love.keyboard.setKeyRepeat(false)
|
|
end
|
|
function sceneBack.mg_AtoZ()
|
|
love.keyboard.setKeyRepeat(true)
|
|
end
|
|
|
|
function keyDown.mg_AtoZ(key)
|
|
local S=sceneTemp
|
|
if #key==1 then
|
|
if S.state<2 and S.frameKeyCount<3 then
|
|
if key:upper():byte()==S.target:byte(S.count)then
|
|
S.count=S.count+1
|
|
S.frameKeyCount=S.frameKeyCount+1
|
|
TEXT.show(key:upper(),rnd(320,960),rnd(100,240),90,"score",2.6)
|
|
SFX.play("move")
|
|
if S.count==2 then
|
|
S.state=1
|
|
S.startTime=Timer()
|
|
elseif S.count>#S.target then
|
|
S.time=Timer()-S.startTime
|
|
S.state=2
|
|
SFX.play("reach")
|
|
end
|
|
elseif S.count>1 then
|
|
S.error=S.error+1
|
|
SFX.play("finesseError")
|
|
end
|
|
end
|
|
elseif key=="space"then
|
|
S.count=1
|
|
S.error=0
|
|
S.time=0
|
|
S.state=0
|
|
elseif key=="escape"then
|
|
SCN.back()
|
|
end
|
|
end
|
|
|
|
function Tmr.mg_AtoZ()
|
|
local S=sceneTemp
|
|
if S.state==1 then
|
|
S.frameKeyCount=0
|
|
S.time=Timer()-S.startTime
|
|
end
|
|
end
|
|
|
|
function Pnt.mg_AtoZ()
|
|
local S=sceneTemp
|
|
|
|
setFont(40)
|
|
gc.setColor(1,1,1)
|
|
gc.print(format("%.3f",S.time),1026,80)
|
|
gc.print(S.error,1026,150)
|
|
|
|
if S.state>0 then
|
|
gc.print(format("%.3f/s",(S.count-1)/S.time),1026,220)
|
|
end
|
|
|
|
if S.state==2 then
|
|
gc.setColor(.9,.9,0)--win
|
|
elseif S.state==1 then
|
|
gc.setColor(.9,.9,.9)--game
|
|
elseif S.state==0 then
|
|
gc.setColor(.2,.8,.2)--ready
|
|
end
|
|
|
|
setFont(100)
|
|
mStr(S.state==1 and #S.target-S.count+1 or S.state==0 and"Ready"or S.state==2 and"Win",640,200)
|
|
|
|
gc.setColor(1,1,1)
|
|
gc.print(S.target:sub(S.count,S.count),120,280,0,2)
|
|
gc.print(S.target:sub(S.count+1),310,380)
|
|
|
|
gc.setColor(1,1,1,.7)
|
|
setFont(40)
|
|
gc.print(S.target,120,520)
|
|
end
|
|
|
|
WIDGET.init("mg_AtoZ",{
|
|
WIDGET.newSelector{name="level", x=640,y=640,w=200,list={"A_Z","Z_A","Tech1","Tech2","KeyTest1","KeyTest2","Hello","Roll1","Roll2","Roll3","ZZZ","ZXZX","ZMZM","Stair","Stair2","Stair3","BPW"},disp=WIDGET.lnk_STPval("level"),code=function(i)sceneTemp.level=i;sceneTemp.target=levels[i]end,hide=function()return sceneTemp.state>0 end},
|
|
WIDGET.newButton{name="reset", x=160,y=100,w=180,h=100,color="lGreen",font=40,code=WIDGET.lnk_pressKey("space")},
|
|
WIDGET.newButton{name="keyboard", x=160,y=210,w=180,h=100,code=function()love.keyboard.setTextInput(true,0,select(2,SCR.xOy:transformPoint(0,500)),1,1)end,hide=not MOBILE},
|
|
WIDGET.newButton{name="back", x=1140,y=640,w=170,h=80,font=40,code=WIDGET.lnk_BACK},
|
|
}) |