This is what I currently have now, and yes, it doesn’t work like I wanted it to.
What I am trying to code is a game that works like an android unlock pattern, where you can draw in a type of a pattern, and do other functions if the pattern(that one puts in) matches which what exists in the code.
sn={“Spell number one”, 50, 4, 5, 6, 9}. This is basically theSpellThatIsCasted, enemyAttackPoint, #1of code, #2of code…hope you get the idea.
What currently happens now, though, is the pattern(that one puts in) is considered as a match for s1 or s2 or s3, even when just the first number(so the first position on the pattern) matched with what you drew in.
This is a small portion of my code:
for i=1,touchCount do
if castASpell[i]== s1[i+2] then
theSpellThatIsCasted= s1[1]
enemyAttackPoint= s1[2]
elseif castASpell[i]== s2[i+2] then
theSpellThatIsCasted= s2[1]
enemyAttackPoint= s2[2]
elseif castASpell[i]== s3[i+2] then
theSpellThatIsCasted= s3[1]
enemyAttackPoint= s3[2]
else
theSpellThatIsCasted=0
enemyAttackPoint=0
end
end
I would be so happy if anyone helped me out… To fix the code, make it better, make in shorter, or other seggestions or ideas… Thank you very much!
--put all the spells in one table
--put each touch sequence in a comma separated string << NOTE
Spells={
{"Spell number one", 50, "4, 5, 6, 9"},
{"Spell number two", 50, "3, 6, 4, 1"},
{"Spell number three", 50, "4, 2, 8, 7"},
}
--then to do the test...
--turn your table of touches into a comma separated string
--so {1,2,3,4} becomes "1,2,3,4"
local c = table.concat(castASpell,",")
--test each spell
theSpellThatIsCasted,enemyAttackPoint=0,0 --initialise
for s in pairs(Spells) do
if c == s[3] then
theSpellThatIsCasted = s[1]
enemyAttackPoint = s[2]
break
end
end
@hohohohoho - here’s a faster approach (it won’t make a difference for a small table of spells, but as your programs get bigger, you should know how to do this)
Spells={
{"Spell number one", 50, "4, 5, 6, 9"},
{"Spell number two", 50, "3, 6, 4, 1"},
{"Spell number three", 50, "4, 2, 8, 7"},
}
--this is new
--make an extra table where the lookup key is the touch sequence
--so touchSeq["4, 2, 8, 7"]=3
touchSeq={}
for i=1, #Spells do
touchSeq[Spells[i][3]] = i
end
--then to do the test...
--turn your table of touches into a comma separated string
--so {1,2,3,4} becomes "1,2,3,4"
local c = table.concat(castASpell,",")
--look it up in our new table, if it isn't found, it returns nil
pattern = touchSeq[c] --just one lookup is needed!
--and when we want to use it later
if pattern then --if a pattern has been chosen
enemyAttackPoint=Spells[pattern][2]
end
--this is good is if your Spells table has lots of items
--your code above would require you to copy all of them into variables
--whereas this approach just stores one number (pattern) for the chosen
--spell, and when you want to use one of the items, you just look it up