Memory Match Game
Memory Match Game
Let’s create a simple memory game. Please download the following zip file.
You find the psd file and the two external code files in the zip
- touchHandler.lua
- memoryGame.lua
Steps
- create a group which contains photo layers
- make a variable to let the external code to know which photo is tapped.
- add a button to each photo. set the variable value with photo number and attach touchHandler.lua
- add memoryGame.lua as external code
1.create a group
Create a kwik project with iPad mini using the psd file in the memory.zip.

Project and pages > Create Groups

Insert all photo layers and group name is gp_photos that is referred in the external codes

2.Create a variable
project and pages > Create Variable

photoNum variable is created. It holds a same number for same photo. For example, photo1 and photo11 layers are same. So we assign 1 to the button of photo1 and photo11

3.Create buttons
Each photo layer is a button with photoNum and with the external code of touchHandler.lua

From Code, add Edit Variable and Add External Code. photo1 and photo11 are set with 1 for photoNum

touchHandler.lua is set

but_11 for photo11. photoNum is 1

but_2 is photo2 and photoNum is 2

but_22 is photo22 and photoNum is 2

Set photoNum and touchHandler.lua to photo3, photo33, photo4 and photo44 as well
4.1 Finally memoryGame.lua
add memoryGame.lua from project and pages > Add External Code

Insert the lua codes after buttons and actions.

that’s all. Publish and test it.
4.2 lua codes
touchHandler.lua is just one line
layer.hitTest(event.tap.target)
memoryGame.lua has two parts. showing photos randomly and hitTest function
local placeHolder = {}
for i=1, layer.gp_photos.numChildren do
placeHolder[i] = {}
placeHolder[i].x, placeHolder[i].y = layer.gp_photos[i].x, layer.gp_photos[i].y
end
for i=1, layer.gp_photos.numChildren do
local ind = math.random(#placeHolder)
layer.gp_photos[i].x, layer.gp_photos[i].y = placeHolder[ind].x, placeHolder[ind].y
table.remove(placeHolder,ind)
layer.gp_photos[i].alpha = 0.01
layer.gp_photos[i].matched = false
end
local flips = 1
local flipped = {}
layer.hitTest= function(self)
if self.matched then return true end
isHistTest = true
if (flips == 1) then
_K.trans.flipCard = transition.to( self, {alpha=1, time=1000, delay=0})
if flipped[1] ~= self then
table.insert(flipped,self)
self.photoNum = UI.photoNum
flips = 2
end
elseif flips == 2 then --second flip in the round
if flipped[1] ~= self then
table.insert(flipped,self)
self.photoNum = UI.photoNum
_K.trans.flipCard = transition.to( self, {alpha=1, time=1000, delay=0})
if (flipped[1].photoNum == flipped[2].photoNum) then
flipped[1].matched = true
flipped[2].matched = true
flips = 1 -- returns the number of flips to 1
flipped = {} --cleans the flipped table
else
-- cards don’t match
local card1, card2 = flipped[1],flipped[2]
local function hideAgain()
_K.trans.flipCard1 = transition.to( card1, {alpha=0.01, time=1000, delay=0})
_K.trans.flipCard2 = transition.to( card2, {alpha=0.01, time=1000, delay=0})
end
_K.timerStash.hideAgain = timer.performWithDelay( 2000, hideAgain, 1 ) --timer to block the cards again, with the cover image
flips = 1
flipped = {}
end
end
end
return true
end